GNU bug report logs - #12600
24.2.50; linum-mode: line numbers in fringe do not refresh when resizing frame

Previous Next

Package: emacs;

Reported by: Christoph Scholtes <cschol2112 <at> gmail.com>

Date: Sun, 7 Oct 2012 23:05:01 UTC

Severity: normal

Merged with 11496

Found in versions 24.1.50, 24.2.50

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

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: martin rudalics <rudalics <at> gmx.at>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 12600 <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca
Subject: bug#12600: 24.2.50; linum-mode: line numbers in fringe do not refresh when resizing frame
Date: Tue, 16 Oct 2012 11:39:37 +0200
>> BTW, I meanwhile discovered that the update_mode_line field (with a
>> misleading comment IIUC) is the canonical approach to ask for
>> redisplaying a specific window.
>
> That's not my reading of the code.  The w->update_mode_line flag, if
> non-zero, forces redisplay of the mode line, and also of the menu bar
> and the tool bar, of that window.  Where did you see that its effect
> is to redisplay the whole window?

Because the doc-string for Fforce_window_update says "If optional arg
OBJECT is a window, force redisplay of that window only." but the code
does

      mark_window_display_accurate (object, 0);
      w->update_mode_line = 1;
      if (BUFFERP (w->buffer))
	XBUFFER (w->buffer)->prevent_redisplay_optimizations_p = 1;
      ++update_mode_lines;

and does not set windows_or_buffers_changed.  So apparently the above
(and not only setting w->update_mode_line to 1 as I concluded
incorrectly) are sufficient to force the redisplay of a single window
(including all windows showing the same buffer).

> force-window-update with a window as its argument just marks that one
> window's display "inaccurate", requests redisplay of its mode-line,
> and prevents optimizations of any other window displaying the same
> buffer.  Windows that don't display this buffer can still avoid some
> or all of redisplay through optimizations.

That's the case I had in mind.  So if I follow you correctly,
set_window_buffer could instead of doing

  windows_or_buffers_changed++;

call Fforce_window_update with the window whose buffer gets set as its
argument.

> I think resizing requests a thorough redisplay anyway,

Resizing a frame almost certainly does.  change_frame_size_1 does

  adjust_glyphs (f);
  calculate_costs (f);
  SET_FRAME_GARBAGED (f);
  f->resized_p = 1;

but none of these seem useful for Fwindow_end (are they useful anywhere
at all?), so ...

> setting windows_or_buffers_changed cannot hurt.

... I _had to_ set this in order to make the check in Fwindow_end fail.

martin




This bug report was last modified 12 years and 256 days ago.

Previous Next


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