* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning @ 2020-10-28 16:36 Vincent Lefevre 2020-10-28 16:44 ` Vincent Lefevre 2020-10-28 16:53 ` Eli Zaretskii 0 siblings, 2 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-10-28 16:36 UTC (permalink / raw) To: 44284 Under Debian/unstable, create a file with printf "%d\n" `seq 1000` > file then open it using GNU Emacs 27.1 with emacs -Q -fn misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 file Go to the end of the file with ESC > then scroll upward with the mouse wheel (button 4) several times (but slowly). When the cursor needs repositioning, this actually scrolls downward, probably because Emacs tries to center the mouse cursor instead of letting it at the bottom. No such issue with the other way round, where the cursor remains at the top. Note: I have old GNU Emacs 27.0.91 snapshot versions still installed, one compiled on 2020-05-14 without cairo, and I cannot reproduce the bug with it (the cursor remains at the bottom), and one compiled on 2020-05-15 with Cairo (--with-cairo), and the bug occurs with it. In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.23, cairo version 1.16.0) of 2020-10-24, modified by Debian built on x86-conova-01 Windowing system distributor 'The X.Org Foundation', version 11.0.12009000 System Description: Debian GNU/Linux bullseye/sid Recent messages: Loading /etc/emacs/site-start.d/50psvn.el (source)...done Loading /etc/emacs/site-start.d/50reposurgeon.el (source)...done Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...done Loading /etc/emacs/site-start.d/50w3m-el.el (source)...done Loading /etc/emacs/site-start.d/50why3.el (source)...done Loading /home/vlefevre/share/emacs/site-lisp/mutteditor.el (source)...done Loading time...done For information about GNU Emacs and the GNU system, type C-h C-a. Mark set <mouse-4> is undefined [3 times] Configured using: 'configure --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/lib --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/27.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/27.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/lib --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/27.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/27.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --with-cairo --with-x=yes --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2 -fdebug-prefix-map=/build/emacs-bB10hX/emacs-27.1+1=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro' Configured features: XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP Important settings: value of $LC_COLLATE: POSIX value of $LC_CTYPE: C.UTF-8 value of $LC_TIME: en_DK.utf8 value of $LANG: POSIX locale-coding-system: utf-8-unix Major mode: Fundamental Minor modes in effect: display-time-mode: t show-paren-mode: t tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-3.6/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-3.6/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-3.6/emacs /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-3.7/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-3.7/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-3.7/emacs /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-6.0/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-6.0/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-6.0/emacs /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-7/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-7/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-7/emacs /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-8/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-8/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-8/emacs /usr/share/emacs/site-lisp/llvm-10/llvm-mode hides /usr/share/emacs/site-lisp/llvm-9/llvm-mode /usr/share/emacs/site-lisp/llvm-10/tablegen-mode hides /usr/share/emacs/site-lisp/llvm-9/tablegen-mode /usr/share/emacs/site-lisp/llvm-10/emacs hides /usr/share/emacs/site-lisp/llvm-9/emacs /usr/share/emacs/site-lisp/flim/md4 hides /usr/share/emacs/27.1/lisp/md4 /usr/share/emacs/site-lisp/flim/hex-util hides /usr/share/emacs/27.1/lisp/hex-util /usr/share/emacs/site-lisp/flim/sasl-cram hides /usr/share/emacs/27.1/lisp/net/sasl-cram /usr/share/emacs/site-lisp/flim/hmac-md5 hides /usr/share/emacs/27.1/lisp/net/hmac-md5 /usr/share/emacs/site-lisp/flim/hmac-def hides /usr/share/emacs/27.1/lisp/net/hmac-def /usr/share/emacs/site-lisp/flim/sasl-digest hides /usr/share/emacs/27.1/lisp/net/sasl-digest /usr/share/emacs/site-lisp/flim/sasl hides /usr/share/emacs/27.1/lisp/net/sasl /usr/share/emacs/site-lisp/flim/sasl-ntlm hides /usr/share/emacs/27.1/lisp/net/sasl-ntlm /usr/share/emacs/site-lisp/flim/ntlm hides /usr/share/emacs/27.1/lisp/net/ntlm /usr/share/emacs/site-lisp/latex-cjk-thai/thai-word hides /usr/share/emacs/27.1/lisp/language/thai-word Features: (shadow sort mail-extr warnings emacsbug message rmc puny dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search time-date subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils time cus-start cus-load paren cc-styles cc-align cc-engine cc-vars cc-defs edmacro kmacro cl-loaddefs cl-lib w3m-load tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded 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 threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 70231 7098) (symbols 48 9062 1) (strings 32 22942 1331) (string-bytes 1 738076) (vectors 16 10797) (vector-slots 8 143077 9264) (floats 8 26 24) (intervals 56 252 0) (buffers 1000 13)) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-28 16:36 bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning Vincent Lefevre @ 2020-10-28 16:44 ` Vincent Lefevre 2020-10-28 16:53 ` Eli Zaretskii 1 sibling, 0 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-10-28 16:44 UTC (permalink / raw) To: 44284 I forgot to say that the chosen font matters, which looks surprising. For instance, the bug doesn't occur with 6x13, nor with "DejaVu Sans Mono". -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-28 16:36 bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning Vincent Lefevre 2020-10-28 16:44 ` Vincent Lefevre @ 2020-10-28 16:53 ` Eli Zaretskii 2020-10-30 10:52 ` Vincent Lefevre 1 sibling, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-10-28 16:53 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > From: Vincent Lefevre <vincent@vinc17.net> > Date: Wed, 28 Oct 2020 17:36:37 +0100 > > > Under Debian/unstable, create a file with > > printf "%d\n" `seq 1000` > file > > then open it using GNU Emacs 27.1 with > > emacs -Q -fn misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 file > > Go to the end of the file with ESC > then scroll upward with the > mouse wheel (button 4) several times (but slowly). When the cursor > needs repositioning, this actually scrolls downward, probably > because Emacs tries to center the mouse cursor instead of letting > it at the bottom. Please try the latest emacs-27 branch or the master, it's possible that this is already fixed there. (I couldn't verify myself if this is fixed as I cannot reproduce the original problem to begin with.) Thanks. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-28 16:53 ` Eli Zaretskii @ 2020-10-30 10:52 ` Vincent Lefevre 2020-10-30 11:31 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 10:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-28 18:53:37 +0200, Eli Zaretskii wrote: > Please try the latest emacs-27 branch or the master, it's possible > that this is already fixed there. (I couldn't verify myself if this > is fixed as I cannot reproduce the original problem to begin with.) Still the same problem with the latest emacs-27 branch (da6234e2dfd8c345bad1ff3075033b282b64f958). GNU Emacs 27.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.23, cairo version 1.16.0) of 2020-10-30 -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 10:52 ` Vincent Lefevre @ 2020-10-30 11:31 ` Eli Zaretskii 2020-10-30 13:33 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-10-30 11:31 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Fri, 30 Oct 2020 11:52:28 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > On 2020-10-28 18:53:37 +0200, Eli Zaretskii wrote: > > Please try the latest emacs-27 branch or the master, it's possible > > that this is already fixed there. (I couldn't verify myself if this > > is fixed as I cannot reproduce the original problem to begin with.) > > Still the same problem with the latest emacs-27 branch > (da6234e2dfd8c345bad1ff3075033b282b64f958). > > GNU Emacs 27.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.23, cairo version 1.16.0) of 2020-10-30 Thanks. This means that I will need a reproduction recipe with some less Unix-specific font, because I tried a lot of different font sizes and couldn't reproduce the problem, at least not in "emacs -Q". ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 11:31 ` Eli Zaretskii @ 2020-10-30 13:33 ` Vincent Lefevre 2020-10-30 13:37 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 13:33 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-30 13:31:54 +0200, Eli Zaretskii wrote: > Thanks. This means that I will need a reproduction recipe with some > less Unix-specific font, because I tried a lot of different font sizes > and couldn't reproduce the problem, at least not in "emacs -Q". Note that here the bug is reproducible with -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1 -misc-fixed-bold-r-normal--13-100-100-100-c-80-iso8859-1 -misc-fixed-medium-r-normal--13-100-100-100-c-70-iso8859-1 -misc-fixed-medium-r-normal--13-100-100-100-c-80-iso8859-1 -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso10646-1 -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso10646-1 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 but not with -misc-fixed-medium-r-normal--0-0-75-75-c-0-iso10646-1 -misc-fixed-medium-r-normal--8-80-75-75-c-50-iso10646-1 -misc-fixed-medium-r-normal--9-90-75-75-c-60-iso10646-1 -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso10646-1 -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1 -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 -misc-fixed-medium-r-semicondensed--0-0-75-75-c-0-iso10646-1 -schumacher-clean-medium-r-normal--12-120-75-75-c-60-iso10646-1 So it seems to be the "13" that is the problem. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 13:33 ` Vincent Lefevre @ 2020-10-30 13:37 ` Eli Zaretskii 2020-10-30 16:31 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-10-30 13:37 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Fri, 30 Oct 2020 14:33:36 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > On 2020-10-30 13:31:54 +0200, Eli Zaretskii wrote: > > Thanks. This means that I will need a reproduction recipe with some > > less Unix-specific font, because I tried a lot of different font sizes > > and couldn't reproduce the problem, at least not in "emacs -Q". > > Note that here the bug is reproducible with > > -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1 > -misc-fixed-bold-r-normal--13-100-100-100-c-80-iso8859-1 > -misc-fixed-medium-r-normal--13-100-100-100-c-70-iso8859-1 > -misc-fixed-medium-r-normal--13-100-100-100-c-80-iso8859-1 > -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso10646-1 > -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso10646-1 > -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 > > but not with > > -misc-fixed-medium-r-normal--0-0-75-75-c-0-iso10646-1 > -misc-fixed-medium-r-normal--8-80-75-75-c-50-iso10646-1 > -misc-fixed-medium-r-normal--9-90-75-75-c-60-iso10646-1 > -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso10646-1 > -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1 > -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 > -misc-fixed-medium-r-semicondensed--0-0-75-75-c-0-iso10646-1 > -schumacher-clean-medium-r-normal--12-120-75-75-c-60-iso10646-1 > > So it seems to be the "13" that is the problem. Yes, but I don't have access to a system with misc-fixed font, and the replacement I have here refuses to reproduce the problem with many sizes I tried. So I need help in reproducing the issue, before I could debug it. Thanks. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 13:37 ` Eli Zaretskii @ 2020-10-30 16:31 ` Vincent Lefevre 2020-10-30 20:34 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 16:31 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-30 15:37:10 +0200, Eli Zaretskii wrote: > Yes, but I don't have access to a system with misc-fixed font, and the > replacement I have here refuses to reproduce the problem with many > sizes I tried. So I need help in reproducing the issue, before I > could debug it. Note: I've just noticed an editing issue, so that the font name I gave in the bug report was wrong (I suspect that when I fixed the Emacs word wrapping of the copy-pasted command, I inadvertently removed the initial dash of the font name). It should be: emacs -Q -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 file Sorry about that. I've also tried the master branch, and it is also buggy. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 16:31 ` Vincent Lefevre @ 2020-10-30 20:34 ` Vincent Lefevre 2020-10-30 20:57 ` Vincent Lefevre 2020-10-30 20:58 ` Eli Zaretskii 0 siblings, 2 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 20:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 I've found the cause of this issue: with the culprit font, it is not always possible to put the text cursor on the last line in the window, either with a mouse click or with the down arrow: Emacs scrolls the text so that the cursor is at the center of the window. Why/when this occurs remains to be determined (is there some rounding involved?). When the bug does not occur with the mouse wheel, the cursor is put on the last line. But with the culprit font, I suppose that the above issue causes another scroll in the opposite direction, hence the observed behavior. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 20:34 ` Vincent Lefevre @ 2020-10-30 20:57 ` Vincent Lefevre 2020-10-30 21:09 ` Eli Zaretskii 2020-10-30 20:58 ` Eli Zaretskii 1 sibling, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 20:57 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-30 21:34:53 +0100, Vincent Lefevre wrote: > I've found the cause of this issue: with the culprit font, it is > not always possible to put the text cursor on the last line in > the window, either with a mouse click or with the down arrow: > Emacs scrolls the text so that the cursor is at the center of > the window. Why/when this occurs remains to be determined (is > there some rounding involved?). This is contextual. For instance, with emacs -Q -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 file I have a window with 34 lines: 1 2 3 . . . 33 34 If I move the cursor downward with the down arrow, I can reach line 33. At line 34 (last line of the window), Emacs scrolls to have: 17 18 19 . . . 49 50 with the cursor on line 34. Then, with the down arrow, I can put the cursor on line 50, which remains the last line of the window. With the up arrow, I put the cursor on line 40. With the mouse wheel, I scroll downward (one time), then upward. I still have lines 17 to 50 with the cursor on line 40. With the down arrow, I can reach line 49, but at line 50, Emacs scrolls to have lines 33 to 66, while before, the cursor could be on line 50 as the last line of the window. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 20:57 ` Vincent Lefevre @ 2020-10-30 21:09 ` Eli Zaretskii 2020-10-30 23:00 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-10-30 21:09 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Fri, 30 Oct 2020 21:57:02 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > This is contextual. For instance, with > > emacs -Q -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 file > > I have a window with 34 lines: > > 1 > 2 > 3 > . > . > . > 33 > 34 > > If I move the cursor downward with the down arrow, I can reach > line 33. At line 34 (last line of the window), Emacs scrolls to > have: > > 17 > 18 > 19 > . > . > . > 49 > 50 > > with the cursor on line 34. Then, with the down arrow, I can put the > cursor on line 50, which remains the last line of the window. With > the up arrow, I put the cursor on line 40. With the mouse wheel, I > scroll downward (one time), then upward. I still have lines 17 to 50 > with the cursor on line 40. With the down arrow, I can reach line 49, > but at line 50, Emacs scrolls to have lines 33 to 66, while before, > the cursor could be on line 50 as the last line of the window. Like I said, there's some factor at work here that needs to be identified. Which is why I need a reproduction recipe. Alternatively, someone else who can reproduce this are welcome to debug this and propose analysis and/or fix. Thanks. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 21:09 ` Eli Zaretskii @ 2020-10-30 23:00 ` Vincent Lefevre 2020-10-31 0:46 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-30 23:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-30 23:09:00 +0200, Eli Zaretskii wrote: > Alternatively, someone else who can reproduce this are welcome to > debug this and propose analysis and/or fix. Perhaps you could give some indication. FYI, with the culprit font, (move-to-window-line -1) goes to line 34 (the last line in the window), and recenters the cursor. The move-to-window-line documentation says "-1 meaning the last fully visible display line of the window". So line 34 would be fully visible, so that I don't see why the cursor is recentered. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 23:00 ` Vincent Lefevre @ 2020-10-31 0:46 ` Vincent Lefevre 2020-10-31 1:13 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-31 0:46 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 What happens is the following. In xdisp.c, fucntion redisplay_window: /* Handle case where text has not changed, only point, and it has not moved off the frame, and we are not retrying after hscroll. (current_matrix_up_to_date_p is true when retrying.) */ if (current_matrix_up_to_date_p && (rc = try_cursor_movement (window, startp, &temp_scroll_step), rc != CURSOR_MOVEMENT_CANNOT_BE_USED)) rc is normally 0, but when the last line is reached, rc = 2 (CURSOR_MOVEMENT_MUST_SCROLL). So I assume that the bug occurs somewhere in try_cursor_movement. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-31 0:46 ` Vincent Lefevre @ 2020-10-31 1:13 ` Vincent Lefevre 2020-10-31 7:38 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-10-31 1:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-31 01:46:17 +0100, Vincent Lefevre wrote: > So I assume that the bug occurs somewhere in try_cursor_movement. In try_cursor_movement, one has: if (MATRIX_ROW_BOTTOM_Y (row) > last_y || PT > MATRIX_ROW_END_CHARPOS (row) /* Line is completely visible last line in window and PT is to be set in the next line. */ || (MATRIX_ROW_BOTTOM_Y (row) == last_y && PT == MATRIX_ROW_END_CHARPOS (row) && !row->ends_at_zv_p && !MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P (row))) With the culprit font, MATRIX_ROW_BOTTOM_Y (row) > last_y becomes 1 when the cursor reaches the last line. With a working font, the value is still 0. More precisely, with size 13, MATRIX_ROW_BOTTOM_Y (row) and last_y are: 27 442 40 442 53 442 ... 417 442 430 442 443 442 <-- line 34 (last visible line) and with size 14: 28 476 42 476 56 476 ... 448 476 462 476 476 476 <-- line 34 (last visible line) The issue with size 13 is that MATRIX_ROW_BOTTOM_Y (row) is 13*n+1 instead of 13*n. That's all for today. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-31 1:13 ` Vincent Lefevre @ 2020-10-31 7:38 ` Eli Zaretskii 2020-10-31 22:43 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-10-31 7:38 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sat, 31 Oct 2020 02:13:50 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > In try_cursor_movement, one has: > > if (MATRIX_ROW_BOTTOM_Y (row) > last_y > || PT > MATRIX_ROW_END_CHARPOS (row) > /* Line is completely visible last line in window > and PT is to be set in the next line. */ > || (MATRIX_ROW_BOTTOM_Y (row) == last_y > && PT == MATRIX_ROW_END_CHARPOS (row) > && !row->ends_at_zv_p > && !MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P (row))) > > With the culprit font, MATRIX_ROW_BOTTOM_Y (row) > last_y becomes 1 > when the cursor reaches the last line. With a working font, the value > is still 0. > > More precisely, with size 13, MATRIX_ROW_BOTTOM_Y (row) and last_y are: > > 27 442 > 40 442 > 53 442 > ... > 417 442 > 430 442 > 443 442 <-- line 34 (last visible line) > > and with size 14: > > 28 476 > 42 476 > 56 476 > ... > 448 476 > 462 476 > 476 476 <-- line 34 (last visible line) > > The issue with size 13 is that MATRIX_ROW_BOTTOM_Y (row) is 13*n+1 > instead of 13*n. Thanks. What you describe sounds normal to me: this code is designed to detect these situations. So I see no bug here, at least not yet. I think the issue might be elsewhere: in the code that decides to scroll such that this particular screen line ends up being the last one, and/or that point should be on this last line. If this happens, we will always recenter or move point off that screen line. So the right place to look could be in the scrolling code, probably in window_scroll_pixel_based. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-31 7:38 ` Eli Zaretskii @ 2020-10-31 22:43 ` Vincent Lefevre 2020-11-01 0:24 ` Vincent Lefevre 2020-11-01 15:55 ` Eli Zaretskii 0 siblings, 2 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-10-31 22:43 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-31 09:38:37 +0200, Eli Zaretskii wrote: > I think the issue might be elsewhere: in the code that decides to > scroll such that this particular screen line ends up being the last > one, and/or that point should be on this last line. If this happens, > we will always recenter or move point off that screen line. So the > right place to look could be in the scrolling code, probably in > window_scroll_pixel_based. window_scroll_pixel_based is not called at all, neither window_scroll is. What is wrong seems to be the initial position of the text in the window. Indeed, with xmag (magnifier), I can see that the glyphs are shifted one line downward. Now, I don't know where to look at. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-31 22:43 ` Vincent Lefevre @ 2020-11-01 0:24 ` Vincent Lefevre 2020-11-01 0:28 ` Vincent Lefevre 2020-11-01 16:15 ` Eli Zaretskii 2020-11-01 15:55 ` Eli Zaretskii 1 sibling, 2 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 0:24 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-10-31 23:43:24 +0100, Vincent Lefevre wrote: > What is wrong seems to be the initial position of the text in the > window. Indeed, with xmag (magnifier), I can see that the glyphs > are shifted one line downward. Now, I don't know where to look at. The issue is in xdisp.c, function compute_line_metrics. With size 14, one gets row->height = 14 and everything is fine. With size 13, one gets row->height = 13 initially, but one enters the following condition: /* If first line's physical ascent is larger than its logical ascent, use the physical ascent, and make the row taller. This makes accented characters fully visible. */ if (row == MATRIX_FIRST_TEXT_ROW (it->w->desired_matrix) && row->phys_ascent > row->ascent) { row->height += row->phys_ascent - row->ascent; row->ascent = row->phys_ascent; } where row->height is increased to 14, hence the issue with the first line. One successively gets it->current_y = 0 it->current_y = 14 it->current_y = 27 adding 13 each time for the following lines. With size 14: row->phys_ascent = 12 row->ascent = 12 With size 13: row->phys_ascent = 12 row->ascent = 11 I don't know where phys_ascent comes from, but it does not seem to be in the font description. Anyway, this case is not handled correctly by Emacs. Note also that when building without cairo (--without-cairo), I get with size 13: row->phys_ascent = 11 row->ascent = 11 -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 0:24 ` Vincent Lefevre @ 2020-11-01 0:28 ` Vincent Lefevre 2020-11-01 16:15 ` Eli Zaretskii 2020-11-01 16:15 ` Eli Zaretskii 1 sibling, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 0:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-01 01:24:30 +0100, Vincent Lefevre wrote: [...] > where row->height is increased to 14, hence the issue with the first > line. One successively gets > > it->current_y = 0 > it->current_y = 14 > it->current_y = 27 > > adding 13 each time for the following lines. About this, this is in function display_line it->current_y += row->height; -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 0:28 ` Vincent Lefevre @ 2020-11-01 16:15 ` Eli Zaretskii 0 siblings, 0 replies; 31+ messages in thread From: Eli Zaretskii @ 2020-11-01 16:15 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sun, 1 Nov 2020 01:28:03 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > On 2020-11-01 01:24:30 +0100, Vincent Lefevre wrote: > [...] > > where row->height is increased to 14, hence the issue with the first > > line. One successively gets > > > > it->current_y = 0 > > it->current_y = 14 > > it->current_y = 27 > > > > adding 13 each time for the following lines. > > About this, this is in function display_line > > it->current_y += row->height; Yes, this is how the display engine tracks the Y coordinate of the screen line it is laying out. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 0:24 ` Vincent Lefevre 2020-11-01 0:28 ` Vincent Lefevre @ 2020-11-01 16:15 ` Eli Zaretskii 2020-11-01 17:32 ` Vincent Lefevre 1 sibling, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-11-01 16:15 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sun, 1 Nov 2020 01:24:30 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > The issue is in xdisp.c, function compute_line_metrics. > > With size 14, one gets row->height = 14 and everything is fine. > > With size 13, one gets row->height = 13 initially, but one enters > the following condition: > > /* If first line's physical ascent is larger than its logical > ascent, use the physical ascent, and make the row taller. > This makes accented characters fully visible. */ > if (row == MATRIX_FIRST_TEXT_ROW (it->w->desired_matrix) > && row->phys_ascent > row->ascent) > { > row->height += row->phys_ascent - row->ascent; > row->ascent = row->phys_ascent; > } > > where row->height is increased to 14, hence the issue with the first > line. One successively gets > > it->current_y = 0 > it->current_y = 14 > it->current_y = 27 > > adding 13 each time for the following lines. Thanks, this makes sense. But the reason for this is still TBD. > With size 14: > row->phys_ascent = 12 > row->ascent = 12 > > With size 13: > row->phys_ascent = 12 > row->ascent = 11 > > I don't know where phys_ascent comes from, but it does not seem to be > in the font description. It does come from the font data, or at least it should. See below. > Anyway, this case is not handled correctly by Emacs. I think the jury is still out on this issue. > Note also that when building without cairo (--without-cairo), I get > with size 13: > > row->phys_ascent = 11 > row->ascent = 11 Interesting. Once you understand where did the value 12 come from, perhaps you could see how things are different in a non-Cairo build. Let me describe how row->phys_ascent is computed, so that you could take a closer look. In general, both the row->ascent and row->phys_ascent values are computed from the metrics of the character glyphs of the screen line. The difference between them is that the former is affected by various features such as the line-spacing and text properties that modify the height of the text, whereas the latter keeps the value gleaned from the character metrics. The row->ascent and row->phys_ascent are assigned by display_line, using the maximum values of ascent and phys_ascent of all the glyphs laid out on the screen line. These latter values are tracked by it->max_ascent and it->max_phys_ascent. For each character display_line examines, it calls gui_produce_glyphs (via the macro PRODUCE_GLYPHS), and there we have this fragment: if (get_char_glyph_code (it->char_to_display, font, &char2b)) { pcm = get_per_char_metric (font, &char2b); if (pcm->width == 0 && pcm->rbearing == 0 && pcm->lbearing == 0) pcm = NULL; } if (pcm) { it->phys_ascent = pcm->ascent + boff; it->phys_descent = pcm->descent - boff; it->pixel_width = pcm->width; This is where these values start: from the per-character metrics we get from the font. Near the end of gui_produce_glyphs, we have this: it->max_ascent = max (it->max_ascent, it->ascent); it->max_descent = max (it->max_descent, it->descent); it->max_phys_ascent = max (it->max_phys_ascent, it->phys_ascent); it->max_phys_descent = max (it->max_phys_descent, it->phys_descent); This accumulates the maximum values of all the glyphs. Back in display_line we have, a little ways after the call to PRODUCE_GLYPHS: row->ascent = max (row->ascent, it->max_ascent); row->height = max (row->height, it->max_ascent + it->max_descent); row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent); row->phys_height = max (row->phys_height, it->max_phys_ascent + it->max_phys_descent); (This is the mainline of the algorithm; you will see that there are few special cases where we don't take the values from the font glyphs, but from other sources. Perhaps this could explain the strange situation you see with this particular font.) So now the question becomes: which of the characters on the window's first screen line, or some other condition there, causes the row->phys_ascent value become larger than row->ascent? And why does this not happen in a non-Cairo build? Thanks. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 16:15 ` Eli Zaretskii @ 2020-11-01 17:32 ` Vincent Lefevre 2020-11-01 17:43 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 17:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-01 18:15:04 +0200, Eli Zaretskii wrote: > Interesting. Once you understand where did the value 12 come from, > perhaps you could see how things are different in a non-Cairo build. It appears that Cairo uses floating point with poor rounding control (see below). I suppose that the non-cairo driver keeps integers. > Let me describe how row->phys_ascent is computed, so that you could > take a closer look. [...] Yes, this is what I've found: The row->phys_ascent comes from function display_line, in the loop generating characters: if (/* Not a newline. */ nglyphs > 0 /* Glyphs produced fit entirely in the line. */ && it->current_x < it->last_visible_x) { [...] row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent); [...] } At the first iteration, row->phys_ascent is changed from 0 to 12. So, it comes from it->max_phys_ascent, which is set to 12 by PRODUCE_GLYPHS (it); earlier in the loop. In this context (X protocol), this macro calls gui_produce_glyphs (defined in xdisp.c). In gui_produce_glyphs, this is case it->what == IT_CHARACTER, with it->char_to_display == 'F'; pcm is true and it->phys_ascent is set to 12 by it->phys_ascent = pcm->ascent + boff; where pcm->ascent = 12 and boff = 0, while for Emacs without cairo, pcm->ascent = 11 (and boff = 0) as expected. With size 14 (with or without cairo), one has pcm->ascent = 12. Thus the issue comes from pcm->ascent. It is set by get_per_char_metric, where char2b = 40. With cairo, it calls function ftcrfont_text_extents (defined in ftcrfont.c), which calls ftcrfont_glyph_extents, which sets metrics->ascent to 12 from the cache. When the cache is filled with cache->ascent = ceil (- extents.y_bearing); extents.y_bearing (whose type is double) is equal to: Font size 13: -0x1.6000000000001p+3 ≈ -11.000000000000002 Font size 14: -0x1.8p+3 = -12 With ceil(), 11.000000000000002 rounds to 12, while the expected value is 11. A rounding issue, as I guessed at https://debbugs.gnu.org/cgi/bugreport.cgi?bug=44284#29 -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 17:32 ` Vincent Lefevre @ 2020-11-01 17:43 ` Eli Zaretskii 2020-11-01 18:34 ` Vincent Lefevre 0 siblings, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-11-01 17:43 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sun, 1 Nov 2020 18:32:40 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > When the cache is filled with > > cache->ascent = ceil (- extents.y_bearing); > > extents.y_bearing (whose type is double) is equal to: > > Font size 13: -0x1.6000000000001p+3 ≈ -11.000000000000002 > Font size 14: -0x1.8p+3 = -12 > > With ceil(), 11.000000000000002 rounds to 12, while the expected value > is 11. A rounding issue, as I guessed at > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=44284#29 Thanks. Do you have a suggestion for a fix? ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 17:43 ` Eli Zaretskii @ 2020-11-01 18:34 ` Vincent Lefevre 2020-11-01 18:47 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 18:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-01 19:43:12 +0200, Eli Zaretskii wrote: > > When the cache is filled with > > > > cache->ascent = ceil (- extents.y_bearing); > > > > extents.y_bearing (whose type is double) is equal to: > > > > Font size 13: -0x1.6000000000001p+3 ≈ -11.000000000000002 > > Font size 14: -0x1.8p+3 = -12 > > > > With ceil(), 11.000000000000002 rounds to 12, while the expected value > > is 11. A rounding issue, as I guessed at > > > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=44284#29 > > Thanks. Do you have a suggestion for a fix? Well, I think that there are 3 potential issues. 1. That fact that here, extents.y_bearing is slightly incorrect, which appears to be a bug in Cairo. If I understand correctly, Cairo can handle any font size (not just integer ones), e.g. with scalable fonts. Thus rounding cannot be avoided. Ideally one should have correct rounding on each visible result, but I suppose that this can be very complex and slow down applications, so that in general, an indeterminate rounding error may be acceptable, and applications / rendering algorithms should cope with that (when discontinuous functions are involved, such as rounding to an integer): if continuity is preserved in some way, the user will never see an error of, say, 2^(-45) pixel. Now, there's the particular case of integer font sizes, in particular with X fonts, and one may want to preserve integers exactly on the Cairo side. I don't know whether this can be done or there are tricky issues. 2. The fact that the cache->ascent integer gets incorrect in Emacs. This could be fixed either on the Cairo side (see above) or on the application (Emacs) side. In the latter case: First, if Emacs knows that under some condition, extents.y_bearing should be an integer, it could round to nearest. For instance, if this is an X font like here, is this necessarily the case? Alternatively, Emacs could use some heuristic: if extents.y_bearing is very close to an integer, assume that it should be this integer. This is rather ugly as this might yield unexpected results in some applications, but would this be OK in Emacs? 3. The fact that row->phys_ascent > row->ascent in compute_line_metrics yields an incorrect behavior. This is about the following comment: /* If first line's physical ascent is larger than its logical ascent, use the physical ascent, and make the row taller. This makes accented characters fully visible. */ Or is the bug I've reported about that is specific to the incorrect cache->ascent issue (item 2), in which case fixing (2) would be sufficient for everyone? -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 18:34 ` Vincent Lefevre @ 2020-11-01 18:47 ` Eli Zaretskii 2020-11-01 21:13 ` Vincent Lefevre 2020-11-07 8:29 ` Eli Zaretskii 0 siblings, 2 replies; 31+ messages in thread From: Eli Zaretskii @ 2020-11-01 18:47 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sun, 1 Nov 2020 19:34:58 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > > Thanks. Do you have a suggestion for a fix? > > Well, I think that there are 3 potential issues. > > 1. That fact that here, extents.y_bearing is slightly incorrect, > which appears to be a bug in Cairo. Probably (I'm not an expert on Cairo), but if so, this is out of our control. For all I know, Cairo developers could have decided to drop support for the font family you are using. > 2. The fact that the cache->ascent integer gets incorrect in Emacs. > > This could be fixed either on the Cairo side (see above) or on the > application (Emacs) side. In the latter case: > > First, if Emacs knows that under some condition, extents.y_bearing > should be an integer, it could round to nearest. For instance, if > this is an X font like here, is this necessarily the case? > > Alternatively, Emacs could use some heuristic: if extents.y_bearing > is very close to an integer, assume that it should be this integer. > This is rather ugly as this might yield unexpected results in some > applications, but would this be OK in Emacs? It would be okay, I think: we have a few kludgey workarounds for similar issues in other libraries. I thought about something like using ceil (VALUE - 1/128) or maybe even 1/256, on the assumption that the original integer value cannot be of a greater granularity (the non-Cairo code uses 1/64). > 3. The fact that row->phys_ascent > row->ascent in compute_line_metrics > yields an incorrect behavior. This is about the following comment: > > /* If first line's physical ascent is larger than its logical > ascent, use the physical ascent, and make the row taller. > This makes accented characters fully visible. */ This is not a bug, we must keep that code. It just isn't supposed to fire in your case. > Or is the bug I've reported about that is specific to the incorrect > cache->ascent issue (item 2), in which case fixing (2) would be > sufficient for everyone? Yes, we should solve item 2. Thanks. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 18:47 ` Eli Zaretskii @ 2020-11-01 21:13 ` Vincent Lefevre 2020-11-07 8:29 ` Eli Zaretskii 1 sibling, 0 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 21:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-01 20:47:04 +0200, Eli Zaretskii wrote: > > 3. The fact that row->phys_ascent > row->ascent in compute_line_metrics > > yields an incorrect behavior. This is about the following comment: > > > > /* If first line's physical ascent is larger than its logical > > ascent, use the physical ascent, and make the row taller. > > This makes accented characters fully visible. */ > > This is not a bug, we must keep that code. It just isn't supposed to > fire in your case. For this one, I meant that if the first row is made taller for some good reason, then this shouldn't yields recentering when scrolling upward with the mouse wheel, and (move-to-window-line -1) should put the cursor on the last fully visible display line of the window, as documented. Solving (2) would no longer trigger this code in my case, but you should make sure that this code, which is still useful in some other cases, behaves correctly with various Emacs features. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 18:47 ` Eli Zaretskii 2020-11-01 21:13 ` Vincent Lefevre @ 2020-11-07 8:29 ` Eli Zaretskii 2020-11-07 10:35 ` Vincent Lefevre 1 sibling, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-11-07 8:29 UTC (permalink / raw) To: vincent; +Cc: 44284-done > Date: Sun, 01 Nov 2020 20:47:04 +0200 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 44284@debbugs.gnu.org > > > Alternatively, Emacs could use some heuristic: if extents.y_bearing > > is very close to an integer, assume that it should be this integer. > > This is rather ugly as this might yield unexpected results in some > > applications, but would this be OK in Emacs? > > It would be okay, I think: we have a few kludgey workarounds for > similar issues in other libraries. > > I thought about something like using ceil (VALUE - 1/128) or maybe > even 1/256, on the assumption that the original integer value cannot > be of a greater granularity (the non-Cairo code uses 1/64). No further comments, so I pushed such a fix to the master branch, and I'm closing this bug report. Many thanks for your help in debugging this problem. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-07 8:29 ` Eli Zaretskii @ 2020-11-07 10:35 ` Vincent Lefevre 2020-11-07 13:22 ` Eli Zaretskii 0 siblings, 1 reply; 31+ messages in thread From: Vincent Lefevre @ 2020-11-07 10:35 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-07 10:29:17 +0200, Eli Zaretskii wrote: > > Date: Sun, 01 Nov 2020 20:47:04 +0200 > > From: Eli Zaretskii <eliz@gnu.org> > > Cc: 44284@debbugs.gnu.org > > > > > Alternatively, Emacs could use some heuristic: if extents.y_bearing > > > is very close to an integer, assume that it should be this integer. > > > This is rather ugly as this might yield unexpected results in some > > > applications, but would this be OK in Emacs? > > > > It would be okay, I think: we have a few kludgey workarounds for > > similar issues in other libraries. > > > > I thought about something like using ceil (VALUE - 1/128) or maybe > > even 1/256, on the assumption that the original integer value cannot > > be of a greater granularity (the non-Cairo code uses 1/64). > > No further comments, so I pushed such a fix to the master branch, and > I'm closing this bug report. Many thanks for your help in debugging > this problem. I've just tested, and I confirm that this completely fixes the bug. Thanks. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-07 10:35 ` Vincent Lefevre @ 2020-11-07 13:22 ` Eli Zaretskii 0 siblings, 0 replies; 31+ messages in thread From: Eli Zaretskii @ 2020-11-07 13:22 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sat, 7 Nov 2020 11:35:35 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > > No further comments, so I pushed such a fix to the master branch, and > > I'm closing this bug report. Many thanks for your help in debugging > > this problem. > > I've just tested, and I confirm that this completely fixes the bug. > Thanks. Thanks for testing the fix. ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-31 22:43 ` Vincent Lefevre 2020-11-01 0:24 ` Vincent Lefevre @ 2020-11-01 15:55 ` Eli Zaretskii 2020-11-01 17:26 ` Vincent Lefevre 1 sibling, 1 reply; 31+ messages in thread From: Eli Zaretskii @ 2020-11-01 15:55 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Sat, 31 Oct 2020 23:43:24 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > window_scroll_pixel_based is not called at all, neither window_scroll > is. Are you sure? That's very strange; it does get invoked on my system. This happens because turning the mouse wheel invokes mwheel-scroll, which calls the value of mwheel-scroll-up/down-function, whose default value is scroll-up/down, and those functions call scroll_command, which calls window_scroll, which on GUI frames calls window_scroll_pixel_based. Which part of this chain doesn't happen on your system? ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-11-01 15:55 ` Eli Zaretskii @ 2020-11-01 17:26 ` Vincent Lefevre 0 siblings, 0 replies; 31+ messages in thread From: Vincent Lefevre @ 2020-11-01 17:26 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 44284 On 2020-11-01 17:55:48 +0200, Eli Zaretskii wrote: > > Date: Sat, 31 Oct 2020 23:43:24 +0100 > > From: Vincent Lefevre <vincent@vinc17.net> > > Cc: 44284@debbugs.gnu.org > > > > window_scroll_pixel_based is not called at all, neither window_scroll > > is. > > Are you sure? That's very strange; it does get invoked on my system. > This happens because turning the mouse wheel invokes mwheel-scroll, [...] I meant, when I started to get unexpected values. Then yes, maybe (I haven't got that far), which would explain why I can put later the cursor on the last line. Anyway, this is not the cause of the bug. See my following mail... -- Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) ^ permalink raw reply [flat|nested] 31+ messages in thread
* bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning 2020-10-30 20:34 ` Vincent Lefevre 2020-10-30 20:57 ` Vincent Lefevre @ 2020-10-30 20:58 ` Eli Zaretskii 1 sibling, 0 replies; 31+ messages in thread From: Eli Zaretskii @ 2020-10-30 20:58 UTC (permalink / raw) To: Vincent Lefevre; +Cc: 44284 > Date: Fri, 30 Oct 2020 21:34:53 +0100 > From: Vincent Lefevre <vincent@vinc17.net> > Cc: 44284@debbugs.gnu.org > > I've found the cause of this issue: with the culprit font, it is > not always possible to put the text cursor on the last line in > the window, either with a mouse click or with the down arrow: > Emacs scrolls the text so that the cursor is at the center of > the window. Why/when this occurs remains to be determined (is > there some rounding involved?). Emacs always requires that the line where point is should be fully visible. This is standard Emacs behavior, nothing new and nothing specific to any special font. > When the bug does not occur with the mouse wheel, the cursor is > put on the last line. But with the culprit font, I suppose that > the above issue causes another scroll in the opposite direction, > hence the observed behavior. I suspected that much, but I cannot reproduce this. When I arrange for the font to be of size that causes the last line of the window to be only partially visible, scrolling with the mouse always leaves point on the line above the last, which is fully visible. I couldn't cause the situation you describe, no matter what I tried. So there's some other factor at work here that somehow forces this aberrant behavior, and a reproduction recipe is needed to identify the code which causes it. ^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2020-11-07 13:22 UTC | newest] Thread overview: 31+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-28 16:36 bug#44284: 27.1; with some Unicode font, scrolling upward with the mouse wheel actually scrolls downward when the cursor needs repositioning Vincent Lefevre 2020-10-28 16:44 ` Vincent Lefevre 2020-10-28 16:53 ` Eli Zaretskii 2020-10-30 10:52 ` Vincent Lefevre 2020-10-30 11:31 ` Eli Zaretskii 2020-10-30 13:33 ` Vincent Lefevre 2020-10-30 13:37 ` Eli Zaretskii 2020-10-30 16:31 ` Vincent Lefevre 2020-10-30 20:34 ` Vincent Lefevre 2020-10-30 20:57 ` Vincent Lefevre 2020-10-30 21:09 ` Eli Zaretskii 2020-10-30 23:00 ` Vincent Lefevre 2020-10-31 0:46 ` Vincent Lefevre 2020-10-31 1:13 ` Vincent Lefevre 2020-10-31 7:38 ` Eli Zaretskii 2020-10-31 22:43 ` Vincent Lefevre 2020-11-01 0:24 ` Vincent Lefevre 2020-11-01 0:28 ` Vincent Lefevre 2020-11-01 16:15 ` Eli Zaretskii 2020-11-01 16:15 ` Eli Zaretskii 2020-11-01 17:32 ` Vincent Lefevre 2020-11-01 17:43 ` Eli Zaretskii 2020-11-01 18:34 ` Vincent Lefevre 2020-11-01 18:47 ` Eli Zaretskii 2020-11-01 21:13 ` Vincent Lefevre 2020-11-07 8:29 ` Eli Zaretskii 2020-11-07 10:35 ` Vincent Lefevre 2020-11-07 13:22 ` Eli Zaretskii 2020-11-01 15:55 ` Eli Zaretskii 2020-11-01 17:26 ` Vincent Lefevre 2020-10-30 20:58 ` Eli Zaretskii
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).