diff options
| author | Eli Zaretskii | 2022-01-02 21:36:13 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2022-01-02 21:36:13 +0200 |
| commit | 6e53178a37d65218818fac3da1beac33db6ab5eb (patch) | |
| tree | a21a4b684b22fb5ef193c3195bbd566151cb3bf0 /src | |
| parent | 83da3a09d0d8fe8f13f405c1ec780e70e94f7b0b (diff) | |
| download | emacs-6e53178a37d65218818fac3da1beac33db6ab5eb.tar.gz emacs-6e53178a37d65218818fac3da1beac33db6ab5eb.zip | |
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)
Diffstat (limited to 'src')
| -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) | |||
| 13508 | 0, 0, 0, STRING_MULTIBYTE (f->desired_tab_bar_string)); | 13508 | 0, 0, 0, STRING_MULTIBYTE (f->desired_tab_bar_string)); |
| 13509 | it.paragraph_embedding = L2R; | 13509 | it.paragraph_embedding = L2R; |
| 13510 | 13510 | ||
| 13511 | clear_glyph_row (temp_row); | ||
| 13511 | while (!ITERATOR_AT_END_P (&it)) | 13512 | while (!ITERATOR_AT_END_P (&it)) |
| 13512 | { | 13513 | { |
| 13513 | clear_glyph_row (temp_row); | ||
| 13514 | it.glyph_row = temp_row; | 13514 | it.glyph_row = temp_row; |
| 13515 | display_tab_bar_line (&it, -1); | 13515 | display_tab_bar_line (&it, -1); |
| 13516 | /* If the tab-bar string includes newlines, get past it, because | ||
| 13517 | display_tab_bar_line doesn't. */ | ||
| 13518 | if (ITERATOR_AT_END_OF_LINE_P (&it)) | ||
| 13519 | set_iterator_to_next (&it, true); | ||
| 13516 | } | 13520 | } |
| 13517 | clear_glyph_row (temp_row); | 13521 | clear_glyph_row (temp_row); |
| 13518 | 13522 | ||
| @@ -13638,6 +13642,10 @@ redisplay_tab_bar (struct frame *f) | |||
| 13638 | extra -= h; | 13642 | extra -= h; |
| 13639 | } | 13643 | } |
| 13640 | display_tab_bar_line (&it, height + h); | 13644 | display_tab_bar_line (&it, height + h); |
| 13645 | /* If the tab-bar string includes newlines, get past it, | ||
| 13646 | because display_tab_bar_line doesn't. */ | ||
| 13647 | if (ITERATOR_AT_END_OF_LINE_P (&it)) | ||
| 13648 | set_iterator_to_next (&it, true); | ||
| 13641 | } | 13649 | } |
| 13642 | } | 13650 | } |
| 13643 | else | 13651 | else |