GNU bug report logs - #38038
27.0.50; Emacs freezes opening tabs.

Previous Next

Package: emacs;

Reported by: Ergus <spacibba <at> aol.com>

Date: Sat, 2 Nov 2019 21:43:01 UTC

Severity: normal

Found in version 27.0.50

Done: martin rudalics <rudalics <at> gmx.at>

Bug is archived. No further changes may be made.

Full log


Message #65 received at 38038 <at> debbugs.gnu.org (full text, mbox):

From: martin rudalics <rudalics <at> gmx.at>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 38038 <at> debbugs.gnu.org, spacibba <at> aol.com, juri <at> linkov.net
Subject: Re: bug#38038: 27.0.50; Emacs freezes opening tabs.
Date: Sat, 9 Nov 2019 10:02:36 +0100
> And the error says that the window has no buffer, is that right?

I think so but didn't look.  Is it a good idea to signal that error
here in the first place?

>> where frame #3 indicates that we probably should avoid asking for a buffer
>> local value in a pseudo window.  Right?
>
> Yes.  Does adding that fix the problem, including the original one
> with the tab bar?

The below makes the bug go away for the tool bar, I didn't try for the
tab bar.

diff --git a/src/w32term.c b/src/w32term.c
index 9da0845836..68ae9be8e7 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -2512,20 +2512,23 @@ w32_draw_glyph_string (struct glyph_string *s)
 		  unsigned long minimum_offset;
 		  BOOL underline_at_descent_line;
 		  BOOL use_underline_position_properties;
-		  Lisp_Object val
-		    = buffer_local_value (Qunderline_minimum_offset,
-		                          s->w->contents);
+		  Lisp_Object val;
+
+		  if (BUFFERP (s->w->contents))
+		    val = buffer_local_value (Qunderline_minimum_offset,
+					      s->w->contents);
 		  if (FIXNUMP (val))
 		    minimum_offset = max (0, XFIXNUM (val));
 		  else
 		    minimum_offset = 1;
-		  val = buffer_local_value (Qx_underline_at_descent_line,
-					    s->w->contents);
+		  if (BUFFERP (s->w->contents))
+		    val = buffer_local_value (Qx_underline_at_descent_line,
+					      s->w->contents);
 		  underline_at_descent_line
 		    = !(NILP (val) || EQ (val, Qunbound));
-		  val
-		    = buffer_local_value (Qx_use_underline_position_properties,
-					  s->w->contents);
+		  if (BUFFERP (s->w->contents))
+		    val = buffer_local_value (Qx_use_underline_position_properties,
+					      s->w->contents);
 		  use_underline_position_properties
 		    = !(NILP (val) || EQ (val, Qunbound));

The bug was apparently introduced by

commit bbf53d99b57bd3d7fc0427d378df2efc6fa10e00
Author: Aaron Jensen <aaronjensen <at> gmail.com>
Date:   Sat Mar 10 13:14:28 2018 +0200

    Allow underline position variables be buffer-local

    * src/nsterm.m (ns_draw_text_decoration):
    * src/w32term.c (x_draw_glyph_string):
    * src/xterm.c (x_draw_glyph_string): Allow underline-minimum-offset,
    underline-at-descent-line, and x-use-underline-position-properties
    be buffer local variables.  (Bug#30553)
    * src/xdisp.c (syms_of_xdisp) <underline-minimum-offset>: Add DEFSYM.

and probably manifests itself, as noted earlier, in all pseudo windows
that try to draw an underlined glyph string.

I can continue working on this after we decided whether to ask for
pseudo-windowness or just use the BUFFERP predicate as I did.

martin




This bug report was last modified 5 years and 195 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.