* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display @ 2014-10-30 13:46 Bruno Félix Rezende Ribeiro 2014-10-31 20:30 ` Stefan Monnier 2014-11-01 8:38 ` Eli Zaretskii 0 siblings, 2 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-10-30 13:46 UTC (permalink / raw) To: 18912 [-- Attachment #1.1: Type: text/plain, Size: 7086 bytes --] In the following single-headed setup GNU Emacs behaves as intended: Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096 VGA1 connected primary (normal left inverted right x axis y axis) 1280x720 59.86 + 1024x768 75.08 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 56.25 640x480 75.00 72.81 66.67 60.00 720x400 70.08 LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 228mm x 131mm 1024x600 59.99*+ 800x600 60.32 56.25 640x480 59.94 In this setup, as you can see, only the LVDS1 output is enabled. However in my usual setup I have both outputs enabled for a dual-headed display: Screen 0: minimum 320 x 200, current 2304 x 720, maximum 4096 x 4096 VGA1 connected primary 1280x720+0+0 (normal left inverted right x axis y axis) 340mm x 270mm 1280x720 59.86*+ 1024x768 75.08 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 56.25 640x480 75.00 72.81 66.67 60.00 720x400 70.08 LVDS1 connected 1024x600+1280+120 (normal left inverted right x axis y axis) 228mm x 131mm 1024x600 59.99*+ 800x600 60.32 56.25 640x480 59.94 In this setup GNU Emacs corrupts the mode-line (a graphical glitch) drawing over it the buffer's line that would otherwise be below it. Refreshing the window with 'xrefresh' or just switching to another window and back again repaints the mode-line content, so it looks normal, until the next buffer scroll operation, when it gets corrupt again. Starting Emacs with the '-Q' option, without changing the frame's geometry, and typing 'C-x d /dev <RET>' is sufficient to reproduce the bug. Actually, most of the time, Emacs windows that hold text underneath the mode-line trigger the problem. See the attached screenshot for how the corrupted mode-line looks like. In GNU Emacs 24.4.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2014-10-30 on felix-laptop Windowing system distributor `The X.Org Foundation', version 11.0.11601000 System Description: Debian GNU/Linux testing (jessie) Configured using: `configure --prefix=/home/felix/opt/emacs-24.4 --with-x-toolkit=athena' Important settings: value of $LANG: pt_BR.utf8 locale-coding-system: utf-8-unix Major mode: Info Minor modes in effect: diff-auto-refine-mode: t shell-dirtrack-mode: t global-semanticdb-minor-mode: t global-semantic-idle-scheduler-mode: t semantic-mode: t winner-mode: t electric-pair-mode: t show-paren-mode: t display-time-mode: t which-function-mode: t tooltip-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t column-number-mode: t line-number-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug sendmail reposition calc-alg calc-ext calc-menu calc calc-loaddefs calc-macs crm org org-macro org-footnote org-pcomplete org-list org-faces org-entities org-version ob-emacs-lisp ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys ob-comint ob-core ob-eval org-compat org-macs org-loaddefs debbugs-gnu derived debbugs cl-macs cl soap-client warnings xml diff-mode diff autoload tar-mode lisp-mnt mm-archive message format-spec rfc822 mml mml-sec mailabbrev gmm-utils mailheader mm-decode mm-bodies mm-encode mail-utils network-stream starttls url-http tls mail-parse rfc2231 rfc2047 rfc2045 ietf-drums url-gw url-cache url-auth url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap url-handlers url-parse auth-source gnus-util mm-util mail-prsvr password-cache url-vars epg finder-inf browse-url goto-addr shell pcomplete grep compile dired-aux dired dabbrev cus-edit wid-edit cus-start cus-load noutline outline view apropos gdb-mi bindat json gud easy-mmode comint ansi-color linum mule-util cal-move cal-menu calendar cal-loaddefs semantic/tag-write jka-compr misearch multi-isearch semantic/symref/list semantic/complete eieio-opt semantic/sb speedbar sb-image dframe find-func semantic/symref semantic/analyze/complete semantic/db-typecache semantic/ia semantic/senator semantic/edit help-mode thingatpt semantic/tag-file add-log semantic/imenu advice semantic/db-file data-debug cedet-files semantic/bovine/c semantic/decorate/include semantic/decorate/mode semantic/decorate pulse hideif semantic/bovine/c-by semantic/lex-spp semantic/bovine/gcc semantic/dep semantic/bovine semantic/analyze/refs semantic/db-find semantic/db-ref semantic/analyze semantic/sort semantic/scope semantic/analyze/fcn superword subword cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs server eldoc help-fns paredit hideshow glasses flyspell ispell semantic/db-mode semantic/db gv eieio-base semantic/idle semantic/format ezimage semantic/tag-ls semantic/find semantic/ctxt semantic/util-modes semantic/util semantic semantic/tag semantic/lex semantic/fw eieio byte-opt bytecomp byte-compile cconv eieio-core mode-local cedet windmove winner ring elec-pair paren time time-date which-func imenu edmacro kmacro cl-loaddefs cl-lib auctex-autoloads company-autoloads dired-details+-autoloads dired-details-autoloads info easymenu geiser-autoloads google-translate-autoloads paredit-autoloads quack-autoloads sokoban-autoloads package epg-config tooltip electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment lisp-mode prog-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind gfilenotify dynamic-setting system-font-setting font-render-setting x-toolkit x multi-tty emacs) Memory information: ((conses 8 474862 160898) (symbols 24 44010 0) (miscs 20 6276 2576) (strings 16 101774 31471) (string-bytes 1 2940699) (vectors 8 39166) (vector-slots 4 725772 24178) (floats 8 2008 461) (intervals 28 12998 46) (buffers 512 38) (heap 1024 53384 2385)) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #1.2: emacs-mode-line-bug.png --] [-- Type: image/png, Size: 82197 bytes --] [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-10-30 13:46 bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display Bruno Félix Rezende Ribeiro @ 2014-10-31 20:30 ` Stefan Monnier 2014-10-31 20:44 ` Bruno Félix Rezende Ribeiro 2014-11-01 8:42 ` Eli Zaretskii 2014-11-01 8:38 ` Eli Zaretskii 1 sibling, 2 replies; 63+ messages in thread From: Stefan Monnier @ 2014-10-31 20:30 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > In this setup GNU Emacs corrupts the mode-line (a graphical glitch) > drawing over it the buffer's line that would otherwise be below it. My guess is that it's a bug in the X11 acceleration code for your graphics card. At least, that was the conclusion the last time this came up, IIRC. Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-10-31 20:30 ` Stefan Monnier @ 2014-10-31 20:44 ` Bruno Félix Rezende Ribeiro 2014-11-01 8:42 ` Eli Zaretskii 1 sibling, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-10-31 20:44 UTC (permalink / raw) To: Stefan Monnier; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 595 bytes --] Stefan Monnier wrote: > My guess is that it's a bug in the X11 acceleration code for your > graphics card. At least, that was the conclusion the last time this > came up, IIRC. FWIW, my X11 graphics card driver is 'intel' and my card is an 'Intel 945 GME'. What about an Emacs workaround: redraw the mode-line after any scroll operation? :-P -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-10-31 20:30 ` Stefan Monnier 2014-10-31 20:44 ` Bruno Félix Rezende Ribeiro @ 2014-11-01 8:42 ` Eli Zaretskii 2014-11-01 12:56 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-01 8:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: oitofelix, 18912 > From: Stefan Monnier <monnier@iro.umontreal.ca> > Date: Fri, 31 Oct 2014 16:30:18 -0400 > Cc: 18912@debbugs.gnu.org > > > In this setup GNU Emacs corrupts the mode-line (a graphical glitch) > > drawing over it the buffer's line that would otherwise be below it. > > My guess is that it's a bug in the X11 acceleration code for your > graphics card. How could the graphics card "know" the details of the file that should not be visible in the window? The text that overwrites the mode line is not for any of the files shown above the mode line, it's the file that is the next one in the listing. So the only way the acceleration could cause that is if it returned incorrect information about the display dimensions/pixel size. I cannot explain to myself how this kind of bug in the graphics card could affect Emacs, except perhaps in a maximized frame. Bruno, do these problems happen in a non-maximized frame, e.g. the one you get immediately after invoking "emacs -Q"? ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 8:42 ` Eli Zaretskii @ 2014-11-01 12:56 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-01 12:56 UTC (permalink / raw) To: Eli Zaretskii, Stefan Monnier; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 403 bytes --] Eli Zaretskii wrote: > Bruno, do these problems happen in a non-maximized frame, e.g. the one > you get immediately after invoking "emacs -Q"? Yes, they do. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-10-30 13:46 bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display Bruno Félix Rezende Ribeiro 2014-10-31 20:30 ` Stefan Monnier @ 2014-11-01 8:38 ` Eli Zaretskii 2014-11-01 9:16 ` Eli Zaretskii 2014-11-01 12:54 ` Bruno Félix Rezende Ribeiro 1 sibling, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-01 8:38 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Thu, 30 Oct 2014 11:46:29 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > > > [1:multipart/mixed Hide] > > > [1/1:text/plain Hide] > > In the following single-headed setup GNU Emacs behaves as intended: > > Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096 > VGA1 connected primary (normal left inverted right x axis y axis) > 1280x720 59.86 + > 1024x768 75.08 70.07 60.00 > 832x624 74.55 > 800x600 72.19 75.00 60.32 56.25 > 640x480 75.00 72.81 66.67 60.00 > 720x400 70.08 > LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y > axis) 228mm x 131mm > 1024x600 59.99*+ > 800x600 60.32 56.25 > 640x480 59.94 > > In this setup, as you can see, only the LVDS1 output is enabled. > > However in my usual setup I have both outputs enabled for a dual-headed > display: > > Screen 0: minimum 320 x 200, current 2304 x 720, maximum 4096 x 4096 > VGA1 connected primary 1280x720+0+0 (normal left inverted right x axis > y axis) 340mm x 270mm > 1280x720 59.86*+ > 1024x768 75.08 70.07 60.00 > 832x624 74.55 > 800x600 72.19 75.00 60.32 56.25 > 640x480 75.00 72.81 66.67 60.00 > 720x400 70.08 > LVDS1 connected 1024x600+1280+120 (normal left inverted right x axis y > axis) 228mm x 131mm > 1024x600 59.99*+ > 800x600 60.32 56.25 > 640x480 59.94 > > In this setup GNU Emacs corrupts the mode-line (a graphical glitch) > drawing over it the buffer's line that would otherwise be below it. > > Refreshing the window with 'xrefresh' or just switching to another > window and back again repaints the mode-line content, so it looks > normal, until the next buffer scroll operation, when it gets corrupt > again. > > Starting Emacs with the '-Q' option, without changing the frame's > geometry, and typing 'C-x d /dev <RET>' is sufficient to reproduce the > bug. Actually, most of the time, Emacs windows that hold text > underneath the mode-line trigger the problem. Please show the output of each one the following forms, evaluated in both the "good" and "bad" configurations, when you start "emacs -Q" and visit the same /dev directory: (window-height) (window-pixel-height) You can evaluate each form using M-:, as in M-: ((window-height) RET Please compare the return value of window-height with the actual number of lines available in that window, and tell if the two match. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 8:38 ` Eli Zaretskii @ 2014-11-01 9:16 ` Eli Zaretskii 2014-11-01 12:54 ` Bruno Félix Rezende Ribeiro 1 sibling, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-01 9:16 UTC (permalink / raw) To: oitofelix; +Cc: 18912 > Date: Sat, 01 Nov 2014 10:38:12 +0200 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 18912@debbugs.gnu.org > > You can evaluate each form using M-:, as in > > M-: ((window-height) RET Sorry, please use just one opening parenthesis: M-: (window-height) RET ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 8:38 ` Eli Zaretskii 2014-11-01 9:16 ` Eli Zaretskii @ 2014-11-01 12:54 ` Bruno Félix Rezende Ribeiro 2014-11-01 13:03 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-01 12:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1859 bytes --] Eli Zaretskii wrote: > Please show the output of each one the following forms, evaluated in > both the "good" and "bad" configurations, when you start "emacs -Q" > and visit the same /dev directory: > > (window-height) > (window-pixel-height) > > You can evaluate each form using M-:, as in > > M-: (window-height) RET > > Please compare the return value of window-height with the actual > number of lines available in that window, and tell if the two match. For this test Emacs was started with the option '-Q' and in both configurations the frame was put by the window manager in the same area of the VGA1 output, with unchanged relative geometry: xwininfo (common to both configurations): Absolute upper-left X: 520 Absolute upper-left Y: 23 Relative upper-left X: 4 Relative upper-left Y: 23 Width: 756 Height: 697 Depth: 24 Border width: 0 Good configuration (only VGA1 enabled): xwininfo: Corners: +520+23 -4+23 -4-0 +520-0 -geometry 80x37-0+0 (window-height) => 34 (window-pixel-height) => 612 Bad configuration (both VGA1 and LVDS1 enabled): xwininfo: Corners: +520+23 -1028+23 -1028-0 +520-0 -geometry 80x37+516+0 (window-height) ==> 34 (window-pixel-height) ==> 613 Interesting enough, '(window-pixel-height)' returns different values for both configurations under the "same" circumstances. Furthermore, in both configurations '(window-height)' returns one line more than what was actually shown. Therefore, both expressions seem to suggest an "off by one" bug. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 12:54 ` Bruno Félix Rezende Ribeiro @ 2014-11-01 13:03 ` Eli Zaretskii 2014-11-02 21:49 ` Bruno Félix Rezende Ribeiro 2014-11-03 9:41 ` martin rudalics 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-01 13:03 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro, martin rudalics; +Cc: 18912 > Date: Sat, 01 Nov 2014 10:54:03 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > For this test Emacs was started with the option '-Q' and in both > configurations the frame was put by the window manager in the same area > of the VGA1 output, with unchanged relative geometry: > > xwininfo (common to both configurations): > Absolute upper-left X: 520 > Absolute upper-left Y: 23 > Relative upper-left X: 4 > Relative upper-left Y: 23 > Width: 756 > Height: 697 > Depth: 24 > Border width: 0 > > Good configuration (only VGA1 enabled): > > xwininfo: > Corners: +520+23 -4+23 -4-0 +520-0 > -geometry 80x37-0+0 > > (window-height) => 34 > (window-pixel-height) => 612 > > Bad configuration (both VGA1 and LVDS1 enabled): > > xwininfo: > Corners: +520+23 -1028+23 -1028-0 +520-0 > -geometry 80x37+516+0 > > (window-height) ==> 34 > (window-pixel-height) ==> 613 Thanks. I don't see anything strange here, the 1-pixel difference shouldn't have caused what you see. Martin, any suggestions how to dig into this further? > Interesting enough, '(window-pixel-height)' returns different values for > both configurations under the "same" circumstances. Furthermore, in > both configurations '(window-height)' returns one line more than what > was actually shown. Therefore, both expressions seem to suggest an "off > by one" bug. I see no bug here: both functions return the height of the window including the mode line, so the value sounds correct if you have 33 lines of text in that window. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 13:03 ` Eli Zaretskii @ 2014-11-02 21:49 ` Bruno Félix Rezende Ribeiro 2014-11-03 3:34 ` Eli Zaretskii 2014-11-03 9:41 ` martin rudalics 1 sibling, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-02 21:49 UTC (permalink / raw) To: Eli Zaretskii, martin rudalics; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1031 bytes --] Eli Zaretskii wrote: > Thanks. > > I don't see anything strange here, the 1-pixel difference shouldn't > have caused what you see. > > Martin, any suggestions how to dig into this further? What about implementing a global variable 'refresh-mode-line-after-scroll' which when set to 't' repaints the mode-line after any scroll operation? While it'd be just a workaround treating the symptoms rather than the actual cause, it would be handy to solve a whole class of problems, some potentially very hard to reproduce and therefore fix, which would result in this same unwanted side effect of corrupting the mode-line. If the workaround is good enough, it can possibly save Emacs developers time in the future, if the users are happy sticking with it. I'd be happy, BTW. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-02 21:49 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 3:34 ` Eli Zaretskii 2014-11-03 6:03 ` Bruno Félix Rezende Ribeiro 2014-11-03 9:08 ` Andreas Schwab 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 3:34 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Sun, 02 Nov 2014 19:49:50 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > What about implementing a global variable > 'refresh-mode-line-after-scroll' which when set to 't' repaints the > mode-line after any scroll operation? Unnecessary redrawing causes unpleasant flickering that people rightfully complain about. Emacs never writes buffer contents where the mode line should be, so this problem could only happen if Emacs for some reason becomes confused about the window dimensions. The result could be a variety of display problems, not just what you see. Are you willing to debug this problem on your machine using GDB? If so, I might come up with some instructions. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 3:34 ` Eli Zaretskii @ 2014-11-03 6:03 ` Bruno Félix Rezende Ribeiro 2014-11-03 16:20 ` Eli Zaretskii 2014-11-03 9:08 ` Andreas Schwab 1 sibling, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 6:03 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1982 bytes --] Eli Zaretskii wrote: > Unnecessary redrawing causes unpleasant flickering that people > rightfully complain about. It wouldn't be unnecessary because only people having a similar problem would deliberately enable the mode-line redrawing. I can assure you a constantly corrupted mode-line is much more annoying than one fast flash that will only occur sporadically, in just one line, by direct command of the user. In particular, on scroll operations all lines in the window are expected to change, so it's not that bad if just one more line, contiguous to the region, flashes. Actually, the chances are that the flash won't be noticeable at all. As suggested, this workaround would have no effect on any users that have not experienced the problem, while virtually fixing it for people who experiences it. That's almost ideal in a scenario where it'd be very time consuming or hard to find the cause and fix the actual bug. > Emacs never writes buffer contents where the mode line should be, so > this problem could only happen if Emacs for some reason becomes > confused about the window dimensions. The result could be a variety > of display problems, not just what you see. Yeah, it might be, but we can't really know until someone experiences other correlated display problems. However, the workaround won't worsen the bug under any possible circumstances, and fixes it for people who are already experiencing that particular display problem. > Are you willing to debug this problem on your machine using GDB? If > so, I might come up with some instructions. Sure, why not? However, if we can't find the bug's root, I'll ask you to consider implementing the suggested workaround. Deal? ;-) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 6:03 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 16:20 ` Eli Zaretskii 2014-11-03 17:43 ` martin rudalics 2014-11-03 20:06 ` Bruno Félix Rezende Ribeiro 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 16:20 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Mon, 03 Nov 2014 04:03:39 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: rudalics@gmx.at, 18912@debbugs.gnu.org > > Eli Zaretskii wrote: > > Unnecessary redrawing causes unpleasant flickering that people > > rightfully complain about. > > It wouldn't be unnecessary because only people having a similar problem > would deliberately enable the mode-line redrawing. I can assure you a > constantly corrupted mode-line is much more annoying than one fast flash > that will only occur sporadically, in just one line, by direct command > of the user. In particular, on scroll operations all lines in the > window are expected to change, so it's not that bad if just one more > line, contiguous to the region, flashes. Actually, the chances are that > the flash won't be noticeable at all. I'd like to solve this problem, not paper over it. I hope you agree that solving it is better than working around it. > > Are you willing to debug this problem on your machine using GDB? If > > so, I might come up with some instructions. > > Sure, why not? Thanks, please find the instructions below. > However, if we can't find the bug's root, I'll ask you to consider > implementing the suggested workaround. Deal? ;-) I find it hard to believe that we won't find the root cause, so I think we don't need to consider that possibility. Here are the first instructions to get information that will help us start digging into this. (These are in addition to what Martin already requested.) First, please build Emacs without optimizations and with extra checking code enabled: CFLAGS='-O0 -g3' ./configure --prefix=/home/felix/opt/emacs-24.4 --with-x-toolkit=athena --enable-checking='yes,glyphs' (I only care about CFLAGS and the --enable-checking= option; the rest I just copied from your original report, but feel free to change them if you want. The --enable-checking= option is required to compile the dump-glyph-matrix command I ask you to use below.) After 'configure' finishes, invoke "make". You don't have to invoke "make install", as Emacs can be run from the src/ directory where it was built. Now start Emacs you've just build with "emacs -Q", type the "C-x d" command that you say is sufficient to reproduce the problem, and then type this: M-x dump-glyph-matrix RET This outputs to the standard error stream the description of the internal data structure, called "glyph matrix", which Emacs maintains for each window on a GUI frame. Please post that output (you may wish to redirect stderr to a file when you invoke Emacs, to make that easier). Please do this once for the "good" configuration, and another time for the "bad" configuration, but please make sure you invoke Emacs the same in both cases and type the same "C-x d" command in each case. Next, in the "bad" configuration and with the listing of /dev and corrupted mode line displayed, type this: M-: (setq frame-resize-pixelwise t) RET Now carefully decrease the frame's height by dragging its upper or lower edge with the mouse. Please drag it slowly and carefully, so that the frame is resized one pixel at a time. After each resize, please see if the mode line is no longer corrupted. Perhaps kill the buffer and type "C-x d" again to make sure the corruption disappeared for good. The first time the mode line stops being corrupted, type M-x dump-glyph-matrix RET again, and include this (3rd) output in your message. Also, please tell how many pixels did you subtract from the original frame height before the corruption disappeared (assuming it ever does). Where are the instructions to use the debugger, you ask? Well, not yet, but maybe after we see what the above tells us. Thanks. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 16:20 ` Eli Zaretskii @ 2014-11-03 17:43 ` martin rudalics 2014-11-03 17:52 ` Eli Zaretskii 2014-11-03 20:06 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-03 17:43 UTC (permalink / raw) To: Eli Zaretskii, Bruno Félix Rezende Ribeiro; +Cc: 18912 > Now carefully decrease the frame's height by dragging its upper or > lower edge with the mouse. Please drag it slowly and carefully, so > that the frame is resized one pixel at a time. After each resize, > please see if the mode line is no longer corrupted. Is there any reason Bruno cannot use something like (while (y-or-n-p "decrease?") (set-frame-height nil (1- (frame-text-height)) nil t)) here? martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 17:43 ` martin rudalics @ 2014-11-03 17:52 ` Eli Zaretskii 2014-11-03 18:01 ` martin rudalics 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 17:52 UTC (permalink / raw) To: martin rudalics; +Cc: oitofelix, 18912 > Date: Mon, 03 Nov 2014 18:43:38 +0100 > From: martin rudalics <rudalics@gmx.at> > CC: 18912@debbugs.gnu.org > > > Now carefully decrease the frame's height by dragging its upper or > > lower edge with the mouse. Please drag it slowly and carefully, so > > that the frame is resized one pixel at a time. After each resize, > > please see if the mode line is no longer corrupted. > > Is there any reason Bruno cannot use something like > > (while (y-or-n-p "decrease?") > (set-frame-height nil (1- (frame-text-height)) nil t)) > > here? Any technique to decrease by single pixels will do. I just find the mouse to be the most convenient one; but that's me. I also asked to verify after each decrement that the mode line will not be overlaid by some other text, so I think a loop is not TRT here. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 17:52 ` Eli Zaretskii @ 2014-11-03 18:01 ` martin rudalics 2014-11-03 18:19 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-03 18:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: oitofelix, 18912 >> (while (y-or-n-p "decrease?") >> (set-frame-height nil (1- (frame-text-height)) nil t)) >> >> here? > > Any technique to decrease by single pixels will do. I just find the > mouse to be the most convenient one; but that's me. > > I also asked to verify after each decrement that the mode line will > not be overlaid by some other text, so I think a loop is not TRT here. I thought the y-or-n-p would give Bruno time to verify that. martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 18:01 ` martin rudalics @ 2014-11-03 18:19 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 18:19 UTC (permalink / raw) To: martin rudalics; +Cc: oitofelix, 18912 > Date: Mon, 03 Nov 2014 19:01:59 +0100 > From: martin rudalics <rudalics@gmx.at> > CC: oitofelix@gnu.org, 18912@debbugs.gnu.org > > I thought the y-or-n-p would give Bruno time to verify that. If it does, fine with me. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 16:20 ` Eli Zaretskii 2014-11-03 17:43 ` martin rudalics @ 2014-11-03 20:06 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:24 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 20:06 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1.1: Type: text/plain, Size: 4639 bytes --] Eli Zaretskii wrote: > I'd like to solve this problem, not paper over it. I hope you agree > that solving it is better than working around it. Sure, given that it's practical to solve. > I find it hard to believe that we won't find the root cause, so I > think we don't need to consider that possibility. I'm glad to hear it! I'll do whatever I can to help you figure this out. :-) > Here are the first instructions to get information that will help us > start digging into this. (These are in addition to what Martin > already requested.) I've replied to Martin's request already. > First, please build Emacs without optimizations and with extra > checking code enabled: > > CFLAGS='-O0 -g3' ./configure --prefix=/home/felix/opt/emacs-24.4 --with-x-toolkit=athena --enable-checking='yes,glyphs' > > (I only care about CFLAGS and the --enable-checking= option; the rest > I just copied from your original report, but feel free to change them > if you want. The --enable-checking= option is required to compile the > dump-glyph-matrix command I ask you to use below.) Here is what Emacs says about the configuration step: Configured using: `configure --prefix=/home/felix/opt/emacs-24.4-debug --with-x-toolkit=athena --enable-checking=yes,glyphs 'CFLAGS=-O0 -g3'' I did a VPATH build, though. > After 'configure' finishes, invoke "make". You don't have to invoke > "make install", as Emacs can be run from the src/ directory where it > was built. I did that: ran it right away from the build directory. > Now start Emacs you've just build with "emacs -Q", type the "C-x d" > command that you say is sufficient to reproduce the problem, and then > type this: > > M-x dump-glyph-matrix RET > > This outputs to the standard error stream the description of the > internal data structure, called "glyph matrix", which Emacs maintains > for each window on a GUI frame. Please post that output (you may wish > to redirect stderr to a file when you invoke Emacs, to make that > easier). > > Please do this once for the "good" configuration, and another time for > the "bad" configuration, but please make sure you invoke Emacs the > same in both cases and type the same "C-x d" command in each case. The outputs of the 'dump-glyph-matrix' command for both the good and bad configurations are in the attached files 'dump-glyph-matrix-good.txt' and 'dump-glyph-matrix-bad.txt', respectively; they are identical, though. > Next, in the "bad" configuration and with the listing of /dev and > corrupted mode line displayed, type this: > > M-: (setq frame-resize-pixelwise t) RET > > Now carefully decrease the frame's height by dragging its upper or > lower edge with the mouse. Please drag it slowly and carefully, so > that the frame is resized one pixel at a time. After each resize, > please see if the mode line is no longer corrupted. Perhaps kill the > buffer and type "C-x d" again to make sure the corruption disappeared > for good. The first time the mode line stops being corrupted, type > > M-x dump-glyph-matrix RET > > again, and include this (3rd) output in your message. Also, please > tell how many pixels did you subtract from the original frame height > before the corruption disappeared (assuming it ever does). For the sake of precision I used the method suggested by Martin: evaluating the expression (while (y-or-n-p "decrease?") (set-frame-height nil (1- (frame-text-height)) nil t)) in the requested condition. In order to not be fooled by a spurious mode-line redrawing, I killed the buffer and invoked 'C-x d /dev RET' again and the glitch was gone, after one iteration (minus 1 pixel). The output of the command 'dump-glyph-matrix' is in the attached file named 'dump-glyph-matrix-bad-resized.txt'. This one is different from the other two. Then, to be sure I executed immediately the inverse procedure by evaluating the expression (while (y-or-n-p "increase?") (set-frame-height nil (1+ (frame-text-height)) nil t)) and therefore incrementing the frame's height by 1 pixel. After killing and getting again to the Dired buffer, the glitch was back. > Where are the instructions to use the debugger, you ask? Well, not > yet, but maybe after we see what the above tells us. I'm waiting for further instructions. :-P -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #1.2: dump-glyph-matrix-bad.txt --] [-- Type: text/plain, Size: 3639 bytes --] PT = 214, BEGV = 1. ZV = 10370 Cursor x = 468, y = 72, hpos = 52, vpos = 4 ============================================= 0: (1) '' 0: (1) ' /dev:[\n]' 0: (1) '' 1: (1) '' 1: (1) ' total used in directory 4 available 10240[\n]' 1: (1) '' 2: (1) '' 2: (1) ' drwxr-xr-x 19 root root 3500 Nov 1 21:13 .[\n]' 2: (1) '' 3: (1) '' 3: (1) ' drwxr-xr-x 22 root root 4096 Out 27 17:58 ..[\n]' 3: (1) '' 4: (1) '' 4: (1) ' crw-rw---- 1 root video 10, 175 Out 30 22:18 agpgart[\n]' 4: (1) '' 5: (1) '' 5: (1) ' crw-rw----+ 1 root audio 14, 4 Out 30 22:18 audio[\n]' 5: (1) '' 6: (1) '' 6: (1) ' crw------- 1 root root 10, 235 Out 30 22:18 autofs[\n]' 6: (1) '' 7: (1) '' 7: (1) ' drwxr-xr-x 2 root root 400 Out 30 22:18 block[\n]' 7: (1) '' 8: (1) '' 8: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:16 bsg[\n]' 8: (1) '' 9: (1) '' 9: (1) ' crw------- 1 root root 10, 234 Out 30 22:17 btrfs-control[\n]' 9: (1) '' 10: (1) '' 10: (1) ' drwxr-xr-x 3 root root 60 Out 30 22:16 bus[\n]' 10: (1) '' 11: (1) '' 11: (1) ' drwxr-xr-x 2 root root 3340 Nov 3 15:28 char[\n]' 11: (1) '' 12: (1) '' 12: (1) ' crw------- 1 root root 5, 1 Out 30 22:18 console[\n]' 12: (1) '' 13: (1) '' 13: (1) ' lrwxrwxrwx 1 root root 11 Out 30 22:16 core -> /proc/kcore[\n]' 13: (1) '' 14: (1) '' 14: (1) ' drwxr-xr-x 2 root root 60 Out 30 22:16 cpu[\n]' 14: (1) '' 15: (1) '' 15: (1) ' crw------- 1 root root 10, 62 Out 30 22:18 cpu_dma_latency[\n]' 15: (1) '' 16: (1) '' 16: (1) ' crw-rw-rw- 1 root root 10, 203 Out 30 22:18 cuse[\n]' 16: (1) '' 17: (1) '' 17: (1) ' drwxr-xr-x 5 root root 100 Out 30 22:17 disk[\n]' 17: (1) '' 18: (1) '' 18: (1) ' brw-rw---- 1 root disk 254, 0 Out 30 22:18 dm-0[\n]' 18: (1) '' 19: (1) '' 19: (1) ' brw-rw---- 1 root disk 254, 1 Out 30 22:18 dm-1[\n]' 19: (1) '' 20: (1) '' 20: (1) ' brw-rw---- 1 root disk 254, 2 Out 30 22:18 dm-2[\n]' 20: (1) '' 21: (1) '' 21: (1) ' brw-rw---- 1 root disk 254, 3 Out 30 22:18 dm-3[\n]' 21: (1) '' 22: (1) '' 22: (1) ' drwxr-xr-x 2 root root 80 Out 30 22:18 dri[\n]' 22: (1) '' 23: (1) '' 23: (1) ' crw-rw----+ 1 root audio 14, 3 Out 30 22:18 dsp[\n]' 23: (1) '' 24: (1) '' 24: (1) ' crw-rw---- 1 root video 29, 0 Out 30 22:18 fb0[\n]' 24: (1) '' 25: (1) '' 25: (1) ' lrwxrwxrwx 1 root root 13 Out 30 22:16 fd -> /proc/self/fd[\n]' 25: (1) '' 26: (1) '' 26: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:17 felix-laptop[\n]' 26: (1) '' 27: (1) '' 27: (1) ' crw-rw-rw- 1 root root 1, 7 Out 30 22:18 full[\n]' 27: (1) '' 28: (1) '' 28: (1) ' crw-rw-rw- 1 root root 10, 229 Out 30 22:18 fuse[\n]' 28: (1) '' 29: (1) '' 29: (1) ' crw------- 1 root root 251, 0 Nov 1 21:13 hidraw0[\n]' 29: (1) '' 30: (1) '' 30: (1) ' crw------- 1 root root 251, 1 Nov 1 00:43 hidraw1[\n]' 30: (1) '' 31: (1) '' 31: (1) ' crw------- 1 root root 10, 228 Out 30 22:18 hpet[\n]' 31: (1) '' 32: (1) '' 32: (1) ' drwxr-xr-x 2 root root 0 Out 30 22:17 hugepages[\n]' 32: (1) '' 33: (1) '' 33: (1) ' lrwxrwxrwx 1 root root 25 Out 30 22:17 initctl -> /run/systemd/init' 33: (1) '' 34: (0) '' 34: (0) '' 34: (0) '' 35: (0) '' 35: (0) '' 35: (0) '' 36: (0) '' 36: (0) '' 36: (0) '' 37: (1) '' 37: (1) ' U:%%- dev Top L5 (Dired by name) ' 37: (1) '' [-- Attachment #1.3: dump-glyph-matrix-bad-resized.txt --] [-- Type: text/plain, Size: 3687 bytes --] PT = 214, BEGV = 1. ZV = 10370 Cursor x = 468, y = 72, hpos = 52, vpos = 4 ============================================= 0: (1) '' 0: (1) ' /dev:[\n]' 0: (1) '' 1: (1) '' 1: (1) ' total used in directory 4 available 10240[\n]' 1: (1) '' 2: (1) '' 2: (1) ' drwxr-xr-x 19 root root 3500 Nov 1 21:13 .[\n]' 2: (1) '' 3: (1) '' 3: (1) ' drwxr-xr-x 22 root root 4096 Out 27 17:58 ..[\n]' 3: (1) '' 4: (1) '' 4: (1) ' crw-rw---- 1 root video 10, 175 Out 30 22:18 agpgart[\n]' 4: (1) '' 5: (1) '' 5: (1) ' crw-rw----+ 1 root audio 14, 4 Out 30 22:18 audio[\n]' 5: (1) '' 6: (1) '' 6: (1) ' crw------- 1 root root 10, 235 Out 30 22:18 autofs[\n]' 6: (1) '' 7: (1) '' 7: (1) ' drwxr-xr-x 2 root root 400 Out 30 22:18 block[\n]' 7: (1) '' 8: (1) '' 8: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:16 bsg[\n]' 8: (1) '' 9: (1) '' 9: (1) ' crw------- 1 root root 10, 234 Out 30 22:17 btrfs-control[\n]' 9: (1) '' 10: (1) '' 10: (1) ' drwxr-xr-x 3 root root 60 Out 30 22:16 bus[\n]' 10: (1) '' 11: (1) '' 11: (1) ' drwxr-xr-x 2 root root 3340 Nov 3 15:28 char[\n]' 11: (1) '' 12: (1) '' 12: (1) ' crw------- 1 root root 5, 1 Out 30 22:18 console[\n]' 12: (1) '' 13: (1) '' 13: (1) ' lrwxrwxrwx 1 root root 11 Out 30 22:16 core -> /proc/kcore[\n]' 13: (1) '' 14: (1) '' 14: (1) ' drwxr-xr-x 2 root root 60 Out 30 22:16 cpu[\n]' 14: (1) '' 15: (1) '' 15: (1) ' crw------- 1 root root 10, 62 Out 30 22:18 cpu_dma_latency[\n]' 15: (1) '' 16: (1) '' 16: (1) ' crw-rw-rw- 1 root root 10, 203 Out 30 22:18 cuse[\n]' 16: (1) '' 17: (1) '' 17: (1) ' drwxr-xr-x 5 root root 100 Out 30 22:17 disk[\n]' 17: (1) '' 18: (1) '' 18: (1) ' brw-rw---- 1 root disk 254, 0 Out 30 22:18 dm-0[\n]' 18: (1) '' 19: (1) '' 19: (1) ' brw-rw---- 1 root disk 254, 1 Out 30 22:18 dm-1[\n]' 19: (1) '' 20: (1) '' 20: (1) ' brw-rw---- 1 root disk 254, 2 Out 30 22:18 dm-2[\n]' 20: (1) '' 21: (1) '' 21: (1) ' brw-rw---- 1 root disk 254, 3 Out 30 22:18 dm-3[\n]' 21: (1) '' 22: (1) '' 22: (1) ' drwxr-xr-x 2 root root 80 Out 30 22:18 dri[\n]' 22: (1) '' 23: (1) '' 23: (1) ' crw-rw----+ 1 root audio 14, 3 Out 30 22:18 dsp[\n]' 23: (1) '' 24: (1) '' 24: (1) ' crw-rw---- 1 root video 29, 0 Out 30 22:18 fb0[\n]' 24: (1) '' 25: (1) '' 25: (1) ' lrwxrwxrwx 1 root root 13 Out 30 22:16 fd -> /proc/self/fd[\n]' 25: (1) '' 26: (1) '' 26: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:17 felix-laptop[\n]' 26: (1) '' 27: (1) '' 27: (1) ' crw-rw-rw- 1 root root 1, 7 Out 30 22:18 full[\n]' 27: (1) '' 28: (1) '' 28: (1) ' crw-rw-rw- 1 root root 10, 229 Out 30 22:18 fuse[\n]' 28: (1) '' 29: (1) '' 29: (1) ' crw------- 1 root root 251, 0 Nov 1 21:13 hidraw0[\n]' 29: (1) '' 30: (1) '' 30: (1) ' crw------- 1 root root 251, 1 Nov 1 00:43 hidraw1[\n]' 30: (1) '' 31: (1) '' 31: (1) ' crw------- 1 root root 10, 228 Out 30 22:18 hpet[\n]' 31: (1) '' 32: (1) '' 32: (1) ' drwxr-xr-x 2 root root 0 Out 30 22:17 hugepages[\n]' 32: (1) '' 33: (0) '' 33: (0) ' lrwxrwxrwx 1 root root 25 Out 30 22:17 initctl -> /run/systemd/init' 33: (0) '' 34: (0) '' 34: (0) '' 34: (0) '' 35: (0) '' 35: (0) ' U:%%- dev Top L5 (Dired by name) ' 35: (0) '' 36: (1) '' 36: (1) ' U:%%- dev Top L5 (Dired by name) ' 36: (1) '' [-- Attachment #1.4: dump-glyph-matrix-good.txt --] [-- Type: text/plain, Size: 3639 bytes --] PT = 214, BEGV = 1. ZV = 10370 Cursor x = 468, y = 72, hpos = 52, vpos = 4 ============================================= 0: (1) '' 0: (1) ' /dev:[\n]' 0: (1) '' 1: (1) '' 1: (1) ' total used in directory 4 available 10240[\n]' 1: (1) '' 2: (1) '' 2: (1) ' drwxr-xr-x 19 root root 3500 Nov 1 21:13 .[\n]' 2: (1) '' 3: (1) '' 3: (1) ' drwxr-xr-x 22 root root 4096 Out 27 17:58 ..[\n]' 3: (1) '' 4: (1) '' 4: (1) ' crw-rw---- 1 root video 10, 175 Out 30 22:18 agpgart[\n]' 4: (1) '' 5: (1) '' 5: (1) ' crw-rw----+ 1 root audio 14, 4 Out 30 22:18 audio[\n]' 5: (1) '' 6: (1) '' 6: (1) ' crw------- 1 root root 10, 235 Out 30 22:18 autofs[\n]' 6: (1) '' 7: (1) '' 7: (1) ' drwxr-xr-x 2 root root 400 Out 30 22:18 block[\n]' 7: (1) '' 8: (1) '' 8: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:16 bsg[\n]' 8: (1) '' 9: (1) '' 9: (1) ' crw------- 1 root root 10, 234 Out 30 22:17 btrfs-control[\n]' 9: (1) '' 10: (1) '' 10: (1) ' drwxr-xr-x 3 root root 60 Out 30 22:16 bus[\n]' 10: (1) '' 11: (1) '' 11: (1) ' drwxr-xr-x 2 root root 3340 Nov 3 15:28 char[\n]' 11: (1) '' 12: (1) '' 12: (1) ' crw------- 1 root root 5, 1 Out 30 22:18 console[\n]' 12: (1) '' 13: (1) '' 13: (1) ' lrwxrwxrwx 1 root root 11 Out 30 22:16 core -> /proc/kcore[\n]' 13: (1) '' 14: (1) '' 14: (1) ' drwxr-xr-x 2 root root 60 Out 30 22:16 cpu[\n]' 14: (1) '' 15: (1) '' 15: (1) ' crw------- 1 root root 10, 62 Out 30 22:18 cpu_dma_latency[\n]' 15: (1) '' 16: (1) '' 16: (1) ' crw-rw-rw- 1 root root 10, 203 Out 30 22:18 cuse[\n]' 16: (1) '' 17: (1) '' 17: (1) ' drwxr-xr-x 5 root root 100 Out 30 22:17 disk[\n]' 17: (1) '' 18: (1) '' 18: (1) ' brw-rw---- 1 root disk 254, 0 Out 30 22:18 dm-0[\n]' 18: (1) '' 19: (1) '' 19: (1) ' brw-rw---- 1 root disk 254, 1 Out 30 22:18 dm-1[\n]' 19: (1) '' 20: (1) '' 20: (1) ' brw-rw---- 1 root disk 254, 2 Out 30 22:18 dm-2[\n]' 20: (1) '' 21: (1) '' 21: (1) ' brw-rw---- 1 root disk 254, 3 Out 30 22:18 dm-3[\n]' 21: (1) '' 22: (1) '' 22: (1) ' drwxr-xr-x 2 root root 80 Out 30 22:18 dri[\n]' 22: (1) '' 23: (1) '' 23: (1) ' crw-rw----+ 1 root audio 14, 3 Out 30 22:18 dsp[\n]' 23: (1) '' 24: (1) '' 24: (1) ' crw-rw---- 1 root video 29, 0 Out 30 22:18 fb0[\n]' 24: (1) '' 25: (1) '' 25: (1) ' lrwxrwxrwx 1 root root 13 Out 30 22:16 fd -> /proc/self/fd[\n]' 25: (1) '' 26: (1) '' 26: (1) ' drwxr-xr-x 2 root root 100 Out 30 22:17 felix-laptop[\n]' 26: (1) '' 27: (1) '' 27: (1) ' crw-rw-rw- 1 root root 1, 7 Out 30 22:18 full[\n]' 27: (1) '' 28: (1) '' 28: (1) ' crw-rw-rw- 1 root root 10, 229 Out 30 22:18 fuse[\n]' 28: (1) '' 29: (1) '' 29: (1) ' crw------- 1 root root 251, 0 Nov 1 21:13 hidraw0[\n]' 29: (1) '' 30: (1) '' 30: (1) ' crw------- 1 root root 251, 1 Nov 1 00:43 hidraw1[\n]' 30: (1) '' 31: (1) '' 31: (1) ' crw------- 1 root root 10, 228 Out 30 22:18 hpet[\n]' 31: (1) '' 32: (1) '' 32: (1) ' drwxr-xr-x 2 root root 0 Out 30 22:17 hugepages[\n]' 32: (1) '' 33: (1) '' 33: (1) ' lrwxrwxrwx 1 root root 25 Out 30 22:17 initctl -> /run/systemd/init' 33: (1) '' 34: (0) '' 34: (0) '' 34: (0) '' 35: (0) '' 35: (0) '' 35: (0) '' 36: (0) '' 36: (0) '' 36: (0) '' 37: (1) '' 37: (1) ' U:%%- dev Top L5 (Dired by name) ' 37: (1) '' [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:06 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 20:24 ` Eli Zaretskii 2014-11-03 20:29 ` Eli Zaretskii 2014-11-03 20:44 ` Bruno Félix Rezende Ribeiro 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 20:24 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Mon, 03 Nov 2014 18:06:28 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: rudalics@gmx.at, 18912@debbugs.gnu.org > > The outputs of the 'dump-glyph-matrix' command for both the good and bad > configurations are in the attached files 'dump-glyph-matrix-good.txt' > and 'dump-glyph-matrix-bad.txt', respectively; they are identical, though. So you are saying that this last line: 33: (1) ' lrwxrwxrwx 1 root root 25 Out 30 22:17 initctl -> /run/systemd/init' which appears in both the "good" and the "bad" dumps, is nevertheless displayed (overwrites the mode line) only in the "bad" configuration, and is not visible at all in the "good" one, is that right? > For the sake of precision I used the method suggested by Martin: > evaluating the expression > > (while (y-or-n-p "decrease?") > (set-frame-height nil (1- (frame-text-height)) nil t)) > > in the requested condition. In order to not be fooled by a spurious > mode-line redrawing, I killed the buffer and invoked 'C-x d /dev RET' > again and the glitch was gone, after one iteration (minus 1 pixel). So hereby you have your workaround already, for free: just make the frame one pixel lower. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:24 ` Eli Zaretskii @ 2014-11-03 20:29 ` Eli Zaretskii 2014-11-03 20:46 ` Eli Zaretskii 2014-11-03 20:55 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:44 ` Bruno Félix Rezende Ribeiro 1 sibling, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 20:29 UTC (permalink / raw) To: oitofelix; +Cc: 18912 > Date: Mon, 03 Nov 2014 22:24:57 +0200 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 18912@debbugs.gnu.org > > > Date: Mon, 03 Nov 2014 18:06:28 -0200 > > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > > CC: rudalics@gmx.at, 18912@debbugs.gnu.org > > > > For the sake of precision I used the method suggested by Martin: > > evaluating the expression > > > > (while (y-or-n-p "decrease?") > > (set-frame-height nil (1- (frame-text-height)) nil t)) > > > > in the requested condition. In order to not be fooled by a spurious > > mode-line redrawing, I killed the buffer and invoked 'C-x d /dev RET' > > again and the glitch was gone, after one iteration (minus 1 pixel). What happens in the "good" configuration if you decrease or increase the frame height there by 1 pixel? ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:29 ` Eli Zaretskii @ 2014-11-03 20:46 ` Eli Zaretskii 2014-11-03 21:01 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:55 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 20:46 UTC (permalink / raw) To: oitofelix; +Cc: 18912 > Date: Mon, 03 Nov 2014 22:29:57 +0200 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 18912@debbugs.gnu.org > > What happens in the "good" configuration if you decrease or increase > the frame height there by 1 pixel? Also, what does the following display in both "good" and "bad" configurations in the first frame displayed by "emacs -Q" that has the original, unaltered by 1-pixel changes, size? M-: (pos-visible-in-window-p t nil t) RET Please invoke this after "C-x d" in each case. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:46 ` Eli Zaretskii @ 2014-11-03 21:01 ` Bruno Félix Rezende Ribeiro 2014-11-03 21:19 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 21:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 653 bytes --] Eli Zaretskii wrote: > Also, what does the following display in both "good" and "bad" > configurations in the first frame displayed by "emacs -Q" that has the > original, unaltered by 1-pixel changes, size? > > M-: (pos-visible-in-window-p t nil t) RET > > Please invoke this after "C-x d" in each case. In the *good* configuration: (0 594 0 17 1 33) In the *bad* configuration: (0 594 0 17 1 33) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 21:01 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 21:19 ` Eli Zaretskii 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 21:19 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Mon, 03 Nov 2014 19:01:43 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > > M-: (pos-visible-in-window-p t nil t) RET > > > > Please invoke this after "C-x d" in each case. > > In the *good* configuration: (0 594 0 17 1 33) > In the *bad* configuration: (0 594 0 17 1 33) Again identical. Looks like indeed it's some problem with your graphics card, because Emacs gets the same information in both cases: in both cases, only 1 pixel of the last line is visible. I'll try to think about additional tests, but meanwhile I suggest that you try lowering the level of the acceleration of your card, and see if that helps. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 21:19 ` Eli Zaretskii @ 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro ` (2 more replies) 0 siblings, 3 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 6:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1821 bytes --] Eli Zaretskii wrote: > Again identical. Looks like indeed it's some problem with your > graphics card, because Emacs gets the same information in both cases: > in both cases, only 1 pixel of the last line is visible. > > I'll try to think about additional tests, but meanwhile I suggest that > you try lowering the level of the acceleration of your card, and see > if that helps. Totally disabling acceleration by using the driver's option "NoAccel", seems to fix the problem. The conclusion we reach is that it's not an Emacs bug, despite the fact that this weirdness only manifests in Emacs. I never have had any problem with my graphics card in the 5 years of usage of this machine, working with any kind of application you can imagine, being the "Emacs bug" the only exception. So we came to the point where we actually find that it's not possible to solve the bug, because it's beyond the realm of Emacs. That doesn't mean, however, that Emacs can't help to work around it! As Emacs is the only piece of software, that I know of, that triggers the bug, it's in principle equivalent to fix the problem in its root, or to make Emacs to work around it. Solving the actual bug seems at first glance much harder, as no one knows what's actually causing this mysterious bug, that only manifests in Emacs. On the other hand, we have a clear understanding of what feature Emacs has to provide to *virtually* fix the bug. So I kindly ask you: please, provide a way to make Emacs optionally redraw the mode-line after any scroll operation. ;-) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 16:00 ` Eli Zaretskii 2014-11-04 15:54 ` Stefan Monnier 2014-11-04 15:56 ` Eli Zaretskii 2 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 8:25 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 545 bytes --] Bruno Félix Rezende Ribeiro wrote: > The conclusion we reach is that it's not an Emacs bug, despite the fact > that this weirdness only manifests in Emacs. Just occurred to me that it might be possible for that to be a bug within Emacs which is only triggered when acceleration is enabled. WDYT? -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 16:00 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics ` (2 more replies) 0 siblings, 3 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-04 16:00 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Tue, 04 Nov 2014 06:25:09 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > Bruno Félix Rezende Ribeiro wrote: > > The conclusion we reach is that it's not an Emacs bug, despite the fact > > that this weirdness only manifests in Emacs. > > Just occurred to me that it might be possible for that to be a bug > within Emacs which is only triggered when acceleration is enabled. WDYT? You'd need to explain how Emacs succeeds in that, when it uses Xlib and higher-level APIs, which AFAIK are unaware of any accelerations. Emacs itself is certainly unaware of that, and does the same things regardless. Moreover, the fact that running xrefresh, which is not an Emacs command, fixes the display is yet another argument against this hypothesis. xrefresh doesn't communicate with Emacs, so the only way it could fix the display is if the data supplied by Emacs was correct. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 16:00 ` Eli Zaretskii @ 2014-11-04 19:24 ` martin rudalics 2014-11-04 19:52 ` Eli Zaretskii 2014-11-04 20:13 ` Stefan Monnier 2014-11-04 21:09 ` Bruno Félix Rezende Ribeiro 2 siblings, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-04 19:24 UTC (permalink / raw) To: Eli Zaretskii, Bruno Félix Rezende Ribeiro; +Cc: 18912 > Moreover, the fact that running xrefresh, which is not an Emacs > command, fixes the display is yet another argument against this > hypothesis. xrefresh doesn't communicate with Emacs, so the only way > it could fix the display is if the data supplied by Emacs was correct. But the data supplied by us is still the same? martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 19:24 ` martin rudalics @ 2014-11-04 19:52 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-04 19:52 UTC (permalink / raw) To: martin rudalics; +Cc: oitofelix, 18912 > Date: Tue, 04 Nov 2014 20:24:27 +0100 > From: martin rudalics <rudalics@gmx.at> > CC: 18912@debbugs.gnu.org > > > Moreover, the fact that running xrefresh, which is not an Emacs > > command, fixes the display is yet another argument against this > > hypothesis. xrefresh doesn't communicate with Emacs, so the only way > > it could fix the display is if the data supplied by Emacs was correct. > > But the data supplied by us is still the same? Of course. There's no communications between Emacs and X when xrefresh runs, AFAIK. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 16:00 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics @ 2014-11-04 20:13 ` Stefan Monnier 2014-11-05 3:39 ` Eli Zaretskii 2014-11-05 9:17 ` Andreas Schwab 2014-11-04 21:09 ` Bruno Félix Rezende Ribeiro 2 siblings, 2 replies; 63+ messages in thread From: Stefan Monnier @ 2014-11-04 20:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Bruno Félix Rezende Ribeiro, 18912 > Moreover, the fact that running xrefresh, which is not an Emacs > command, fixes the display is yet another argument against this > hypothesis. xrefresh doesn't communicate with Emacs, so the only way > it could fix the display is if the data supplied by Emacs was correct. Actually xrefresh does (indirectly) communicate with Emacs, IIRC, since it causes the X server to generate "expose" events to redraw everything. Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 20:13 ` Stefan Monnier @ 2014-11-05 3:39 ` Eli Zaretskii 2014-11-05 9:17 ` Andreas Schwab 1 sibling, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-05 3:39 UTC (permalink / raw) To: Stefan Monnier; +Cc: oitofelix, 18912 > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org>, > 18912@debbugs.gnu.org > Date: Tue, 04 Nov 2014 15:13:51 -0500 > > > Moreover, the fact that running xrefresh, which is not an Emacs > > command, fixes the display is yet another argument against this > > hypothesis. xrefresh doesn't communicate with Emacs, so the only way > > it could fix the display is if the data supplied by Emacs was correct. > > Actually xrefresh does (indirectly) communicate with Emacs, IIRC, since > it causes the X server to generate "expose" events to redraw everything. Then it should have the same effect as redraw-display, but evidently doesn't. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 20:13 ` Stefan Monnier 2014-11-05 3:39 ` Eli Zaretskii @ 2014-11-05 9:17 ` Andreas Schwab 1 sibling, 0 replies; 63+ messages in thread From: Andreas Schwab @ 2014-11-05 9:17 UTC (permalink / raw) To: Stefan Monnier; +Cc: Bruno Félix Rezende Ribeiro, 18912 Stefan Monnier <monnier@iro.umontreal.ca> writes: >> Moreover, the fact that running xrefresh, which is not an Emacs >> command, fixes the display is yet another argument against this >> hypothesis. xrefresh doesn't communicate with Emacs, so the only way >> it could fix the display is if the data supplied by Emacs was correct. > > Actually xrefresh does (indirectly) communicate with Emacs, IIRC, since > it causes the X server to generate "expose" events to redraw everything. That doesn't mean that the X server (or the compositor) has to ask the application to redraw the window contents, it may be reusing an off-screen copy of it. Andreas. -- Andreas Schwab, SUSE Labs, schwab@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different." ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 16:00 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics 2014-11-04 20:13 ` Stefan Monnier @ 2014-11-04 21:09 ` Bruno Félix Rezende Ribeiro 2014-11-05 16:02 ` Eli Zaretskii 2 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 21:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1290 bytes --] Eli Zaretskii wrote: > You'd need to explain how Emacs succeeds in that, when it uses Xlib > and higher-level APIs, which AFAIK are unaware of any accelerations. > Emacs itself is certainly unaware of that, and does the same things > regardless. The Emacs algorithms for redrawing the frame's content could be based on assumptions about the workings of graphical displays that fail to be true in some corner cases. > Moreover, the fact that running xrefresh, which is not an Emacs > command, fixes the display is yet another argument against this > hypothesis. xrefresh doesn't communicate with Emacs, so the only way > it could fix the display is if the data supplied by Emacs was correct. Of course 'xrefresh' command doesn't communicate directly with Emacs. It works by mapping a window, with no background, on top of the Emacs' frames, and then unmapping it, causing the X server to send a refresh event to Emacs, that handles it and repaints its frames. So Emacs *do know* how to get its frames right, when it wants to. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 21:09 ` Bruno Félix Rezende Ribeiro @ 2014-11-05 16:02 ` Eli Zaretskii 2014-11-05 21:38 ` Bruno Félix Rezende Ribeiro 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-05 16:02 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Tue, 04 Nov 2014 19:09:07 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > Eli Zaretskii wrote: > > You'd need to explain how Emacs succeeds in that, when it uses Xlib > > and higher-level APIs, which AFAIK are unaware of any accelerations. > > Emacs itself is certainly unaware of that, and does the same things > > regardless. > > The Emacs algorithms for redrawing the frame's content could be based on > assumptions about the workings of graphical displays that fail to be > true in some corner cases. AFAIK, the only assumptions made by Emacs are that each screen line of the display is independently addressable, which means the order of drawing those lines doesn't matter; and that clipping of partially visible text works. > [xrefresh] works by mapping a window, with no background, on top of > the Emacs' frames, and then unmapping it, causing the X server to > send a refresh event to Emacs, that handles it and repaints its > frames. If we want to make sure Emacs indeed redraws its frame in your case (rather than X reusing its own copy of the screen, as Andreas points out), please put a breakpoint in expose_frame, and see if it breaks when you invoke xrefresh. > So Emacs *do know* how to get its frames right, when it wants to. Does it? We were talking all along about the simplest situation, when the Emacs frame has only one window and thus a single mode line, and the clipped text line is the last line of that window. But this is by no means so in general. Here, try this: emacs -Q C-x d /dev RET C-x 2 C-x o C-v At this point, you should see the lower of the 2 windows selected, with its contents scrolled, such that each of the 2 windows showing 2 different places in /dev's directory listing. Now invoke xrefresh to clean up the mode lines and start with a "clean slate". Finally, type inside Emacs: M-: (set-window-vscroll nil 5 t) RET How many mode lines did that corrupt? If both mode lines become corrupted, does xrefresh succeed in fixing that? Bonus points for repeating the above after setting mode-line-format to nil. I expect you to see that the 2 windows corrupt each other in that case. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-05 16:02 ` Eli Zaretskii @ 2014-11-05 21:38 ` Bruno Félix Rezende Ribeiro 2014-11-06 3:45 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-05 21:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 2312 bytes --] Eli Zaretskii wrote:>> Date: Tue, 04 Nov 2014 19:09:07 -0200 > If we want to make sure Emacs indeed redraws its frame in your case > (rather than X reusing its own copy of the screen, as Andreas points > out), please put a breakpoint in expose_frame, and see if it breaks > when you invoke xrefresh. Yes, it does. > Does it? We were talking all along about the simplest situation, > when the Emacs frame has only one window and thus a single mode line, > and the clipped text line is the last line of that window. But this > is by no means so in general. Here, try this: > > emacs -Q C-x d /dev RET C-x 2 C-x o C-v > > At this point, you should see the lower of the 2 windows selected, > with its contents scrolled, such that each of the 2 windows showing > 2 different places in /dev's directory listing. > > Now invoke xrefresh to clean up the mode lines and start with a > "clean slate". I don't need to. The 'C-x o' command repaints the corrupted mode-line and the one of the lower window doesn't get corrupt with scrolling, even with other frame sizes --- including full-screen. Scrolling the upper window will corrupt its mode-line again, though. > Finally, type inside Emacs: > > M-: (set-window-vscroll nil 5 t) RET > > How many mode lines did that corrupt? Immediately after the command, completely the lower one, and only slightly the upper one. > If both mode lines become corrupted, does xrefresh succeed in fixing > that? It *does* succeed in fixing the lower mode-line (the current one). The upper one continues slightly corrupted until it becomes the current one (eg. by 'C-x o'), in which case it becomes fine until next scrolling. > Bonus points for repeating the above after setting mode-line-format > to nil. I expect you to see that the 2 windows corrupt each other > in that case. Indeed. The upper one is corrupting the first line of the lower one. However, scrolling the lower one redraws that line and it doesn't get corrupted again until scrolling the upper window. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-05 21:38 ` Bruno Félix Rezende Ribeiro @ 2014-11-06 3:45 ` Eli Zaretskii 2014-11-06 15:28 ` Stefan Monnier 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-06 3:45 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912-done > Date: Wed, 05 Nov 2014 19:38:52 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > > Finally, type inside Emacs: > > > > M-: (set-window-vscroll nil 5 t) RET > > > > How many mode lines did that corrupt? > > Immediately after the command, completely the lower one, and only > slightly the upper one. The "slightly" part depends on the value of vscroll, which was 5 in this experiment. You can play with the 2nd argument of set-window-vscroll to see the effect. > > If both mode lines become corrupted, does xrefresh succeed in fixing > > that? > > It *does* succeed in fixing the lower mode-line (the current one). > The upper one continues slightly corrupted until it becomes the > current one (eg. by 'C-x o'), in which case it becomes fine until next > scrolling. Which means, as I hope you understand, that to do what you want, Emacs needs to have a very clever global strategy for refreshing the mode lines, which considers all the windows that were updated, instead of treating each window separately, which is what it does now. > > Bonus points for repeating the above after setting mode-line-format > > to nil. I expect you to see that the 2 windows corrupt each other > > in that case. > > Indeed. The upper one is corrupting the first line of the lower one. > However, scrolling the lower one redraws that line and it doesn't get > corrupted again until scrolling the upper window. In this case, there are no mode lines to refresh, so this directly affects the order in which redisplay redraws lines in each window. I think we have spent enough time on this, and we understand well enough that this problem cannot be possibly solved by Emacs in any reasonably simple way. So I'm closing this bug, as this is not an Emacs problem. My suggestion to you is to upgrade your video firmware and device driver, or disable acceleration. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-06 3:45 ` Eli Zaretskii @ 2014-11-06 15:28 ` Stefan Monnier 0 siblings, 0 replies; 63+ messages in thread From: Stefan Monnier @ 2014-11-06 15:28 UTC (permalink / raw) To: 18912; +Cc: oitofelix > Emacs problem. My suggestion to you is to upgrade your video firmware > and device driver, or disable acceleration. Don't forget the "report the bug" part (unless it's already fixed in the latest version, of course). Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 15:54 ` Stefan Monnier 2014-11-04 21:28 ` Bruno Félix Rezende Ribeiro 2014-11-04 15:56 ` Eli Zaretskii 2 siblings, 1 reply; 63+ messages in thread From: Stefan Monnier @ 2014-11-04 15:54 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Totally disabling acceleration by using the driver's option "NoAccel", > seems to fix the problem. [ Told ya! ;-) ] > The conclusion we reach is that it's not an Emacs bug, despite the fact > that this weirdness only manifests in Emacs. I never have had any > problem with my graphics card in the 5 years of usage of this machine, > working with any kind of application you can imagine, being the "Emacs > bug" the only exception. Of course, your graphics driver has probably changed over the course of those 5 years, so maybe the driver bug simply wasn't present earlier. Could you please open a bug-report to the maintainers of your graphics driver and try to make sure it's fixed there? > Just occurred to me that it might be possible for that to be a bug > within Emacs which is only triggered when acceleration is enabled. WDYT? Of course it's possible. But it seems unlikely, since AFAIK the acceleration code only affects what/how the pixels are written but not how the X server talks to the application. Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 15:54 ` Stefan Monnier @ 2014-11-04 21:28 ` Bruno Félix Rezende Ribeiro 2014-11-04 23:11 ` Stefan Monnier 0 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 21:28 UTC (permalink / raw) To: Stefan Monnier; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1274 bytes --] Stefan Monnier wrote: > [ Told ya! ;-) ] Yeah, but I don't remember getting this far investigating the problem last time. You do have impressive recollection capabilities, though. > Of course, your graphics driver has probably changed over the course of > those 5 years, so maybe the driver bug simply wasn't present earlier. This bug torments me since the beginning of my usage of dual-headed setups. > Could you please open a bug-report to the maintainers of your graphics > driver and try to make sure it's fixed there? I could do it, for sure! However I have the feeling that in the end they will blame Emacs, as nothing similar happens to any other application, AFAIK. > Of course it's possible. > But it seems unlikely, since AFAIK the acceleration code only affects > what/how the pixels are written but not how the X server talks to > the application. Maybe that glitch is only a side effect of Emacs presuming something it shouldn't presume. This is only speculation, but think about it. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 21:28 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 23:11 ` Stefan Monnier 0 siblings, 0 replies; 63+ messages in thread From: Stefan Monnier @ 2014-11-04 23:11 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 >> Could you please open a bug-report to the maintainers of your graphics >> driver and try to make sure it's fixed there? > I could do it, for sure! However I have the feeling that in the end > they will blame Emacs, as nothing similar happens to any other > application, AFAIK. I think the fact that the bug disappears when you set NoAccel is a strong sign that the problem might be on their side. So until you've reported the bug there and they throw the ball back at us, there's not much motivation for us to work on it. > Maybe that glitch is only a side effect of Emacs presuming something it > shouldn't presume. This is only speculation, but think about it. As I said, it's possible. But unlikely, at this point. Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 15:54 ` Stefan Monnier @ 2014-11-04 15:56 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics 2014-11-04 20:14 ` Bruno Félix Rezende Ribeiro 2 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-04 15:56 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Tue, 04 Nov 2014 04:05:17 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > Eli Zaretskii wrote: > > Again identical. Looks like indeed it's some problem with your > > graphics card, because Emacs gets the same information in both cases: > > in both cases, only 1 pixel of the last line is visible. > > > > I'll try to think about additional tests, but meanwhile I suggest that > > you try lowering the level of the acceleration of your card, and see > > if that helps. > > Totally disabling acceleration by using the driver's option "NoAccel", > seems to fix the problem. Good. This seems to close the issue: the root cause is indeed some problem with your card/driver. It's not an Emacs bug. > The conclusion we reach is that it's not an Emacs bug, despite the fact > that this weirdness only manifests in Emacs. Emacs uses standard Xlib calls to draw its windows and communicate to X the dimensions to be used to clip partially visible lines. Any program that does the same will bump into the same issues. > So we came to the point where we actually find that it's not possible to > solve the bug, because it's beyond the realm of Emacs. It's not possible to solve it in Emacs, but not in general. Your card probably has firmware, which could be updated, and a device driver, which could be upgraded. I'd suggest to do that, if at all possible and practical. Or even replace the card with another one. > So I kindly ask you: please, provide a way to make Emacs optionally > redraw the mode-line after any scroll operation. ;-) I'm not yet convinced that Emacs can do _anything_ to provide a workaround for this problem. See my other messages as to why. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 15:56 ` Eli Zaretskii @ 2014-11-04 19:24 ` martin rudalics 2014-11-04 20:55 ` Bruno Félix Rezende Ribeiro 2014-11-04 20:14 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-04 19:24 UTC (permalink / raw) To: Eli Zaretskii, Bruno Félix Rezende Ribeiro; +Cc: 18912 > Emacs uses standard Xlib calls to draw its windows and communicate to > X the dimensions to be used to clip partially visible lines. Any > program that does the same will bump into the same issues. Today hardly any program restricts window sizes in the way Emacs does via size hints. > It's not possible to solve it in Emacs, but not in general. There must be one "not" too many here ;-) > Your card > probably has firmware, which could be updated, and a device driver, > which could be upgraded. I'd suggest to do that, if at all possible > and practical. Or even replace the card with another one. > >> So I kindly ask you: please, provide a way to make Emacs optionally >> redraw the mode-line after any scroll operation. ;-) > > I'm not yet convinced that Emacs can do _anything_ to provide a > workaround for this problem. See my other messages as to why. We should make sure that the bug happens with every pixelwise resize operation, for example, when dragging the mode line between windows. If it doesn't happen in such cases, the problem might be due in some sort of interference of the window manager which simply doesn't like Emacs to make a frame fullscreen when at the same time fullscreen doesn't match Emacs' size hints. martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 19:24 ` martin rudalics @ 2014-11-04 20:55 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 20:55 UTC (permalink / raw) To: martin rudalics, Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1011 bytes --] martin rudalics wrote: > We should make sure that the bug happens with every pixelwise resize > operation, for example, when dragging the mode line between windows. After evaluating (setq window-resize-pixelwise t) dragging the mode-line between windows triggers the bug. I can see the mode-line getting corrupt again and again, for brief moments[0], while I move the mode-line over the window's lines, but after I release the mouse button the mode-line gets redrawn and the glitch isn't visible until I scroll the window somehow. Footnotes: [0] Only for brief moments because the mode-line is repainted after each pixel boundary is crossed, in effect, fixing the mode-line. This is one evidence that Emacs *can do* something about this bug. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 15:56 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics @ 2014-11-04 20:14 ` Bruno Félix Rezende Ribeiro 2014-11-05 3:51 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 20:14 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 2009 bytes --] Eli Zaretskii wrote:>> Date: Tue, 04 Nov 2014 04:05:17 -0200 > Good. This seems to close the issue: the root cause is indeed some > problem with your card/driver. It's not an Emacs bug. It's *probably* not an Emacs bug. But it's very weird to me the fact that Emacs redraws its frames correctly when asked by the 'xrefresh' command, but not when done so by its own 'redraw-display' command. > Emacs uses standard Xlib calls to draw its windows and communicate > to X the dimensions to be used to clip partially visible lines. Any > program that does the same will bump into the same issues. Right. I haven't noticed glitches in other applications, though. > It's not possible to solve it in Emacs, but not in general. Actually I think it's possible to almost solve it in Emacs. I just need a way to tell Emacs to force the redraw of the mode-line after any scrolling is done, and ensure that the mode-line gets redrawn after the buffer's content, not before it. > Your card probably has firmware, which could be updated, and a device > driver, which could be upgraded. I'd suggest to do that, if at all > possible and practical. I would do that, granted the firmware and drivers are free software. > Or even replace the card with another one. I can't replace the graphics card, it's a laptop. Furthermore, I don't need to, the card is very good for my practical needs, except for that mode-line thing in Emacs. > I'm not yet convinced that Emacs can do _anything_ to provide a > workaround for this problem. See my other messages as to why. Why do you think my proposed workaround wouldn't work? My answers to your other messages, and your commentaries, seem to suggest Emacs can help to work around this. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 20:14 ` Bruno Félix Rezende Ribeiro @ 2014-11-05 3:51 ` Eli Zaretskii 2014-11-05 6:28 ` Bruno Félix Rezende Ribeiro 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-05 3:51 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Tue, 04 Nov 2014 18:14:47 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > > I'm not yet convinced that Emacs can do _anything_ to provide a > > workaround for this problem. See my other messages as to why. > > Why do you think my proposed workaround wouldn't work? My answers to > your other messages, and your commentaries, seem to suggest Emacs can > help to work around this. Then try this: (add-hook 'pre-command-hook 'force-mode-line-update) (I'm not holding my breath.) ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-05 3:51 ` Eli Zaretskii @ 2014-11-05 6:28 ` Bruno Félix Rezende Ribeiro 2014-11-05 15:58 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-05 6:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1004 bytes --] Eli Zaretskii wrote: > Then try this: > > (add-hook 'pre-command-hook 'force-mode-line-update) It doesn't work. :-( In fact, even (add-hook 'pre-command-hook (lambda () (call-process "xrefresh"))) doesn't work completely. The difference between the two, however, is the fact that while 'force-mode-line-update' has no effect at all, so as one scrolls trough a buffer the mode-line becomes increasingly corrupt, accumulating over it the trail of all the lines which were once "below" it --- as if the mode-line's background was never cleared, the 'xrefresh' command makes Emacs repaint the mode-line's background so at each scrolling the mode-line is "cleanly" corrupted by the current buffer's line "below" it, and only by that one. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-05 6:28 ` Bruno Félix Rezende Ribeiro @ 2014-11-05 15:58 ` Eli Zaretskii 2014-11-05 19:46 ` Bruno Félix Rezende Ribeiro 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-05 15:58 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Wed, 05 Nov 2014 04:28:53 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > Eli Zaretskii wrote: > > Then try this: > > > > (add-hook 'pre-command-hook 'force-mode-line-update) > > It doesn't work. :-( Told you so. > In fact, even > > (add-hook 'pre-command-hook (lambda () (call-process "xrefresh"))) > > doesn't work completely. I hope you are beginning to understand how non-trivial it is to implement your workaround, even if we wanted to. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-05 15:58 ` Eli Zaretskii @ 2014-11-05 19:46 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-05 19:46 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 518 bytes --] Eli Zaretskii wrote: > I hope you are beginning to understand how non-trivial it is to > implement your workaround, even if we wanted to. Damn! I was hoping you were beginning to understand how trivial it is to implement my workaround, even if you didn't want to. ;-) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:29 ` Eli Zaretskii 2014-11-03 20:46 ` Eli Zaretskii @ 2014-11-03 20:55 ` Bruno Félix Rezende Ribeiro 1 sibling, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 20:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 411 bytes --] Eli Zaretskii wrote: > What happens in the "good" configuration if you decrease or increase > the frame height there by 1 pixel? It works as expected in both cases. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 20:24 ` Eli Zaretskii 2014-11-03 20:29 ` Eli Zaretskii @ 2014-11-03 20:44 ` Bruno Félix Rezende Ribeiro 1 sibling, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 20:44 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 897 bytes --] Eli Zaretskii wrote: > So you are saying that this last line: > > 33: (1) ' lrwxrwxrwx 1 root root 25 Out 30 22:17 initctl -> /run/systemd/init' > > which appears in both the "good" and the "bad" dumps, is nevertheless > displayed (overwrites the mode line) only in the "bad" configuration, > and is not visible at all in the "good" one, is that right? Yeah, that's right. > So hereby you have your workaround already, for free: just make the > frame one pixel lower. That's not quite *my* workaround. Furthermore, I don't need one because it's hard to believe that we won't find the root cause of this bug, right? ;-) -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 3:34 ` Eli Zaretskii 2014-11-03 6:03 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 9:08 ` Andreas Schwab 2014-11-03 16:23 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Andreas Schwab @ 2014-11-03 9:08 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Bruno Félix Rezende Ribeiro, 18912 Eli Zaretskii <eliz@gnu.org> writes: > Emacs never writes buffer contents where the mode line should be, so Unless it needs to write a partial line just above the mode line. > this problem could only happen if Emacs for some reason becomes > confused about the window dimensions. Or the clipping rectangle is wrong for any reason. Andreas. -- Andreas Schwab, SUSE Labs, schwab@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different." ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 9:08 ` Andreas Schwab @ 2014-11-03 16:23 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 16:23 UTC (permalink / raw) To: Andreas Schwab; +Cc: oitofelix, 18912 > From: Andreas Schwab <schwab@suse.de> > Cc: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org>, > 18912@debbugs.gnu.org > Date: Mon, 03 Nov 2014 10:08:02 +0100 > > Eli Zaretskii <eliz@gnu.org> writes: > > > Emacs never writes buffer contents where the mode line should be, so > > Unless it needs to write a partial line just above the mode line. > > > this problem could only happen if Emacs for some reason becomes > > confused about the window dimensions. > > Or the clipping rectangle is wrong for any reason. It could be that, yes. Although I generally need to enlarge the frame by at least 3 pixels before Emacs enables another glyph row for such clipped display. Anyway, I hope dump-glyph-matrix will show if this is the case. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-01 13:03 ` Eli Zaretskii 2014-11-02 21:49 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 9:41 ` martin rudalics 2014-11-03 18:58 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-03 9:41 UTC (permalink / raw) To: Eli Zaretskii, Bruno Félix Rezende Ribeiro; +Cc: 18912 >> (window-height) ==> 34 >> (window-pixel-height) ==> 613 > > Thanks. > > I don't see anything strange here, the 1-pixel difference shouldn't > have caused what you see. > > Martin, any suggestions how to dig into this further? > >> Interesting enough, '(window-pixel-height)' returns different values for >> both configurations under the "same" circumstances. Furthermore, in >> both configurations '(window-height)' returns one line more than what >> was actually shown. Therefore, both expressions seem to suggest an "off >> by one" bug. > > I see no bug here: both functions return the height of the window > including the mode line, so the value sounds correct if you have 33 > lines of text in that window. Bruno: Could you please post the results of evaluating (window--dump-frame) here. The results are in a buffer called *window-frame-dump*. Please do it for the good and the corrupted frame. Thanks, martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 9:41 ` martin rudalics @ 2014-11-03 18:58 ` Bruno Félix Rezende Ribeiro 2014-11-03 19:14 ` Eli Zaretskii 2014-11-04 7:55 ` martin rudalics 0 siblings, 2 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 18:58 UTC (permalink / raw) To: martin rudalics, Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 2460 bytes --] martin rudalics wrote: > Bruno: Could you please post the results of evaluating > > (window--dump-frame) > > here. The results are in a buffer called *window-frame-dump*. Please > do it for the good and the corrupted frame. Here is the result for the *corrupted* frame: frame pixel: 756 x 669 cols/lines: 84 x 37 units: 9 x 18 frame text pixel: 720 x 667 cols/lines: 80 x 37 tool: 36 scroll: 16 fringe: 18 border: 1 right: 0 bottom: 0 #<window 3 on dev> parent: nil pixel left: 0 top: 36 size: 754 x 613 new: 0 char left: 0 top: 2 size: 83 x 34 new: 0 normal: 1.0 x 1.0 new: 0 body pixel: 720 x 595 char: 80 x 33 width left fringe: 9 left margin: 0 right margin: 0 width right fringe: 9 scroll-bar: 16 divider: 0 height header-line: 0 mode-line: 18 divider: 0 #<window 4 on *Minibuf-0*> parent: nil pixel left: 0 top: 649 size: 754 x 18 new: 0 char left: 0 top: 36 size: 754 x 1 new: 0 normal: 1.0 x 1.0 new: 0 body pixel: 720 x 18 char: 80 x 1 width left fringe: 9 left margin: 0 right margin: 0 width right fringe: 9 scroll-bar: 16 divider: 0 height header-line: 0 mode-line: 0 divider: 0 Here is the result for the *good* frame: frame pixel: 756 x 669 cols/lines: 84 x 37 units: 9 x 18 frame text pixel: 720 x 667 cols/lines: 80 x 37 tool: 36 scroll: 16 fringe: 18 border: 1 right: 0 bottom: 0 #<window 3 on dev> parent: nil pixel left: 0 top: 36 size: 754 x 613 new: 0 char left: 0 top: 2 size: 83 x 34 new: 0 normal: 1.0 x 1.0 new: 0 body pixel: 720 x 595 char: 80 x 33 width left fringe: 9 left margin: 0 right margin: 0 width right fringe: 9 scroll-bar: 16 divider: 0 height header-line: 0 mode-line: 18 divider: 0 #<window 4 on *Minibuf-0*> parent: nil pixel left: 0 top: 649 size: 754 x 18 new: 0 char left: 0 top: 36 size: 754 x 1 new: 0 normal: 1.0 x 1.0 new: 0 body pixel: 720 x 18 char: 80 x 1 width left fringe: 9 left margin: 0 right margin: 0 width right fringe: 9 scroll-bar: 16 divider: 0 height header-line: 0 mode-line: 0 divider: 0 -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 18:58 ` Bruno Félix Rezende Ribeiro @ 2014-11-03 19:14 ` Eli Zaretskii 2014-11-03 20:10 ` Bruno Félix Rezende Ribeiro 2014-11-04 7:55 ` martin rudalics 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-03 19:14 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Mon, 03 Nov 2014 16:58:26 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > martin rudalics wrote: > > Bruno: Could you please post the results of evaluating > > > > (window--dump-frame) > > > > here. The results are in a buffer called *window-frame-dump*. Please > > do it for the good and the corrupted frame. > > Here is the result for the *corrupted* frame: They are identical. But your original report stated that the corrupted frame was 1 pixel taller, right? Where's that pixel now? ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 19:14 ` Eli Zaretskii @ 2014-11-03 20:10 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-03 20:10 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 501 bytes --] Eli Zaretskii wrote: > They are identical. But your original report stated that the > corrupted frame was 1 pixel taller, right? Where's that pixel now? If Emacs is informing the frame's height consistently for both procedures I'm afraid I don't know. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-03 18:58 ` Bruno Félix Rezende Ribeiro 2014-11-03 19:14 ` Eli Zaretskii @ 2014-11-04 7:55 ` martin rudalics 2014-11-04 8:20 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-04 7:55 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro, Eli Zaretskii; +Cc: 18912 > Here is the result for the *corrupted* frame: > > frame pixel: 756 x 669 cols/lines: 84 x 37 units: 9 x 18 > frame text pixel: 720 x 667 cols/lines: 80 x 37 > tool: 36 scroll: 16 fringe: 18 border: 1 right: 0 bottom: 0 > > #<window 3 on dev> parent: nil > pixel left: 0 top: 36 size: 754 x 613 new: 0 ^^^ This is consistent with what you reported earlier, namely Bad configuration (both VGA1 and LVDS1 enabled): (window-height) ==> 34 (window-pixel-height) ==> 613 > char left: 0 top: 2 size: 83 x 34 new: 0 > normal: 1.0 x 1.0 new: 0 > body pixel: 720 x 595 char: 80 x 33 > width left fringe: 9 left margin: 0 right margin: 0 > width right fringe: 9 scroll-bar: 16 divider: 0 > height header-line: 0 mode-line: 18 divider: 0 > > #<window 4 on *Minibuf-0*> parent: nil > pixel left: 0 top: 649 size: 754 x 18 new: 0 > char left: 0 top: 36 size: 754 x 1 new: 0 > normal: 1.0 x 1.0 new: 0 > body pixel: 720 x 18 char: 80 x 1 > width left fringe: 9 left margin: 0 right margin: 0 > width right fringe: 9 scroll-bar: 16 divider: 0 > height header-line: 0 mode-line: 0 divider: 0 > > > Here is the result for the *good* frame: > > frame pixel: 756 x 669 cols/lines: 84 x 37 units: 9 x 18 > frame text pixel: 720 x 667 cols/lines: 80 x 37 > tool: 36 scroll: 16 fringe: 18 border: 1 right: 0 bottom: 0 > > #<window 3 on dev> parent: nil > pixel left: 0 top: 36 size: 754 x 613 new: 0 ^^^ This is not consistent with what you reported earlier, namely Good configuration (only VGA1 enabled): (window-height) => 34 (window-pixel-height) => 612 > char left: 0 top: 2 size: 83 x 34 new: 0 > normal: 1.0 x 1.0 new: 0 > body pixel: 720 x 595 char: 80 x 33 > width left fringe: 9 left margin: 0 right margin: 0 > width right fringe: 9 scroll-bar: 16 divider: 0 > height header-line: 0 mode-line: 18 divider: 0 > > #<window 4 on *Minibuf-0*> parent: nil > pixel left: 0 top: 649 size: 754 x 18 new: 0 > char left: 0 top: 36 size: 754 x 1 new: 0 > normal: 1.0 x 1.0 new: 0 > body pixel: 720 x 18 char: 80 x 1 > width left fringe: 9 left margin: 0 right margin: 0 > width right fringe: 9 scroll-bar: 16 divider: 0 > height header-line: 0 mode-line: 0 divider: 0 Can you try getting the results of `window--dump-frame' for these old (good and bad) configurations, that is with the build you used in your initial report? I'd want to see different pixel heights (not 669) for these two frames but can't tell anything unless the pixel height (612) of the good window reemerges. So try first to get the different (window-pixel-height) values back and then evaluate (window--dump-frame) instead of (window-pixel-height). Thanks, martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 7:55 ` martin rudalics @ 2014-11-04 8:20 ` Bruno Félix Rezende Ribeiro 2014-11-04 9:19 ` martin rudalics 0 siblings, 1 reply; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 8:20 UTC (permalink / raw) To: martin rudalics, Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1155 bytes --] martin rudalics wrote: > Can you try getting the results of `window--dump-frame' for these old > (good and bad) configurations, that is with the build you used in your > initial report? I'd want to see different pixel heights (not 669) for > these two frames but can't tell anything unless the pixel height (612) > of the good window reemerges. > > So try first to get the different (window-pixel-height) values back and > then evaluate (window--dump-frame) instead of (window-pixel-height). Trying to get the offending value back I figured out that the window manager resizes the frame by one pixel when I move the frame from the left side to the right one. So, my original report was based on a spurious intervention of the window manager. Not moving the frame and evaluating '(window-pixel-height)' results in the expected value of 613 for the *good* frame. Sorry for the erroneous report. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 8:20 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 9:19 ` martin rudalics 2014-11-04 10:25 ` Bruno Félix Rezende Ribeiro 0 siblings, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-04 9:19 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro, Eli Zaretskii; +Cc: 18912 > Trying to get the offending value back I figured out that the window > manager resizes the frame by one pixel when I move the frame from the > left side to the right one. I don't understand what "moving the frame" means. Does "left side" mean VGA1 and "right side" LVDS1? What evidence do you have that the window manager "resizes" the frame when you move it? > So, my original report was based on a > spurious intervention of the window manager. Not moving the frame and > evaluating '(window-pixel-height)' results in the expected value of 613 > for the *good* frame. And you get the corrupted mode line when you do "not move" the frame as well? Elsewhere you asked to "please, provide a way to make Emacs optionally redraw the mode-line after any scroll operation". How does scrolling enter here? Do you have to scroll the window in order to show the corruption? Maybe you could give us a step-by-step scenario of what you do to the show the corruption, how to remove it afterwards, and how to show it again after it was temporarily removed. I don't have the slightest idea why the mode line would _not_ be redrawn after scrolling but maybe there's some optimization here. In any case with emacs -Q moving the window's point from one line to another should redraw the mode line to show the new line number. BTW, suppose you evaluate (set-frame-parameter nil 'bottom-divider-width 8) Does that impact the appearance of the bug in any way? martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 9:19 ` martin rudalics @ 2014-11-04 10:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 16:16 ` Eli Zaretskii 2014-11-04 19:23 ` martin rudalics 0 siblings, 2 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 10:25 UTC (permalink / raw) To: martin rudalics, Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 3243 bytes --] martin rudalics wrote: > I don't understand what "moving the frame" means. Does "left side" > mean VGA1 and "right side" LVDS1? No. When the frame is shown it has its left border touching the left extremity of the VGA1 output, so by "moving the frame to the right side" I meant moving the frame horizontally to the right until its right border touches the right extremity of the VGA1 output. > What evidence do you have that the window manager "resizes" the frame > when you move it? 'xwininfo' tool reports the frame had 697 pixels of height before the move, but 696 afterwards. > And you get the corrupted mode line when you do "not move" the frame > as well? Yes, I do. However, the frame 696 pixels tall doesn't corrupt the mode-line, as shown by previous experiments. A full-screen frame corrupts it, though. > Elsewhere you asked to "please, provide a way to make Emacs > optionally redraw the mode-line after any scroll operation". How > does scrolling enter here? After getting the mode-line right by refreshing the frame, only scrolling can possibly corrupt the mode-line again. > Do you have to scroll the window in order to show the corruption? If the frame was refreshed, yes. > Maybe you could give us a step-by-step scenario of what you do to the > show the corruption, how to remove it afterwards, and how to show it > again after it was temporarily removed. After creating the frame with 'emacs -Q', typing 'C-x d /dev RET' takes me to a Dired buffer with a corrupted mode-line as shown in the picture attached to the original bug report. There, typing 'M-! xrefresh RET' repaints the whole frame and the mode-line is shown normally as one would expect. Scrolling the text up with 'C-v' corrupts the mode-line again. > I don't have the slightest idea why the mode line would _not_ be > redrawn after scrolling but maybe there's some optimization here. In > any case with emacs -Q moving the window's point from one line to > another should redraw the mode line to show the new line number. If it redraws the mode-line, it does so while corrupting the mode-line again, because, by observation, updating the line number doesn't trigger the same kind of redraw that the 'xrefresh' command does. > BTW, suppose you evaluate > > (set-frame-parameter nil 'bottom-divider-width 8) > > Does that impact the appearance of the bug in any way? Yes, it does. The mode-line still gets corrupt but this time by the lower half (approximately) of the line above the one that corrupted it originally. Interesting enough, (set-frame-parameter nil 'bottom-divider-width 1) fixes the problem for the original frame. Unfortunately when in full-screen the mode-line is corrupted again; what is fixed in the VGA1 output by (set-frame-parameter nil 'bottom-divider-width 7) and in the LVDS1 output by (set-frame-parameter nil 'bottom-divider-width 12) I'd miss some useful screen area, though. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 10:25 ` Bruno Félix Rezende Ribeiro @ 2014-11-04 16:16 ` Eli Zaretskii 2014-11-04 19:56 ` Bruno Félix Rezende Ribeiro 2014-11-04 19:23 ` martin rudalics 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2014-11-04 16:16 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro; +Cc: 18912 > Date: Tue, 04 Nov 2014 08:25:38 -0200 > From: Bruno Félix Rezende Ribeiro <oitofelix@gnu.org> > CC: 18912@debbugs.gnu.org > > > Elsewhere you asked to "please, provide a way to make Emacs > > optionally redraw the mode-line after any scroll operation". How > > does scrolling enter here? > > After getting the mode-line right by refreshing the frame, only > scrolling can possibly corrupt the mode-line again. What do you mean by "scrolling", exactly? Which Emacs commands? In any case, the initial display of "C-x d" doesn't involve any scrolling, so it's not a "scrolling problem". > After creating the frame with 'emacs -Q', typing 'C-x d /dev RET' > takes me to a Dired buffer with a corrupted mode-line as shown in the > picture attached to the original bug report. There, typing 'M-! > xrefresh RET' repaints the whole frame and the mode-line is shown > normally as one would expect. Scrolling the text up with 'C-v' > corrupts the mode-line again. What about moving cursor so it exits the visible portion of the window, which also induces scrolling? And what about using the scroll bar? Or just "M-x goto-char RET"? Are you saying these don't produce a corrupted mode line? > > I don't have the slightest idea why the mode line would _not_ be > > redrawn after scrolling but maybe there's some optimization here. In > > any case with emacs -Q moving the window's point from one line to > > another should redraw the mode line to show the new line number. > > If it redraws the mode-line, it does so while corrupting the mode-line > again When you move to a different line, Emacs only redraws the line number part of the mode line. Does that at least remove the corruption in that area, or doesn't it? In general, Emacs always redraws only the parts of the screen that were changed. If you tell it to redraw, and nothing changed, it will normally not redraw anything at all. > because, by observation, updating the line number doesn't trigger > the same kind of redraw that the 'xrefresh' command does. Of course, it doesn't! Emacs doesn't use the technique used by xrefresh, because Emacs tries to redraw as little as possible, not as much as possible! xrefresh was coded specifically to force portions of the screen to be completely redrawn, which is almost the anti-thesis of the Emacs display engine. Is there _any_ Emacs action that succeeds in redrawing the mode line or its parts in a way that eliminates the corruption? I already asked above about whether moving to a different line does that in the portion that displays the line number. How about hovering the mouse pointer over mouse-sensitive portions of the mode line, like the buffer name and the major/minor mode indications? do they successfully redraw the corresponding parts of the mode line? What about "M-x redraw-display RET" -- does it fix the display of the mode line? If none of these helps, then I don't think Emacs can do anything at all to help you work around the problem. (And btw, why disabling the acceleration permanently isn't _the_ solution?) > > BTW, suppose you evaluate > > > > (set-frame-parameter nil 'bottom-divider-width 8) > > > > Does that impact the appearance of the bug in any way? > > Yes, it does. The mode-line still gets corrupt but this time by the > lower half (approximately) of the line above the one that corrupted it > originally. > > Interesting enough, > > (set-frame-parameter nil 'bottom-divider-width 1) > > fixes the problem for the original frame. Unfortunately when > in full-screen the mode-line is corrupted again; what is fixed in the > VGA1 output by > > (set-frame-parameter nil 'bottom-divider-width 7) > > and in the LVDS1 output by > > (set-frame-parameter nil 'bottom-divider-width 12) Any change in window height that causes it to be an exact integral multiple of the font height will eliminate the problem. The problem is evidently caused by incorrect clipping of partially-visible lines. That's why you see what you see. ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 16:16 ` Eli Zaretskii @ 2014-11-04 19:56 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 19:56 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 5010 bytes --] Eli Zaretskii wrote: > What do you mean by "scrolling", exactly? Which Emacs commands? I mean by scroll the change of correspondence between window lines and buffer lines. It's not absolutely associated with any particular Emacs command. There are commands that are intended to directly cause scrolling, but don't do so in particular cases (eg. 'C-v' at the end of the buffer), and there are commands that are not directly intended to cause scrolling but do so in particular cases (eg. 'C-n' at the last visible line of a window). > In any case, the initial display of "C-x d" doesn't involve any > scrolling, so it's not a "scrolling problem". You are right. That's a particular case for which the rule of thumb is: for newly created windows the mode-line should be drawn after the buffer's content is drawn. I think that would solve the problem. From there forth, after any scrolling the mode-line should be (optionally) drawn after the buffer's content is drawn. > What about moving cursor so it exits the visible portion of the > window, which also induces scrolling? It corrupts the mode-line as do 'C-l' typed multiple times. > And what about using the scroll bar? This too. > Or just "M-x goto-char RET"? Idem, as long as it causes scrolling and the new view has a buffer line "under" the mode-line. The same happens with the 'goto-line' command. > Are you saying these don't produce a corrupted mode line? Nope, actually all of them are capable of corrupting the mode-line. > When you move to a different line, Emacs only redraws the line number > part of the mode line. Does that at least remove the corruption in > that area, or doesn't it? It does in that very area. > In general, Emacs always redraws only the parts of the screen that > were changed. If you tell it to redraw, and nothing changed, it will > normally not redraw anything at all. It would be wise to provide a way to force Emacs to redraw, because there are factors beyond Emacs control and knowledge that could change the aspect of the frame. This bug is an example of that. > Of course, it doesn't! Emacs doesn't use the technique used by > xrefresh, because Emacs tries to redraw as little as possible, not as > much as possible! xrefresh was coded specifically to force portions > of the screen to be completely redrawn, which is almost the > anti-thesis of the Emacs display engine. Again, sometimes it's necessary to redraw more than Emacs think it should. I'm not advocating to make Emacs redraw the whole frame, rather just the mode-line after very specific events. > Is there _any_ Emacs action that succeeds in redrawing the mode line > or its parts in a way that eliminates the corruption? Yes, there is. > I already asked above about whether moving to a different line does > that in the portion that displays the line number. How about > hovering the mouse pointer over mouse-sensitive portions of the mode > line, like the buffer name and the major/minor mode indications? This also eliminates the corruption. > do they successfully redraw the corresponding parts of the mode > line? Yep. > What about "M-x redraw-display RET" -- does it fix the display of the > mode line? Nope, because it draws the buffer's content after redrawing the mode-line, overriding the mode-line refresh, in effect. > If none of these helps, then I don't think Emacs can do anything at > all to help you work around the problem. They in fact help! So I think Emacs can do something to help me work around the problem, if you help Emacs to help me. ;-) > (And btw, why disabling the acceleration permanently isn't _the_ > solution?) Because the acceleration is not intended to cause that sort of problem. That's bug. Moreover, if I disable acceleration I would affect a lot more than just Emacs. On the other hand, the Emacs workaround I propose won't affect any other application or user of Emacs, and will help everyone else experiencing similar problems. From my perspective, it's an improvement to make Emacs aware that it cannot know everything, and therefore we reserve the right to force it to redraw some parts of its frames, even if it doesn't feel like it, when we, the users, judge necessary. In particular Emacs must know that when redrawing the frame's content, it should first draw the buffer's content and only then the mode-line. > Any change in window height that causes it to be an exact integral > multiple of the font height will eliminate the problem. The problem > is evidently caused by incorrect clipping of partially-visible > lines. That's why you see what you see. That makes a lot of sense. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 10:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 16:16 ` Eli Zaretskii @ 2014-11-04 19:23 ` martin rudalics 2014-11-04 21:46 ` Bruno Félix Rezende Ribeiro 1 sibling, 1 reply; 63+ messages in thread From: martin rudalics @ 2014-11-04 19:23 UTC (permalink / raw) To: Bruno Félix Rezende Ribeiro, Eli Zaretskii; +Cc: 18912 > 'xwininfo' tool reports the frame had 697 pixels of height before the > move, but 696 afterwards. A frame move should never resize the frame. Apparently the size hints are working here. Does it resize when you set `frame-resize-pixelwise' permanently to nil too? As an aside: IIRC trusting the values reported by xwininfo is just like trusting any values reported by Emacs - they are partially based on what is written into the size hints. > Yes, I do. However, the frame 696 pixels tall doesn't corrupt the > mode-line, as shown by previous experiments. A full-screen frame > corrupts it, though. And all other sizes that are not an integral multiple of the default character size, I presume. But when you split a window via C-x 2 and mouse-drag the mode line of the upper window by very small (pixel) increments do you see any corruption too? > After getting the mode-line right by refreshing the frame, only > scrolling can possibly corrupt the mode-line again. > >> Do you have to scroll the window in order to show the corruption? > > If the frame was refreshed, yes. But you get the corruption only in a fullsized frame? >> Maybe you could give us a step-by-step scenario of what you do to the >> show the corruption, how to remove it afterwards, and how to show it >> again after it was temporarily removed. > > After creating the frame with 'emacs -Q', Don't you have to make the frame fullsize here? > typing 'C-x d /dev RET' > takes me to a Dired buffer with a corrupted mode-line as shown in the > picture attached to the original bug report. There, typing 'M-! > xrefresh RET' repaints the whole frame and the mode-line is shown > normally as one would expect. Scrolling the text up with 'C-v' > corrupts the mode-line again. How does scrolling an upper window in a split frame work in this case? martin ^ permalink raw reply [flat|nested] 63+ messages in thread
* bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display 2014-11-04 19:23 ` martin rudalics @ 2014-11-04 21:46 ` Bruno Félix Rezende Ribeiro 0 siblings, 0 replies; 63+ messages in thread From: Bruno Félix Rezende Ribeiro @ 2014-11-04 21:46 UTC (permalink / raw) To: martin rudalics, Eli Zaretskii; +Cc: 18912 [-- Attachment #1: Type: text/plain, Size: 1342 bytes --] martin rudalics wrote > A frame move should never resize the frame. Apparently the size > hints are working here. Does it resize when you set > `frame-resize-pixelwise' permanently to nil too? In fact it was originally reported in that case, as Emacs was started by 'emacs -Q', and by default 'frame-resize-pixelwise' is 'nil'. > And all other sizes that are not an integral multiple of the default > character size, I presume. But when you split a window via C-x 2 > and mouse-drag the mode line of the upper window by very small > (pixel) increments do you see any corruption too? Yes, I do, as described here [0]. > But you get the corruption only in a fullsized frame? Nope, I presume I do in all frames whose height is not an integral multiple of the default character size. > Don't you have to make the frame fullsize here? No, I don't. > How does scrolling an upper window in a split frame work in this > case? It works the same: corrupted mode-line for the upper window. Footnotes: [0] http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18912#149 -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 63+ messages in thread
end of thread, other threads:[~2014-11-06 15:28 UTC | newest] Thread overview: 63+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-30 13:46 bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display Bruno Félix Rezende Ribeiro 2014-10-31 20:30 ` Stefan Monnier 2014-10-31 20:44 ` Bruno Félix Rezende Ribeiro 2014-11-01 8:42 ` Eli Zaretskii 2014-11-01 12:56 ` Bruno Félix Rezende Ribeiro 2014-11-01 8:38 ` Eli Zaretskii 2014-11-01 9:16 ` Eli Zaretskii 2014-11-01 12:54 ` Bruno Félix Rezende Ribeiro 2014-11-01 13:03 ` Eli Zaretskii 2014-11-02 21:49 ` Bruno Félix Rezende Ribeiro 2014-11-03 3:34 ` Eli Zaretskii 2014-11-03 6:03 ` Bruno Félix Rezende Ribeiro 2014-11-03 16:20 ` Eli Zaretskii 2014-11-03 17:43 ` martin rudalics 2014-11-03 17:52 ` Eli Zaretskii 2014-11-03 18:01 ` martin rudalics 2014-11-03 18:19 ` Eli Zaretskii 2014-11-03 20:06 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:24 ` Eli Zaretskii 2014-11-03 20:29 ` Eli Zaretskii 2014-11-03 20:46 ` Eli Zaretskii 2014-11-03 21:01 ` Bruno Félix Rezende Ribeiro 2014-11-03 21:19 ` Eli Zaretskii 2014-11-04 6:05 ` Bruno Félix Rezende Ribeiro 2014-11-04 8:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 16:00 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics 2014-11-04 19:52 ` Eli Zaretskii 2014-11-04 20:13 ` Stefan Monnier 2014-11-05 3:39 ` Eli Zaretskii 2014-11-05 9:17 ` Andreas Schwab 2014-11-04 21:09 ` Bruno Félix Rezende Ribeiro 2014-11-05 16:02 ` Eli Zaretskii 2014-11-05 21:38 ` Bruno Félix Rezende Ribeiro 2014-11-06 3:45 ` Eli Zaretskii 2014-11-06 15:28 ` Stefan Monnier 2014-11-04 15:54 ` Stefan Monnier 2014-11-04 21:28 ` Bruno Félix Rezende Ribeiro 2014-11-04 23:11 ` Stefan Monnier 2014-11-04 15:56 ` Eli Zaretskii 2014-11-04 19:24 ` martin rudalics 2014-11-04 20:55 ` Bruno Félix Rezende Ribeiro 2014-11-04 20:14 ` Bruno Félix Rezende Ribeiro 2014-11-05 3:51 ` Eli Zaretskii 2014-11-05 6:28 ` Bruno Félix Rezende Ribeiro 2014-11-05 15:58 ` Eli Zaretskii 2014-11-05 19:46 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:55 ` Bruno Félix Rezende Ribeiro 2014-11-03 20:44 ` Bruno Félix Rezende Ribeiro 2014-11-03 9:08 ` Andreas Schwab 2014-11-03 16:23 ` Eli Zaretskii 2014-11-03 9:41 ` martin rudalics 2014-11-03 18:58 ` Bruno Félix Rezende Ribeiro 2014-11-03 19:14 ` Eli Zaretskii 2014-11-03 20:10 ` Bruno Félix Rezende Ribeiro 2014-11-04 7:55 ` martin rudalics 2014-11-04 8:20 ` Bruno Félix Rezende Ribeiro 2014-11-04 9:19 ` martin rudalics 2014-11-04 10:25 ` Bruno Félix Rezende Ribeiro 2014-11-04 16:16 ` Eli Zaretskii 2014-11-04 19:56 ` Bruno Félix Rezende Ribeiro 2014-11-04 19:23 ` martin rudalics 2014-11-04 21:46 ` Bruno Félix Rezende Ribeiro
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).