diff options
author | Eli Zaretskii <eliz@gnu.org> | 2022-01-02 21:36:13 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-01-02 21:36:13 +0200 |
commit | 6e53178a37d65218818fac3da1beac33db6ab5eb (patch) | |
tree | a21a4b684b22fb5ef193c3195bbd566151cb3bf0 | |
parent | 83da3a09d0d8fe8f13f405c1ec780e70e94f7b0b (diff) | |
download | emacs-6e53178a37d65218818fac3da1beac33db6ab5eb.tar.gz |
Avoid inflooping when 'tab-bar-format' includes embedded newlines
* src/xdisp.c (tab_bar_height, redisplay_tab_bar): Support
'tab-bar-format' with embedded newlines. (Bug#52947)
-rw-r--r-- | src/xdisp.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index 7c3885c975d..73edc0d7aaf 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13508,11 +13508,15 @@ tab_bar_height (struct frame *f, int *n_rows, bool pixelwise) 0, 0, 0, STRING_MULTIBYTE (f->desired_tab_bar_string)); it.paragraph_embedding = L2R; + clear_glyph_row (temp_row); while (!ITERATOR_AT_END_P (&it)) { - clear_glyph_row (temp_row); it.glyph_row = temp_row; display_tab_bar_line (&it, -1); + /* If the tab-bar string includes newlines, get past it, because + display_tab_bar_line doesn't. */ + if (ITERATOR_AT_END_OF_LINE_P (&it)) + set_iterator_to_next (&it, true); } clear_glyph_row (temp_row); @@ -13638,6 +13642,10 @@ redisplay_tab_bar (struct frame *f) extra -= h; } display_tab_bar_line (&it, height + h); + /* If the tab-bar string includes newlines, get past it, + because display_tab_bar_line doesn't. */ + if (ITERATOR_AT_END_OF_LINE_P (&it)) + set_iterator_to_next (&it, true); } } else |