]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid inflooping when 'tab-bar-format' includes embedded newlines
authorEli Zaretskii <eliz@gnu.org>
Sun, 2 Jan 2022 19:36:13 +0000 (21:36 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sun, 2 Jan 2022 19:36:13 +0000 (21:36 +0200)
* src/xdisp.c (tab_bar_height, redisplay_tab_bar): Support
'tab-bar-format' with embedded newlines.  (Bug#52947)

src/xdisp.c

index 7c3885c975dbc0069f1b082a6f6d6ea01c929882..73edc0d7aaf3ea89bfc9f4375fa076db9fbb9419 100644 (file)
@@ -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