* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
@ 2024-10-18 15:09 Romain Ouabdelkader
2024-10-18 16:08 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-18 15:09 UTC (permalink / raw)
To: 73863
[-- Attachment #1.1: Type: text/plain, Size: 45364 bytes --]
Hello,
I found some unexpected cursor movement near diagnostics
with flymake-show-diagnostics-at-end-of-line enabled.
When the cursor is on a line with a diagnostic, pressing down will move the
cursor to the end of the current line instead of the next line.
For example, pressing down here:
[image: Screenshot 2024-10-18 at 16.57.29.png]
Will move the cursor at the end of the line:
[image: Screenshot 2024-10-18 at 16.58.09.png]
Also, when editing the last line of a buffer, new text will appear after
the diagnostic until no key is pressed for a few seconds:
[image: Screenshot 2024-10-18 at 17.04.57.png]
Reproduced with emacs -Q on emacs 30.0.91
In GNU Emacs 30.0.91 (build 1, aarch64-apple-darwin23.5.0, NS
appkit-2487.60 Version 14.5 (Build 23F79)) of 2024-09-12 built on
MBPro-MHFY4Y3W3H
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.5
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
--infodir=/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/info/emacs
--prefix=/opt/homebrew/Cellar/emacs-plus@30/30.0.91 --with-xml2
--with-gnutls --with-native-compilation=aot --without-compress-install
--without-dbus --without-imagemagick --with-modules --with-rsvg
--with-webp --with-ns --disable-ns-self-contained 'CFLAGS=-O2
-DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT
-I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include'
'LDFLAGS=-L/opt/homebrew/lib/gcc/14 -I/opt/homebrew/opt/gcc/include
-I/opt/homebrew/opt/libgccjit/include''
Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY
KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: ELisp/d
Minor modes in effect:
windmove-mode: t
csv-field-index-mode: t
global-treesit-fold-mode: t
global-org-modern-mode: t
repeat-mode: t
conf--poetry-tracking-mode: t
global-diff-hl-mode: t
diff-hl-mode: t
dtrt-indent-global-mode: t
dtrt-indent-mode: t
fancy-compilation-mode: t
corfu-popupinfo-mode: t
global-corfu-mode: t
corfu-mode: t
which-key-mode: t
treemacs-filewatch-mode: t
treemacs-follow-mode: t
treemacs-git-mode: t
treemacs-fringe-indicator-mode: t
rainbow-delimiters-mode: t
org-roam-db-autosync-mode: t
hexl-follow-ascii: t
which-function-mode: t
global-git-commit-mode: t
server-mode: t
yas-global-mode: t
yas-minor-mode: t
doom-modeline-mode: t
projectile-mode: t
helm-mode: t
helm-minibuffer-history-mode: t
helm--remap-mouse-mode: t
async-bytecomp-package-mode: t
ws-butler-mode: t
electric-pair-mode: t
gcmh-mode: t
override-global-mode: t
el-patch-use-package-mode: t
pixel-scroll-precision-mode: t
global-subword-mode: t
subword-mode: t
global-so-long-mode: t
delete-selection-mode: (delete-selection-pre-hook t)
global-auto-revert-mode: t
savehist-mode: t
straight-use-package-mode: t
straight-package-neutering-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-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
minibuffer-regexp-mode: t
line-number-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
/Users/romain.ouabdelkader/.emacs.d/straight/build/emacsql-sqlite/emacsql-sqlite
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/emacsql/emacsql-sqlite
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit-section/magit-section
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-section
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-status
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-status
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-libgit-pkg
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-libgit-pkg
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-autorevert
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-autorevert
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/git-commit
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/git-commit
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-core
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-core
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-blame
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-blame
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-reflog
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-reflog
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-sequence
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-sequence
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-subtree
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-subtree
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-pull
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-pull
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-section-pkg
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-section-pkg
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-wip
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-wip
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-repos
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-repos
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-sparse-checkout
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-sparse-checkout
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-pkg
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-pkg
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-transient
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-transient
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/git-commit-pkg
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/git-commit-pkg
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-base
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-base
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-apply
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-apply
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-clone
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-clone
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-git
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-git
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-tag
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-tag
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-refs
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-refs
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-diff
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-diff
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-libgit
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-libgit
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-margin
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-margin
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-commit
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-commit
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-branch
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-branch
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-patch
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-patch
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-fetch
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-fetch
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-remote
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-remote
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-files
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-files
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-mode
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-mode
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-log
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-log
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-merge
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-merge
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-ediff
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-ediff
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/git-rebase
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/git-rebase
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-push
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-push
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-bisect
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-bisect
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-process
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-process
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-stash
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-stash
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-notes
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-notes
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-bookmark
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-bookmark
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-submodule
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-submodule
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-worktree
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-worktree
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-gitignore
hides
/Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-gitignore
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-extras
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-extras
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-bundle
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-bundle
/Users/romain.ouabdelkader/.emacs.d/straight/build/git-commit/magit-reset
hides /Users/romain.ouabdelkader/.emacs.d/straight/build/magit/magit-reset
/Users/romain.ouabdelkader/.emacs.d/straight/build/cmake-mode/cmake-mode
hides /opt/homebrew/share/emacs/site-lisp/cmake/cmake-mode
/Users/romain.ouabdelkader/.emacs.d/straight/build/which-key/which-key
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/which-key
/Users/romain.ouabdelkader/.emacs.d/straight/build/transient/transient
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/transient
/Users/romain.ouabdelkader/.emacs.d/straight/build/bind-key/bind-key hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/bind-key
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-jump
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-jump
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-diminish
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-diminish
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-delight
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-delight
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-lint
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-lint
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-core
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-core
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-ensure
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-ensure
/Users/romain.ouabdelkader/.emacs.d/straight/build/use-package/use-package-bind-key
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/use-package/use-package-bind-key
/Users/romain.ouabdelkader/.emacs.d/straight/build/flymake/flymake hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/progmodes/flymake
/Users/romain.ouabdelkader/.emacs.d/straight/build/xref/xref hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/progmodes/xref
/Users/romain.ouabdelkader/.emacs.d/straight/build/project/project hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/progmodes/project
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-comint hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-comint
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-exp hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-exp
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-ctags hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-ctags
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-emacs-lisp hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-emacs-lisp
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/oc
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-texinfo hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-texinfo
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-irc hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-irc
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-doi hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-doi
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/ob
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-refile hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-refile
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-version hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-version
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-num hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-num
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-mhe hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-mhe
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-shell hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-shell
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-attach hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-attach
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-C hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/ob-C
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-macs hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-macs
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-entities hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-entities
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-dot hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-dot
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-sql hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-sql
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-eww hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-eww
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-datetree hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-datetree
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-macro hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-macro
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-eval hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-eval
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-haskell hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-haskell
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-org hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-org
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-rmail hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-rmail
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-awk hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-awk
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-groovy hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-groovy
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-icalendar hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-icalendar
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-octave hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-octave
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-scheme hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-scheme
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-mobile hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-mobile
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-processing hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-processing
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc-biblatex hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/oc-biblatex
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc-csl hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/oc-csl
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-colview hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-colview
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-R hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/ob-R
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-table hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-table
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-html hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-html
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-fortran hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-fortran
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/ol
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-plantuml hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-plantuml
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-docview hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-docview
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-perl hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-perl
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-sqlite hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-sqlite
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc-basic hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/oc-basic
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-sed hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-sed
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-fold-core hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-fold-core
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-ditaa hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-ditaa
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-ruby hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-ruby
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc-bibtex hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/oc-bibtex
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-habit hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-habit
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-loaddefs hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-loaddefs
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-gnus hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-gnus
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-screen hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-screen
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-mouse hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-mouse
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-css hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-css
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-inlinetask hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-inlinetask
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-lisp hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-lisp
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-eshell hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-eshell
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-pcomplete hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-pcomplete
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-lint hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-lint
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-id hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-id
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-capture hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-capture
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-sass hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-sass
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-tangle hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-tangle
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-calc hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-calc
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-java hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-java
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-compat hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-compat
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-attach-git hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-attach-git
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-beamer hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-beamer
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-protocol hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-protocol
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-element hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-element
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-lob hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-lob
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-tempo hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-tempo
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-python hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-python
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-latex hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-latex
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-w3m hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-w3m
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-agenda hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-agenda
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-persist hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-persist
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-ocaml hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-ocaml
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-ref hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-ref
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-fold hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-fold
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-julia hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-julia
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-lilypond hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-lilypond
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-table hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-table
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-clojure hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-clojure
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-indent hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-indent
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-plot hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-plot
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-latex hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-latex
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-src hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-src
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-duration hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-duration
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-makefile hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-makefile
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-info hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-info
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-clock hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-clock
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-forth hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-forth
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-odt hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-odt
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-man hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-man
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-publish hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-publish
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-archive hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-archive
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-org hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-org
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-lua hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-lua
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-keys hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-keys
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-eshell hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-eshell
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-faces hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-faces
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-man hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-man
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-list hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-list
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-md hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-md
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-goto hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-goto
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-bbdb hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-bbdb
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/org
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ol-bibtex hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ol-bibtex
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-koma-letter hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-koma-letter
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox-ascii hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ox-ascii
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-matlab hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-matlab
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ox hides
/opt/homebrew/Cellar/emacs-plus@30/30.0.91/share/emacs/30.0.91/lisp/org/ox
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-timer hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-timer
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/oc-natbib hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/oc-natbib
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-core hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-core
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-feed hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-feed
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-gnuplot hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-gnuplot
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-js hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-js
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-element-ast
hides /opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-element-ast
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-footnote hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-footnote
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/ob-maxima hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/ob-maxima
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-cycle hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-cycle
/Users/romain.ouabdelkader/.emacs.d/straight/build/org/org-crypt hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/org/org-crypt
/Users/romain.ouabdelkader/.emacs.d/straight/build/compat/compat hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/emacs-lisp/compat
/Users/romain.ouabdelkader/.emacs.d/straight/build/eldoc/eldoc hides
/opt/homebrew/Cellar/emacs-plus@30
/30.0.91/share/emacs/30.0.91/lisp/emacs-lisp/eldoc
Features:
(shadow mail-extr emacsbug rng-xsd xsd-regexp rng-cmpct rng-nxml
rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util
rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-enc
xmltok magit-patch magit-subtree magit-gitignore magit-ediff ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util vc-annotate gnutls network-stream url-http url-gw nsm
url-cache url-auth json-ts-mode novice scroll-lock ispell cl-print
display-line-numbers dabbrev find-dired goto-addr git-timemachine
misearch multi-isearch vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs
bug-reference magit-extras image-file image-converter helm-external
helm-net cape-keyword company-dabbrev-code company-dabbrev windmove
tramp-cache time-stamp shortdoc help-fns radix-tree winner tramp-archive
tramp-gvfs helm-command helm-elisp helm-eval edebug helm-info
custom-python-highlighting graphics custom-monokai-theme gptel-ollama
gptel gptel-org gptel-openai gptel-autoloads nerd-icons-corfu
nerd-icons-corfu-autoloads csv-mode sort csv-mode-autoloads treesit-fold
treesit-fold-summary treesit-fold-parsers treesit-fold-util
treesit-fold-autoloads casual-calc casual-calc-symbolic
casual-calc-variables casual-calc-algebra calcalg3 casual-calc-financial
casual-calc-stack calc-undo calc-yank casual-calc-trail
casual-calc-graphics casual-calc-fileio calc-vec casual-calc-vector
casual-calc-predicates casual-calc-units casual-calc-trigonometric
casual-calc-time casual-calc-settings casual-calc-angle-measure
casual-calc-rounding casual-calc-random calc-comb
casual-calc-logarithmic casual-calc-conversion casual-calc-complex
casual-calc-binary casual-calc-radix casual-calc-labels
casual-calc-version casual-calc-utils casual-lib casual-lib-version
casual-calc--calc calc-math calc-ext calc calc-loaddefs calc-macs
casual-calc-autoloads casual-lib-autoloads terraform-mode hcl-mode
terraform-mode-autoloads hcl-mode-autoloads org-modern-indent org-indent
org-modern-indent-autoloads org-modern org-modern-autoloads
gdscript-mode gdscript-ts-mode gdscript-eglot gdscript-hydra hydra lv
gdscript-godot gdscript-project gdscript-history gdscript-comint
gdscript-debug gdscript-format gdscript-comint-gdformat
gdscript-completion gdscript-fill-paragraph gdscript-imenu
gdscript-indent-and-nav gdscript-rx gdscript-utils gdscript-syntax
gdscript-keywords gdscript-docs eww url-queue mm-url
gdscript-customization gdscript-mode-autoloads dape gdb-mi bindat gud
tree-widget repeat dape-autoloads treesit-auto treesit-auto-autoloads
diff-hl log-view vc-dir vc diff-hl-autoloads browse-at-remote vc-git
vc-dispatcher browse-at-remote-autoloads wgrep-helm wgrep-helm-autoloads
wgrep wgrep-autoloads dtrt-indent cus-load dtrt-indent-autoloads
zygospore zygospore-autoloads fancy-compilation
fancy-compilation-autoloads apheleia apheleia-rcs apheleia-dp
apheleia-formatters apheleia-utils apheleia-log
apheleia-formatter-context apheleia-autoloads cape cape-autoloads
company company-autoloads orderless orderless-autoloads corfu-popupinfo
corfu corfu-autoloads eldoc-box eldoc-box-autoloads which-key
which-key-autoloads treemacs-projectile treemacs-projectile-autoloads
treemacs treemacs-header-line treemacs-compatibility treemacs-mode
treemacs-bookmarks treemacs-tags treemacs-interface treemacs-persistence
treemacs-filewatch-mode treemacs-follow-mode treemacs-rendering
treemacs-annotations treemacs-async treemacs-workspaces treemacs-dom
treemacs-visuals treemacs-fringe-indicator treemacs-scope pulse
treemacs-faces treemacs-icons treemacs-themes treemacs-core-utils
pfuture hl-line treemacs-logging treemacs-customization treemacs-macros
treemacs-autoloads cfrs-autoloads posframe-autoloads hydra-autoloads
lv-autoloads pfuture-autoloads ace-window-autoloads avy-autoloads
markdown-mode markdown-mode-autoloads rainbow-delimiters
rainbow-delimiters-autoloads typescript-ts-mode org-roam-migrate
org-roam-mode org-roam-capture org-roam-node org-roam-db org-roam-utils
org-roam-compat org-roam org-capture org-element org-persist avl-tree
org-id org-refile emacsql-sqlite emacsql-sqlite-common emacsql
emacsql-compiler org-roam-autoloads emacsql-sqlite-autoloads
emacsql-autoloads string-inflection string-inflection-autoloads
groovy-mode groovy-mode-autoloads kotlin-mode kotlin-mode-indent
kotlin-mode-lexer kotlin-mode-autoloads pyvenv pyvenv-autoloads
helm-xref helm-xref-autoloads multi-vterm multi-vterm-autoloads
vterm-toggle tramp-sh vterm-toggle-autoloads vterm magit-bookmark
bookmark face-remap color term ehelp vterm-module term/xterm xterm
vterm-autoloads sqlformat reformatter sqlformat-autoloads
reformatter-autoloads solidity-mode solidity-common
solidity-mode-autoloads emojify apropos tar-mode arc-mode archive-mode
emojify-autoloads restclient restclient-autoloads rust-utils rust-mode
rust-rustfmt rust-playpen rust-compile rust-cargo rust-mode-autoloads js
c-ts-common cc-mode cc-fonts cc-guess cc-menus cc-cmds clang-format
clang-format-autoloads eglot external-completion jsonrpc ert pp ewoc
debug backtrace dockerfile-mode dockerfile-mode-autoloads nhexl-mode
disp-table hexl nhexl-mode-autoloads jinja2-mode sgml-mode facemenu
jinja2-mode-autoloads fill-column-indicator
fill-column-indicator-autoloads align glsl-mode glsl-mode-autoloads
helm-tramp helm-tramp-autoloads cython-mode cython-mode-autoloads
swift-mode swift-mode-imenu swift-mode-repl swift-mode-font-lock
swift-mode-standard-types swift-mode-fill swift-mode-beginning-of-defun
swift-mode-indent swift-mode-lexer swift-mode-autoloads yaml-mode
yaml-mode-autoloads quickrun ht eshell em-banner esh-mode esh-var
esh-cmd generator esh-ext esh-opt esh-proc esh-io esh-arg esh-module
esh-module-loaddefs esh-util quickrun-autoloads ht-autoloads magit-delta
xterm-color magit-delta-autoloads xterm-color-autoloads
git-timemachine-autoloads request request-autoloads magit-submodule
magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
magit-fetch magit-clone magit-remote magit-commit magit-sequence
magit-notes magit-worktree magit-tag magit-merge magit-branch
magit-reset magit-files magit-refs magit-status magit package
url-handlers magit-repos magit-apply magit-wip magit-log which-func
imenu magit-diff smerge-mode diff diff-mode track-changes git-commit
log-edit pcvs-util add-log magit-core magit-autorevert magit-margin
magit-transient magit-process with-editor server magit-mode transient
magit-git magit-base magit-section cursor-sensor crm magit-autoloads
magit-section-autoloads git-commit-autoloads with-editor-autoloads
transient-autoloads yasnippet yasnippet-autoloads multiple-cursors
mc-separate-operations rectangular-region-mode mc-mark-pop mc-edit-lines
mc-hide-unmatched-lines-mode mc-mark-more mc-cycle-cursors
multiple-cursors-core rect multiple-cursors-autoloads phi-search
phi-search-core phi-search-autoloads zoom-frm frame-cmds advice
frame-fns avoid zoom-frm-autoloads frame-cmds-autoloads
frame-fns-autoloads all-the-icons-autoloads doom-modeline
doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path
f nerd-icons nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon
nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon
nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon
nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon doom-modeline-autoloads
shrink-path-autoloads f-autoloads nerd-icons-autoloads compat-autoloads
cmake-mode rst cmake-mode-autoloads symbol-overlay
symbol-overlay-autoloads dumb-jump popup dash s xref dumb-jump-autoloads
popup-autoloads dash-autoloads s-autoloads helm-projectile
helm-projectile-autoloads finder-inf projectile lisp-mnt grep ibuf-ext
ibuffer ibuffer-loaddefs projectile-autoloads helm-ag helm-ag-autoloads
helm-mode helm-misc helm-files image-dired image-dired-tags
image-dired-external image-dired-util image-mode exif dired-x dired-aux
ffap tramp trampver tramp-integration files-x tramp-message tramp-compat
xdg shell tramp-loaddefs helm-buffers helm-occur helm-tags helm-locate
helm-grep helm-regexp helm-utils helm-help helm-types helm
helm-global-bindings helm-easymenu helm-core async-bytecomp helm-source
helm-multi-match helm-lib async helm-autoloads wfnames-autoloads
helm-core-autoloads async-autoloads vundo vundo-autoloads ws-butler
ws-butler-autoloads use-package-diminish elec-pair diminish
diminish-autoloads gcmh gcmh-autoloads ob-python python compat ob-dot
org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src
sh-script smie treesit executable ob-comint org-pcomplete pcomplete
org-list org-footnote org-faces org-entities noutline outline
org-element-ast inline pcase ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs find-func
cal-menu calendar cal-loaddefs gnus-sum shr pixel-fill kinsoku url-file
svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud
nnimap nnmail browse-url url url-proxy url-privacy url-expand
url-methods url-history url-cookie generate-lisp-file url-domsuf
url-util url-parse auth-source eieio eieio-core json map url-vars
mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range
message sendmail mailcap yank-media puny dired dired-loaddefs rfc822 mml
mml-sec password-cache epa derived epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util
time-date mail-utils range mm-util mail-prsvr wid-edit org-version
org-compat org-macs format-spec flymake project compile
text-property-search comint ansi-osc ansi-color thingatpt edmacro kmacro
byte-opt flymake-autoloads project-autoloads xref-autoloads
eldoc-autoloads use-package-bind-key bind-key easy-mmode undo-fu
undo-fu-autoloads el-patch-autoloads el-patch el-patch-stub
use-package-core cc-styles cc-align cc-engine cc-vars cc-defs
pixel-scroll cua-base ring cap-words superword subword so-long comp
comp-cstr warnings icons comp-run comp-common rx delsel autorevert
filenotify savehist cl use-package-autoloads info bind-key-autoloads
straight-autoloads cl-seq cl-extra help-mode straight subr-x cl-macs gv
cl-loaddefs cl-lib bytecomp byte-compile rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
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 emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads kqueue cocoa ns lcms2 multi-tty make-network-process
native-compile emacs)
Memory information:
((conses 16 2822317 10376696) (symbols 48 73639 12)
(strings 32 321279 196018) (string-bytes 1 12682264)
(vectors 16 236077) (vector-slots 8 2862838 2516896)
(floats 8 2517 13830) (intervals 56 165066 64583) (buffers 992 320))
[-- Attachment #1.2: Type: text/html, Size: 47111 bytes --]
[-- Attachment #2: Screenshot 2024-10-18 at 16.57.29.png --]
[-- Type: image/png, Size: 48193 bytes --]
[-- Attachment #3: Screenshot 2024-10-18 at 16.58.09.png --]
[-- Type: image/png, Size: 48551 bytes --]
[-- Attachment #4: Screenshot 2024-10-18 at 17.04.57.png --]
[-- Type: image/png, Size: 70429 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 15:09 bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line Romain Ouabdelkader
@ 2024-10-18 16:08 ` Eli Zaretskii
2024-10-18 16:24 ` Romain Ouabdelkader
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-18 16:08 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: 73863
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Fri, 18 Oct 2024 17:09:19 +0200
>
> I found some unexpected cursor movement near diagnostics with flymake-show-diagnostics-at-end-of-line
> enabled.
> When the cursor is on a line with a diagnostic, pressing down will move the cursor to the end of the current
> line instead of the next line.
>
> For example, pressing down here:
> Screenshot 2024-10-18 at 16.57.29.png
> Will move the cursor at the end of the line:
> Screenshot 2024-10-18 at 16.58.09.png
>
> Also, when editing the last line of a buffer, new text will appear after the diagnostic until no key is pressed for a
> few seconds:
> Screenshot 2024-10-18 at 17.04.57.png
>
> Reproduced with emacs -Q on emacs 30.0.91
Please show a full recipe for reproducing this issue, starting from
"emacs -Q", preferably without the need to install any packages not
included in Emacs.
Thanks.
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 16:08 ` Eli Zaretskii
@ 2024-10-18 16:24 ` Romain Ouabdelkader
2024-10-18 18:31 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-18 16:24 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 73863
[-- Attachment #1.1: Type: text/plain, Size: 1683 bytes --]
I can reproduce using pyright, starting with emacs -Q:
M-x eglot
(setq flymake-show-diagnostics-at-end-of-line t)
Using the following file:
```
def print_hello():
print("hello")
unknown_function
def another_function():
pass
```
You need to resize your window so that flymake diagnostics are displayed on
multiple lines:
[image: Screenshot 2024-10-18 at 18.23.28.png]
Place your cursor on the `unknown_function` line, and then press down. Your
cursor will endup at the end of the current line instead of the next line.
Please tell me if you need more detail.
Thank you.
On Fri, Oct 18, 2024 at 6:09 PM Eli Zaretskii <eliz@gnu.org> wrote:
> > From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> > Date: Fri, 18 Oct 2024 17:09:19 +0200
> >
> > I found some unexpected cursor movement near diagnostics with
> flymake-show-diagnostics-at-end-of-line
> > enabled.
> > When the cursor is on a line with a diagnostic, pressing down will move
> the cursor to the end of the current
> > line instead of the next line.
> >
> > For example, pressing down here:
> > Screenshot 2024-10-18 at 16.57.29.png
> > Will move the cursor at the end of the line:
> > Screenshot 2024-10-18 at 16.58.09.png
> >
> > Also, when editing the last line of a buffer, new text will appear after
> the diagnostic until no key is pressed for a
> > few seconds:
> > Screenshot 2024-10-18 at 17.04.57.png
> >
> > Reproduced with emacs -Q on emacs 30.0.91
>
> Please show a full recipe for reproducing this issue, starting from
> "emacs -Q", preferably without the need to install any packages not
> included in Emacs.
>
> Thanks.
>
[-- Attachment #1.2: Type: text/html, Size: 2399 bytes --]
[-- Attachment #2: Screenshot 2024-10-18 at 18.23.28.png --]
[-- Type: image/png, Size: 134137 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 16:24 ` Romain Ouabdelkader
@ 2024-10-18 18:31 ` Eli Zaretskii
2024-10-18 19:10 ` Romain Ouabdelkader
2024-10-18 19:16 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 2 replies; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-18 18:31 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: 73863
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Fri, 18 Oct 2024 18:24:31 +0200
> Cc: 73863@debbugs.gnu.org
>
> I can reproduce using pyright, starting with emacs -Q:
Thanks, but could you possibly reproduce without any additional
external packages, such as pyright?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 18:31 ` Eli Zaretskii
@ 2024-10-18 19:10 ` Romain Ouabdelkader
2024-10-19 13:15 ` Eli Zaretskii
2024-10-18 19:16 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 1 reply; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-18 19:10 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 73863
[-- Attachment #1.1: Type: text/plain, Size: 879 bytes --]
I can reproduce the issue on a C source file with clangd:
emacs -Q
M-x eglot
(setq flymake-show-diagnostics-at-end-of-line t)
```
unknown_function
void func();
```
[image: Screenshot 2024-10-18 at 21.06.43.png]
I can also reproduce on a elisp file without using eglot or any additional
packages:
emacs -Q /tmp/test.el
M-x flymake-mode
(setq flymake-show-diagnostics-at-end-of-line t)
```
;;; test.el --- Test for flymake diagnostics -*- lexical-binding: t -*-
;;; Commentary:
;;; Test file
very_long_variable_name_to_make_flymake_diagnostics_on_multiple_line
;;; Code:
(provide 'test)
;;; test.el ends here
```
[image: Screenshot 2024-10-18 at 21.02.10.png]
Make sure that the diagnostic is displayed on multiple lines (resize your
window if necessary). Place your cursor on
`very_long_variable_name_to_make_flymake_diagnostics_on_multiple_line` and
then press down.
[-- Attachment #1.2: Type: text/html, Size: 1369 bytes --]
[-- Attachment #2: Screenshot 2024-10-18 at 21.02.10.png --]
[-- Type: image/png, Size: 124453 bytes --]
[-- Attachment #3: Screenshot 2024-10-18 at 21.06.43.png --]
[-- Type: image/png, Size: 35549 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 18:31 ` Eli Zaretskii
2024-10-18 19:10 ` Romain Ouabdelkader
@ 2024-10-18 19:16 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-18 19:25 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 1 reply; 32+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-18 19:16 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 73863, Romain Ouabdelkader
On Fri, 18 Oct 2024 21:31:58 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
>> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
>> Date: Fri, 18 Oct 2024 18:24:31 +0200
>> Cc: 73863@debbugs.gnu.org
>>
>> I can reproduce using pyright, starting with emacs -Q:
>
> Thanks, but could you possibly reproduce without any additional
> external packages, such as pyright?
I can reproduce the problem using the pylsp server (I don't have pyright
installed). If this is a problem that occurs only with eglot when
flymake displays diagnostics at the end of the line, is it even possible
to avoid using an external LSP server (since IIUC managing such a server
is what eglot is for and AFAIK no LSP servers are part of Emacs)?
Steve Berman
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 19:16 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-10-18 19:25 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 32+ messages in thread
From: Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-18 19:25 UTC (permalink / raw)
To: 73863; +Cc: eliz, romain.ouabdelkader
On Fri, 18 Oct 2024 21:16:44 +0200 Stephen Berman via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> wrote:
> On Fri, 18 Oct 2024 21:31:58 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
>
>>> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
>>> Date: Fri, 18 Oct 2024 18:24:31 +0200
>>> Cc: 73863@debbugs.gnu.org
>>>
>>> I can reproduce using pyright, starting with emacs -Q:
>>
>> Thanks, but could you possibly reproduce without any additional
>> external packages, such as pyright?
>
> I can reproduce the problem using the pylsp server (I don't have pyright
> installed). If this is a problem that occurs only with eglot when
> flymake displays diagnostics at the end of the line, is it even possible
> to avoid using an external LSP server (since IIUC managing such a server
> is what eglot is for and AFAIK no LSP servers are part of Emacs)?
Romain's latest followup, which I saw after posting my followup, answers
the question: eglot is not necessary, just flymake; I can also reproduce
the issue with his emacs-lisp-mode recipe.
Steve Berman
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-18 19:10 ` Romain Ouabdelkader
@ 2024-10-19 13:15 ` Eli Zaretskii
2024-10-19 13:41 ` Romain Ouabdelkader
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-19 13:15 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: 73863
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Fri, 18 Oct 2024 21:10:02 +0200
> Cc: 73863@debbugs.gnu.org
>
> I can reproduce the issue on a C source file with clangd:
>
> emacs -Q
> M-x eglot
> (setq flymake-show-diagnostics-at-end-of-line t)
>
> ```
> unknown_function
> void func();
> ```
> Screenshot 2024-10-18 at 21.06.43.png
>
> I can also reproduce on a elisp file without using eglot or any additional packages:
>
> emacs -Q /tmp/test.el
> M-x flymake-mode
> (setq flymake-show-diagnostics-at-end-of-line t)
>
> ```
> ;;; test.el --- Test for flymake diagnostics -*- lexical-binding: t -*-
> ;;; Commentary:
>
> ;;; Test file
>
> very_long_variable_name_to_make_flymake_diagnostics_on_multiple_line
>
> ;;; Code:
>
> (provide 'test)
> ;;; test.el ends here
> ```
>
> Screenshot 2024-10-18 at 21.02.10.png
>
> Make sure that the diagnostic is displayed on multiple lines (resize your window if necessary). Place your
> cursor on `very_long_variable_name_to_make_flymake_diagnostics_on_multiple_line` and then press down.
So this problem only happens when the window is not wide enough, and
the diagnostic wraps to the next screen line?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-19 13:15 ` Eli Zaretskii
@ 2024-10-19 13:41 ` Romain Ouabdelkader
2024-10-20 7:25 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-19 13:41 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 73863
[-- Attachment #1: Type: text/plain, Size: 218 bytes --]
>
> So this problem only happens when the window is not wide enough, and
> the diagnostic wraps to the next screen line?
>
Yes that's correct, this happens to me quite often when I have two windows
open side by side.
[-- Attachment #2: Type: text/html, Size: 432 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-19 13:41 ` Romain Ouabdelkader
@ 2024-10-20 7:25 ` Eli Zaretskii
2024-10-20 9:28 ` João Távora
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 7:25 UTC (permalink / raw)
To: Romain Ouabdelkader, João Távora; +Cc: 73863
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Sat, 19 Oct 2024 15:41:05 +0200
> Cc: 73863@debbugs.gnu.org
>
> So this problem only happens when the window is not wide enough, and
> the diagnostic wraps to the next screen line?
>
> Yes that's correct, this happens to me quite often when I have two windows open side by side.
This is actually what flymake.el requests the display engine to do: it
asks it to show the cursor on the first character of the diagnostic's
before-string:
(put-text-property 0 1 'cursor t summary)
So when you use C-n, Emacs moves point to the end of the
before-string, but the 'cursor' property tells it to show the cursor
on the first character of the before-string, which is on a previous
screen line. So the display engine obeys and shows the cursor there.
The following simple patch seems to give much better results. João,
is the code in question used by any Flymake feature other than this
new flymake-show-diagnostics-at-end-of-line option? If so, we'll
probably need some condition to move the 'cursor' property to end of
string (assuming you don't object to this solution).
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 9a6b62c..0ef1ed0 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -835,8 +835,12 @@ flymake--eol-overlay-summary
(1- (length diags)))
'face 'flymake-eol-information-face)))))
(t
- (mapconcat #'summarize diags " "))))))
- (put-text-property 0 1 'cursor t summary)
+ (mapconcat #'summarize diags " ")))))
+ (last-pos (1- (length summary))))
+ ;; Put the 'cursor' property on the last character of the summary,
+ ;; so that vertical-motion produces the expected results when the
+ ;; summary wraps to next screen lines.
+ (put-text-property last-pos (1+ last-pos) 'cursor t summary)
summary)))
(defun flymake--update-eol-overlays ()
^ permalink raw reply related [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 7:25 ` Eli Zaretskii
@ 2024-10-20 9:28 ` João Távora
2024-10-20 11:22 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: João Távora @ 2024-10-20 9:28 UTC (permalink / raw)
To: Eli Zaretskii, Spencer Baugh; +Cc: 73863, Romain Ouabdelkader
Flymake queries should be directed to Spencer Baugh
But if this fixes the user's problem and doesn't hurt anyone who does
have wide enough windows and on top of that sufficient testing is done,
I don't object to this solution. I don't know what that problem is. Does
the user want their cursor to show at the end of the intangible overlay?
If so, that's odd: I designed this feature to be as little intrusive as possible
i.e. so that turning it on has no other effect than some text appearing
at the end of line -- and only at the end of line. If there is little space, I
would say the right thing to do is to truncate, not wrap to the next line
To try and answer your question, I don't think it is used by other Flymake
parts (the function name hints at it: flymake--eol- means "end of line").
However, I advise to give it testing (with multiple diagnostics on one
line, for example). I remember trying many variations on these things
and each had its drawbacks. But possibly (probably?) I didn't test
this one. Anyway, do test this out with other flymake eol users and
consider the impact to users with wide enough windows: if there's no
impact I don't see why this wouldn't be acceptable. But that is for
Spencer or you to decide.
João
On Sun, Oct 20, 2024 at 8:25 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> > Date: Sat, 19 Oct 2024 15:41:05 +0200
> > Cc: 73863@debbugs.gnu.org
> >
> > So this problem only happens when the window is not wide enough, and
> > the diagnostic wraps to the next screen line?
> >
> > Yes that's correct, this happens to me quite often when I have two windows open side by side.
>
> This is actually what flymake.el requests the display engine to do: it
> asks it to show the cursor on the first character of the diagnostic's
> before-string:
>
> (put-text-property 0 1 'cursor t summary)
>
> So when you use C-n, Emacs moves point to the end of the
> before-string, but the 'cursor' property tells it to show the cursor
> on the first character of the before-string, which is on a previous
> screen line. So the display engine obeys and shows the cursor there.
>
> The following simple patch seems to give much better results. João,
> is the code in question used by any Flymake feature other than this
> new flymake-show-diagnostics-at-end-of-line option? If so, we'll
> probably need some condition to move the 'cursor' property to end of
> string (assuming you don't object to this solution).
>
> diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
> index 9a6b62c..0ef1ed0 100644
> --- a/lisp/progmodes/flymake.el
> +++ b/lisp/progmodes/flymake.el
> @@ -835,8 +835,12 @@ flymake--eol-overlay-summary
> (1- (length diags)))
> 'face 'flymake-eol-information-face)))))
> (t
> - (mapconcat #'summarize diags " "))))))
> - (put-text-property 0 1 'cursor t summary)
> + (mapconcat #'summarize diags " ")))))
> + (last-pos (1- (length summary))))
> + ;; Put the 'cursor' property on the last character of the summary,
> + ;; so that vertical-motion produces the expected results when the
> + ;; summary wraps to next screen lines.
> + (put-text-property last-pos (1+ last-pos) 'cursor t summary)
> summary)))
>
> (defun flymake--update-eol-overlays ()
--
João Távora
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 9:28 ` João Távora
@ 2024-10-20 11:22 ` Eli Zaretskii
2024-10-20 11:38 ` João Távora
2024-10-27 10:56 ` Eli Zaretskii
0 siblings, 2 replies; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 11:22 UTC (permalink / raw)
To: sbaugh, João Távora; +Cc: 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 10:28:50 +0100
> Cc: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>, 73863@debbugs.gnu.org
>
> Flymake queries should be directed to Spencer Baugh
Sorry, I keep forgetting that.
> But if this fixes the user's problem and doesn't hurt anyone who does
> have wide enough windows and on top of that sufficient testing is done,
> I don't object to this solution. I don't know what that problem is. Does
> the user want their cursor to show at the end of the intangible overlay?
> If so, that's odd: I designed this feature to be as little intrusive as possible
> i.e. so that turning it on has no other effect than some text appearing
> at the end of line -- and only at the end of line. If there is little space, I
> would say the right thing to do is to truncate, not wrap to the next line
When the diagnostic overlay wraps to the next screen line, it is
strange to see the cursor at the beginning of the diagnostic after
C-n, since users generally expect C-n to move to the next screen line.
But if we decide that the current behavior is more reasonable, and
this is just a matter of users getting used to it, I don't mind
leaving the current behavior alone.
> To try and answer your question, I don't think it is used by other Flymake
> parts (the function name hints at it: flymake--eol- means "end of line").
> However, I advise to give it testing (with multiple diagnostics on one
> line, for example). I remember trying many variations on these things
> and each had its drawbacks. But possibly (probably?) I didn't test
> this one. Anyway, do test this out with other flymake eol users and
> consider the impact to users with wide enough windows: if there's no
> impact I don't see why this wouldn't be acceptable. But that is for
> Spencer or you to decide.
Thanks.
Spencer, what say you?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 11:22 ` Eli Zaretskii
@ 2024-10-20 11:38 ` João Távora
2024-10-20 11:49 ` Eli Zaretskii
2024-10-27 10:56 ` Eli Zaretskii
1 sibling, 1 reply; 32+ messages in thread
From: João Távora @ 2024-10-20 11:38 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 12:22 PM Eli Zaretskii <eliz@gnu.org> wrote:
> When the diagnostic overlay wraps to the next screen line, it is
> strange to see the cursor at the beginning of the diagnostic after
> C-n, since users generally expect C-n to move to the next screen line.
That may be so, and probably it is so. But I'd make sure to keep the
current behaviour (or at least unsurprising behaviour) when the
diagnostic(s) overlay (overlays?) _doesn't_ (don't?) wrap to the next
screen line.
João
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 11:38 ` João Távora
@ 2024-10-20 11:49 ` Eli Zaretskii
2024-10-20 14:42 ` João Távora
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 11:49 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 12:38:33 +0100
> Cc: sbaugh@janestreet.com, romain.ouabdelkader@gmail.com,
> 73863@debbugs.gnu.org
>
> On Sun, Oct 20, 2024 at 12:22 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > When the diagnostic overlay wraps to the next screen line, it is
> > strange to see the cursor at the beginning of the diagnostic after
> > C-n, since users generally expect C-n to move to the next screen line.
>
> That may be so, and probably it is so. But I'd make sure to keep the
> current behaviour (or at least unsurprising behaviour) when the
> diagnostic(s) overlay (overlays?) _doesn't_ (don't?) wrap to the next
> screen line.
That would mean a non-trivial code in flymake.el, because it would
need to decide in advance whether the diagnostic will fit on the same
screen line. Moreover, if the user then makes the window wider or
narrower, the cursor will jump between two screen positions, something
that I think is highly undesirable (and will look like a bug).
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 11:49 ` Eli Zaretskii
@ 2024-10-20 14:42 ` João Távora
2024-10-20 15:01 ` Romain Ouabdelkader
2024-10-20 15:31 ` Eli Zaretskii
0 siblings, 2 replies; 32+ messages in thread
From: João Távora @ 2024-10-20 14:42 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 12:49 PM Eli Zaretskii <eliz@gnu.org> wrote:
> That would mean a non-trivial code in flymake.el, because it would
> need to decide in advance whether the diagnostic will fit on the same
> screen line. Moreover, if the user then makes the window wider or
> narrower, the cursor will jump between two screen positions, something
> that I think is highly undesirable (and will look like a bug).
Yes, you're right, but the solution you propose is arguably harmful for
the current case. If I'm at line n, column c and I move down to line n+1 with
less than c columns, and that line n+1 has a wrapping diagnostic at eol, I now
see that a single 'down' makes the cursor jump multiple screen lines
to the end
of said diagnostic, and that's not really pretty either. And even
closer to this
report's scenario, your solution only makes some sense if the overlays happen
to only wrap one line: it ceases to make sense in very narrow windows
where the overlays wrap multiple lines.
IMO, wrapping these annotations is more distracting than useful.
They're meant to be minimally intrusive auxiliary visual aids, and causing
screen line increase violates that. Note that the full diagnostic info can be
viewed via eldoc in the echo area for example, where there are options to
control length and jumping (and where window width isn't an issue).
So I advise to turn on line truncation when using them, or to live with the
current idiosyncrasy instead of another equivalent (IMO slightly worse)
idiosyncrasy.
João
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 14:42 ` João Távora
@ 2024-10-20 15:01 ` Romain Ouabdelkader
2024-10-20 15:49 ` Eli Zaretskii
2024-11-12 21:38 ` Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-20 15:31 ` Eli Zaretskii
1 sibling, 2 replies; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-20 15:01 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, Eli Zaretskii, 73863
[-- Attachment #1.1: Type: text/plain, Size: 2534 bytes --]
Sorry, I realized I wasn't clear about the behavior I was expecting.
I would expect the cursor behavior to remain consistent whether diagnostics
are present or not, especially since diagnostics can appear and disappear
during editing.
For example:
[image: Screenshot 2024-10-20 at 16.56.48.png]
Here, when press C-n once, I expect the cursor to go here:
[image: Screenshot 2024-10-20 at 16.57.59.png]
I.e. the behavior would be the same as if there were no diagnostics in the
buffer.
I'm not sure if that's actually feasible or if there is an issue with this
behavior.
I tried your patch but it makes the cursor go on the diagnostic which i
find surprising, I believe the cursor should not be able to move into a
diagnostic:
[image: Screenshot 2024-10-20 at 17.00.18.png]
What do you think?
On Sun, Oct 20, 2024 at 4:42 PM João Távora <joaotavora@gmail.com> wrote:
> On Sun, Oct 20, 2024 at 12:49 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > That would mean a non-trivial code in flymake.el, because it would
> > need to decide in advance whether the diagnostic will fit on the same
> > screen line. Moreover, if the user then makes the window wider or
> > narrower, the cursor will jump between two screen positions, something
> > that I think is highly undesirable (and will look like a bug).
>
> Yes, you're right, but the solution you propose is arguably harmful for
> the current case. If I'm at line n, column c and I move down to line n+1
> with
> less than c columns, and that line n+1 has a wrapping diagnostic at eol, I
> now
> see that a single 'down' makes the cursor jump multiple screen lines
> to the end
> of said diagnostic, and that's not really pretty either. And even
> closer to this
> report's scenario, your solution only makes some sense if the overlays
> happen
> to only wrap one line: it ceases to make sense in very narrow windows
> where the overlays wrap multiple lines.
>
> IMO, wrapping these annotations is more distracting than useful.
> They're meant to be minimally intrusive auxiliary visual aids, and causing
> screen line increase violates that. Note that the full diagnostic info
> can be
> viewed via eldoc in the echo area for example, where there are options to
> control length and jumping (and where window width isn't an issue).
>
> So I advise to turn on line truncation when using them, or to live with the
> current idiosyncrasy instead of another equivalent (IMO slightly worse)
> idiosyncrasy.
>
> João
>
[-- Attachment #1.2: Type: text/html, Size: 3187 bytes --]
[-- Attachment #2: Screenshot 2024-10-20 at 16.56.48.png --]
[-- Type: image/png, Size: 40336 bytes --]
[-- Attachment #3: Screenshot 2024-10-20 at 16.57.59.png --]
[-- Type: image/png, Size: 39434 bytes --]
[-- Attachment #4: Screenshot 2024-10-20 at 17.00.18.png --]
[-- Type: image/png, Size: 36838 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 14:42 ` João Távora
2024-10-20 15:01 ` Romain Ouabdelkader
@ 2024-10-20 15:31 ` Eli Zaretskii
2024-10-20 15:39 ` João Távora
1 sibling, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 15:31 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 15:42:15 +0100
> Cc: sbaugh@janestreet.com, romain.ouabdelkader@gmail.com,
> 73863@debbugs.gnu.org
>
> On Sun, Oct 20, 2024 at 12:49 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > That would mean a non-trivial code in flymake.el, because it would
> > need to decide in advance whether the diagnostic will fit on the same
> > screen line. Moreover, if the user then makes the window wider or
> > narrower, the cursor will jump between two screen positions, something
> > that I think is highly undesirable (and will look like a bug).
>
> Yes, you're right, but the solution you propose is arguably harmful for
> the current case. If I'm at line n, column c and I move down to line n+1 with
> less than c columns, and that line n+1 has a wrapping diagnostic at eol, I now
> see that a single 'down' makes the cursor jump multiple screen lines
> to the end
> of said diagnostic, and that's not really pretty either. And even
> closer to this
> report's scenario, your solution only makes some sense if the overlays happen
> to only wrap one line: it ceases to make sense in very narrow windows
> where the overlays wrap multiple lines.
Emacs can only display the cursor either before or after the overlay
string. Anything else requires the 'cursor' property to be placed
dynamically, depending on what is column c in your scenario, and I
don't think it's reasonable to require flymake.el to jump through such
hoops.
> IMO, wrapping these annotations is more distracting than useful.
> They're meant to be minimally intrusive auxiliary visual aids, and causing
> screen line increase violates that. Note that the full diagnostic info can be
> viewed via eldoc in the echo area for example, where there are options to
> control length and jumping (and where window width isn't an issue).
>
> So I advise to turn on line truncation when using them, or to live with the
> current idiosyncrasy instead of another equivalent (IMO slightly worse)
> idiosyncrasy.
That is also fine by me. But note that the code itself could have
lines that wrap, and in that case, line truncation will make some of
the code invisible until horizontally-scrolled into view.
So it's a difficult situation. Was displaying the diagnostic in a
tooltip ever considered as the alternative to this past-EOL display?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 15:31 ` Eli Zaretskii
@ 2024-10-20 15:39 ` João Távora
2024-10-20 16:30 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: João Távora @ 2024-10-20 15:39 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 4:31 PM Eli Zaretskii <eliz@gnu.org> wrote:
> So it's a difficult situation. Was displaying the diagnostic in a
> tooltip ever considered as the alternative to this past-EOL display?
No, not as a viable alternative since it doesn't work in non-GUI emacs
afaik. i was really trying to emulate what I think is originally a neovim
feature (that seems to work exactly like a tooltip but in text mode).
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 15:01 ` Romain Ouabdelkader
@ 2024-10-20 15:49 ` Eli Zaretskii
2024-10-20 16:23 ` Eli Zaretskii
2024-11-12 21:38 ` Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 15:49 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: sbaugh, 73863, joaotavora
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Sun, 20 Oct 2024 17:01:44 +0200
> Cc: Eli Zaretskii <eliz@gnu.org>, sbaugh@janestreet.com, 73863@debbugs.gnu.org
>
> Sorry, I realized I wasn't clear about the behavior I was expecting.
>
> I would expect the cursor behavior to remain consistent whether diagnostics are present or not, especially
> since diagnostics can appear and disappear during editing.
That's not possible, because the diagnostic is displayed using an
overlay string, and Emacs cannot show a cursor inside such a string
unless a Lisp program tells it exactly where to put the cursor. IOW,
for the cursor-positioning purposes, overlay strings are considered as
indivisible chunks of display.
> For example:
> Screenshot 2024-10-20 at 16.56.48.png
> Here, when press C-n once, I expect the cursor to go here:
> Screenshot 2024-10-20 at 16.57.59.png
Under the default value of line-move-visual, this is not possible:
Emacs is required to show the cursor inside the next _screen_ line,
not the next _logical_ line. Compare that with the situation where
the diagnostic string is part of buffer text -- in that case you'd
want the cursor to end up inside the next screen line, which is
wrapped from the long line starting with "unknown_function".
> I.e. the behavior would be the same as if there were no diagnostics in the buffer.
> I'm not sure if that's actually feasible or if there is an issue with this behavior.
It isn't feasible.
> I tried your patch but it makes the cursor go on the diagnostic which i find surprising, I believe the cursor
> should not be able to move into a diagnostic:
> Screenshot 2024-10-20 at 17.00.18.png
We could have the cursor after the diagnostic, if we don't put the
'cursor' property at all.
So these are the possible solutions for this situation:
. don't change anything and live with the minor irregularity in the
cursor positioning in what I consider to be rare cases
- variation: turn on truncate-lines in such cases
. don't put the 'cursor' property on the diagnostic, in which case
C-n will place the cursor after the end of the diagnostic on the
screen line where the diagnostic ends
. put the 'cursor' property at the last character of the diagnostic
string, and have it displayed there
. calculate the character on which to put the 'cursor' property
dynamically using some convoluted logic
. implement display of diagnostics in a tooltip instead
Any other suggestions?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 15:49 ` Eli Zaretskii
@ 2024-10-20 16:23 ` Eli Zaretskii
0 siblings, 0 replies; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 16:23 UTC (permalink / raw)
To: romain.ouabdelkader; +Cc: sbaugh, 73863, joaotavora
> Cc: sbaugh@janestreet.com, 73863@debbugs.gnu.org, joaotavora@gmail.com
> Date: Sun, 20 Oct 2024 18:49:27 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> > For example:
> > Screenshot 2024-10-20 at 16.56.48.png
> > Here, when press C-n once, I expect the cursor to go here:
> > Screenshot 2024-10-20 at 16.57.59.png
>
> Under the default value of line-move-visual, this is not possible:
Unless, of course, Flymake redefines C-n and C-p to skip the screen
lines that are occupied in their entirety by a diagnostic overlay.
When I said "not possible" I had in mind the default behavior of C-n
and C-p when overlay strings are around.
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 15:39 ` João Távora
@ 2024-10-20 16:30 ` Eli Zaretskii
2024-10-20 16:58 ` João Távora
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 16:30 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 16:39:02 +0100
> Cc: sbaugh@janestreet.com, romain.ouabdelkader@gmail.com,
> 73863@debbugs.gnu.org
>
> On Sun, Oct 20, 2024 at 4:31 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > So it's a difficult situation. Was displaying the diagnostic in a
> > tooltip ever considered as the alternative to this past-EOL display?
>
> No, not as a viable alternative since it doesn't work in non-GUI emacs
> afaik. i was really trying to emulate what I think is originally a neovim
> feature (that seems to work exactly like a tooltip but in text mode).
The advantage of a tooltip is that its width is not limited by the
window. If neovim shows this in text mode, how does it deal with
too-long diagnostics?
Another alternative is to display the diagnostic as buffer text, but
make it read-only. This should solve the cursor-movement issues, I
think. Do you see any obstacles for this alternative?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 16:30 ` Eli Zaretskii
@ 2024-10-20 16:58 ` João Távora
2024-10-20 17:50 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: João Távora @ 2024-10-20 16:58 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 5:30 PM Eli Zaretskii <eliz@gnu.org> wrote:
> The advantage of a tooltip is that its width is not limited by the
> window. If neovim shows this in text mode, how does it deal with
> too-long diagnostics?
No idea, but if I were to guess I think it has a completely different
display engine that allows text-mode tooltips that behave like
our window system tooptips (and likely get truncated)
> Another alternative is to display the diagnostic as buffer text, but
> make it read-only. This should solve the cursor-movement issues, I
> think. Do you see any obstacles for this alternative?
So would you change the buffer contents for displaying
diagnostics, then somehow quickly undo and redo that on save
and whenever the buffer text is needed, say, for sending to LSP?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 16:58 ` João Távora
@ 2024-10-20 17:50 ` Eli Zaretskii
2024-10-20 18:05 ` João Távora
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 17:50 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 17:58:41 +0100
> Cc: sbaugh@janestreet.com, romain.ouabdelkader@gmail.com,
> 73863@debbugs.gnu.org
>
> On Sun, Oct 20, 2024 at 5:30 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > Another alternative is to display the diagnostic as buffer text, but
> > make it read-only. This should solve the cursor-movement issues, I
> > think. Do you see any obstacles for this alternative?
>
> So would you change the buffer contents for displaying
> diagnostics, then somehow quickly undo and redo that on save
> and whenever the buffer text is needed, say, for sending to LSP?
Something like that, yes.
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 17:50 ` Eli Zaretskii
@ 2024-10-20 18:05 ` João Távora
2024-10-20 18:28 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: João Távora @ 2024-10-20 18:05 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 6:51 PM Eli Zaretskii <eliz@gnu.org> wrote:
> Something like that, yes.
Sounds absolutely hellish to implement. Even the most basic isearch
need to be aware of that somehow. Anything that works with buffer text
in Emacs would have to somehow cause that undo/redo.
João Távora
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 18:05 ` João Távora
@ 2024-10-20 18:28 ` Eli Zaretskii
2024-10-20 19:18 ` João Távora
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-20 18:28 UTC (permalink / raw)
To: João Távora; +Cc: sbaugh, 73863, romain.ouabdelkader
> From: João Távora <joaotavora@gmail.com>
> Date: Sun, 20 Oct 2024 19:05:56 +0100
> Cc: sbaugh@janestreet.com, romain.ouabdelkader@gmail.com,
> 73863@debbugs.gnu.org
>
> On Sun, Oct 20, 2024 at 6:51 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > Something like that, yes.
>
> Sounds absolutely hellish to implement.
I wouldn't be so sure. The infrastructure for, for example, removing
portions of buffer text when saving to a file already exists, and we
use it in some modes.
> Even the most basic isearch need to be aware of that somehow.
I'm not sure. Why shouldn't Isearch find matches in the diagnostics?
Searching an Office document does find matches in comments, for
example.
> Anything that works with buffer text in Emacs would have to somehow
> cause that undo/redo.
Not anything, IMO.
Anyway, I'm not going to work on this, so it's an idea, no more, no
less. My point is that all the tricky display issues are completely
gone once we use buffer text. So an additional effort in Lisp
programming could be justified.
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 18:28 ` Eli Zaretskii
@ 2024-10-20 19:18 ` João Távora
0 siblings, 0 replies; 32+ messages in thread
From: João Távora @ 2024-10-20 19:18 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, romain.ouabdelkader
On Sun, Oct 20, 2024 at 7:28 PM Eli Zaretskii <eliz@gnu.org> wrote:
> I'm not sure. Why shouldn't Isearch find matches in the diagnostics?
> Searching an Office document does find matches in comments, for
> example.
A comment and a diagnostic are not the same. Diagnostics change
in a volatile manner just by changing some piece of code somewhere
in the buffer, comments don't.
> > Anything that works with buffer text in Emacs would have to somehow
> > cause that undo/redo.
>
> Not anything, IMO.
Indentation rules, sexp navigation, any user code that uses buffer-string
> Anyway, I'm not going to work on this
Good call!
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 11:22 ` Eli Zaretskii
2024-10-20 11:38 ` João Távora
@ 2024-10-27 10:56 ` Eli Zaretskii
2024-10-30 23:57 ` Romain Ouabdelkader
1 sibling, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-27 10:56 UTC (permalink / raw)
To: sbaugh; +Cc: 73863, joaotavora, romain.ouabdelkader
Ping!
> Cc: 73863@debbugs.gnu.org, romain.ouabdelkader@gmail.com
> Date: Sun, 20 Oct 2024 14:22:24 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> > From: João Távora <joaotavora@gmail.com>
> > Date: Sun, 20 Oct 2024 10:28:50 +0100
> > Cc: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>, 73863@debbugs.gnu.org
> >
> > Flymake queries should be directed to Spencer Baugh
>
> Sorry, I keep forgetting that.
>
> > But if this fixes the user's problem and doesn't hurt anyone who does
> > have wide enough windows and on top of that sufficient testing is done,
> > I don't object to this solution. I don't know what that problem is. Does
> > the user want their cursor to show at the end of the intangible overlay?
> > If so, that's odd: I designed this feature to be as little intrusive as possible
> > i.e. so that turning it on has no other effect than some text appearing
> > at the end of line -- and only at the end of line. If there is little space, I
> > would say the right thing to do is to truncate, not wrap to the next line
>
> When the diagnostic overlay wraps to the next screen line, it is
> strange to see the cursor at the beginning of the diagnostic after
> C-n, since users generally expect C-n to move to the next screen line.
>
> But if we decide that the current behavior is more reasonable, and
> this is just a matter of users getting used to it, I don't mind
> leaving the current behavior alone.
>
> > To try and answer your question, I don't think it is used by other Flymake
> > parts (the function name hints at it: flymake--eol- means "end of line").
> > However, I advise to give it testing (with multiple diagnostics on one
> > line, for example). I remember trying many variations on these things
> > and each had its drawbacks. But possibly (probably?) I didn't test
> > this one. Anyway, do test this out with other flymake eol users and
> > consider the impact to users with wide enough windows: if there's no
> > impact I don't see why this wouldn't be acceptable. But that is for
> > Spencer or you to decide.
>
> Thanks.
>
> Spencer, what say you?
>
>
>
>
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-27 10:56 ` Eli Zaretskii
@ 2024-10-30 23:57 ` Romain Ouabdelkader
2024-10-31 7:40 ` Eli Zaretskii
0 siblings, 1 reply; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-30 23:57 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, joaotavora
[-- Attachment #1: Type: text/plain, Size: 2919 bytes --]
I don't use neovim but from what I have seen from screenshots, the
diagnostics are truncated if they are larger than the window.
Maybe there could be a way to have diagnostics truncated by default and
only show the full diagnostics when the cursor is in the error line. But
I'm not sure how that would work.
For myself, I'll use sideline (https://github.com/emacs-sideline/sideline)
instead of flymake-show-diagnostics-at-end-of-line.
After thinking about it, I actually prefer to only view diagnostics for the
current line (which is what sideline can do)
On Sun, Oct 27, 2024 at 11:56 AM Eli Zaretskii <eliz@gnu.org> wrote:
> Ping!
>
> > Cc: 73863@debbugs.gnu.org, romain.ouabdelkader@gmail.com
> > Date: Sun, 20 Oct 2024 14:22:24 +0300
> > From: Eli Zaretskii <eliz@gnu.org>
> >
> > > From: João Távora <joaotavora@gmail.com>
> > > Date: Sun, 20 Oct 2024 10:28:50 +0100
> > > Cc: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>,
> 73863@debbugs.gnu.org
> > >
> > > Flymake queries should be directed to Spencer Baugh
> >
> > Sorry, I keep forgetting that.
> >
> > > But if this fixes the user's problem and doesn't hurt anyone who does
> > > have wide enough windows and on top of that sufficient testing is done,
> > > I don't object to this solution. I don't know what that problem is.
> Does
> > > the user want their cursor to show at the end of the intangible
> overlay?
> > > If so, that's odd: I designed this feature to be as little intrusive
> as possible
> > > i.e. so that turning it on has no other effect than some text appearing
> > > at the end of line -- and only at the end of line. If there is little
> space, I
> > > would say the right thing to do is to truncate, not wrap to the next
> line
> >
> > When the diagnostic overlay wraps to the next screen line, it is
> > strange to see the cursor at the beginning of the diagnostic after
> > C-n, since users generally expect C-n to move to the next screen line.
> >
> > But if we decide that the current behavior is more reasonable, and
> > this is just a matter of users getting used to it, I don't mind
> > leaving the current behavior alone.
> >
> > > To try and answer your question, I don't think it is used by other
> Flymake
> > > parts (the function name hints at it: flymake--eol- means "end of
> line").
> > > However, I advise to give it testing (with multiple diagnostics on one
> > > line, for example). I remember trying many variations on these things
> > > and each had its drawbacks. But possibly (probably?) I didn't test
> > > this one. Anyway, do test this out with other flymake eol users and
> > > consider the impact to users with wide enough windows: if there's no
> > > impact I don't see why this wouldn't be acceptable. But that is for
> > > Spencer or you to decide.
> >
> > Thanks.
> >
> > Spencer, what say you?
> >
> >
> >
> >
>
[-- Attachment #2: Type: text/html, Size: 4045 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-30 23:57 ` Romain Ouabdelkader
@ 2024-10-31 7:40 ` Eli Zaretskii
2024-10-31 19:18 ` Romain Ouabdelkader
0 siblings, 1 reply; 32+ messages in thread
From: Eli Zaretskii @ 2024-10-31 7:40 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: sbaugh, 73863, joaotavora
> From: Romain Ouabdelkader <romain.ouabdelkader@gmail.com>
> Date: Thu, 31 Oct 2024 00:57:20 +0100
> Cc: sbaugh@janestreet.com, joaotavora@gmail.com, 73863@debbugs.gnu.org
>
> I don't use neovim but from what I have seen from screenshots, the diagnostics are truncated if they are
> larger than the window.
Is this really better than the minor annoyance we have now?
If it's better, we could add a feature whereby an overlay can request
its text to be truncated at the window edge, even if truncate-lines is
not in effect. But good UI practices would then require us to have a
tooltip with the full text on the overlay, I think, since otherwise
the user will not be able to see the full text, and the important part
might be at the end.
> Maybe there could be a way to have diagnostics truncated by default and only show the full diagnostics
> when the cursor is in the error line. But I'm not sure how that would work.
This is much harder to implement (unless Flymake itself implements
this, i.e., it truncates the overlay text when point is on another
line). It will also cause an annoying vertical movement of the rest
of buffer text when cursor moves.
> For myself, I'll use sideline (https://github.com/emacs-sideline/sideline) instead of
> flymake-show-diagnostics-at-end-of-line.
It is not clear to me what that does, but it looks like it displays
the diagnostic on a different screen line, not on the line to which
the diagnostic belongs?
> After thinking about it, I actually prefer to only view diagnostics for the current line (which is what sideline can
> do)
That is strange to hear, because it doesn't allow to have an overview
of the diagnostics at a glance.
Spencer, any comments or suggestions?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-31 7:40 ` Eli Zaretskii
@ 2024-10-31 19:18 ` Romain Ouabdelkader
0 siblings, 0 replies; 32+ messages in thread
From: Romain Ouabdelkader @ 2024-10-31 19:18 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: sbaugh, 73863, joaotavora
[-- Attachment #1: Type: text/plain, Size: 471 bytes --]
> It is not clear to me what that does, but it looks like it displays
> the diagnostic on a different screen line, not on the line to which
> the diagnostic belongs?
>
Yes exactly. It shows diagnostics on different screen lines, based on
where space is available.
> That is strange to hear, because it doesn't allow to have an overview
> of the diagnostics at a glance.
>
Yeah I'm not advocating for this behavior to be included in emacs, just
sharing my experience.
[-- Attachment #2: Type: text/html, Size: 896 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-10-20 15:01 ` Romain Ouabdelkader
2024-10-20 15:49 ` Eli Zaretskii
@ 2024-11-12 21:38 ` Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-11-13 14:45 ` Eli Zaretskii
1 sibling, 1 reply; 32+ messages in thread
From: Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-11-12 21:38 UTC (permalink / raw)
To: Romain Ouabdelkader; +Cc: Eli Zaretskii, 73863, João Távora
Romain Ouabdelkader <romain.ouabdelkader@gmail.com> writes:
> Sorry, I realized I wasn't clear about the behavior I was expecting.
>
> I would expect the cursor behavior to remain consistent whether diagnostics are present or not, especially since diagnostics can
> appear and disappear during editing.
>
> For example:
> Screenshot 2024-10-20 at 16.56.48.png
> Here, when press C-n once, I expect the cursor to go here:
> Screenshot 2024-10-20 at 16.57.59.png
>
> I.e. the behavior would be the same as if there were no diagnostics in the buffer.
> I'm not sure if that's actually feasible or if there is an issue with this behavior.
I think that's indeed the ideal.
> I tried your patch but it makes the cursor go on the diagnostic which i find surprising, I believe the cursor should not be able to
> move into a diagnostic:
> Screenshot 2024-10-20 at 17.00.18.png
>
> What do you think?
I think this behavior is bad, so I don't think this is a good patch.
Note especially that C-e puts point after the diagnostic, then DEL
deletes characters before the diagnostic! Unexpected and confusing IMO.
That's equivalent to the behavior without the 'cursor property: point
goes to the end of the displayed diagnostic, both on C-e and C-n.
There are two conflicting issues here:
A. Having "point is at EOL" be displayed as "the cursor is after the
diagnostic" is unacceptable because it means DEL deletes characters at
a distance, and other similar bad issues.
So we want "point is at EOL" to be displayed as "the cursor is before
the diagnostic", which the existing 'cursor property achieves.
B. (vertical-motion 1) tries to move the cursor to after the diagnostic,
since that's the next screen line. Then the cursor property displays
the cursor back to before the diagnostic. Since that ends up moving
point to the end of the current line, which is the same visual line,
this is unexpected.
A is more important than B, so if we want to fix B we can't break A.
Here's a self-contained demonstration without flymake:
(with-current-buffer (get-buffer-create "*overlay-demonstration*")
(erase-buffer)
(remove-overlays)
(insert (make-string 80 ?x))
(save-excursion
(newline)
(insert (make-string 80 ?y)))
(let ((ol (make-overlay (point) (1+ (point))))
(s (propertize (make-string 80 ?s) 'face 'warning)))
(put-text-property 0 1 'cursor t s)
(overlay-put ol 'before-string s))
(delete-other-windows)
(let ((win (split-window-right -62)))
(set-window-buffer win (current-buffer)))
(other-window 1))
If you run this then you'll observe behavior B when moving with C-n and
C-p.
There's actually another symmetric issue to B: after moving to the end
of the line with C-e, if you hit C-p that moves to the start of the
current screen line, instead of moving to the previous screen line.
This is because vertical-motion acts as if the cursor is on screen line
3, when it's actually on screen line 2 because of the 'cursor property.
Arguably this is a bug in vertical-motion: if you run (vertical-motion
1) or (vertical-motion -1) in the appropriate places, it returns 1 or
-1, claiming that it moved by a screen line even though it actually
stayed on the same screen line.
I'm not sure how to fix this. IMO, vertical-motion should try harder to
move by screen lines.
In the C-p case, there's an obviously correct thing to do: move to the
same column of the previous screen line. But for some reason,
vertical-motion doesn't do it: it stays on the same screen line. Maybe
fixing this should start there?
^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line
2024-11-12 21:38 ` Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-11-13 14:45 ` Eli Zaretskii
0 siblings, 0 replies; 32+ messages in thread
From: Eli Zaretskii @ 2024-11-13 14:45 UTC (permalink / raw)
To: Spencer Baugh; +Cc: 73863, joaotavora, romain.ouabdelkader
> From: Spencer Baugh <sbaugh@janestreet.com>
> Cc: João Távora <joaotavora@gmail.com>, Eli Zaretskii
> <eliz@gnu.org>,
> 73863@debbugs.gnu.org
> Date: Tue, 12 Nov 2024 16:38:43 -0500
>
> There's actually another symmetric issue to B: after moving to the end
> of the line with C-e, if you hit C-p that moves to the start of the
> current screen line, instead of moving to the previous screen line.
> This is because vertical-motion acts as if the cursor is on screen line
> 3, when it's actually on screen line 2 because of the 'cursor property.
>
> Arguably this is a bug in vertical-motion: if you run (vertical-motion
> 1) or (vertical-motion -1) in the appropriate places, it returns 1 or
> -1, claiming that it moved by a screen line even though it actually
> stayed on the same screen line.
No, it isn't a bug: vertical-motion works with point, not with the
screen position of the cursor. And point is on the next screen line,
because the diagnostic overlay "covers" the newline at EOL.
> I'm not sure how to fix this. IMO, vertical-motion should try harder to
> move by screen lines.
Feel free to teach vertical-motion about the 'cursor' property. I
don't plan on doing that any time soon, having spent numerous hours on
making that function cater to quite a few complications.
> In the C-p case, there's an obviously correct thing to do: move to the
> same column of the previous screen line. But for some reason,
> vertical-motion doesn't do it: it stays on the same screen line. Maybe
> fixing this should start there?
See above: vertical-motion works perfectly correctly in that case, you
are just tricked by the fact that the 'cursor' property forces us to
show the cursor not where point is.
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2024-11-13 14:45 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-18 15:09 bug#73863: 30.0.91; Unexpected cursor movement with flymake-show-diagnostics-at-end-of-line Romain Ouabdelkader
2024-10-18 16:08 ` Eli Zaretskii
2024-10-18 16:24 ` Romain Ouabdelkader
2024-10-18 18:31 ` Eli Zaretskii
2024-10-18 19:10 ` Romain Ouabdelkader
2024-10-19 13:15 ` Eli Zaretskii
2024-10-19 13:41 ` Romain Ouabdelkader
2024-10-20 7:25 ` Eli Zaretskii
2024-10-20 9:28 ` João Távora
2024-10-20 11:22 ` Eli Zaretskii
2024-10-20 11:38 ` João Távora
2024-10-20 11:49 ` Eli Zaretskii
2024-10-20 14:42 ` João Távora
2024-10-20 15:01 ` Romain Ouabdelkader
2024-10-20 15:49 ` Eli Zaretskii
2024-10-20 16:23 ` Eli Zaretskii
2024-11-12 21:38 ` Spencer Baugh via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-11-13 14:45 ` Eli Zaretskii
2024-10-20 15:31 ` Eli Zaretskii
2024-10-20 15:39 ` João Távora
2024-10-20 16:30 ` Eli Zaretskii
2024-10-20 16:58 ` João Távora
2024-10-20 17:50 ` Eli Zaretskii
2024-10-20 18:05 ` João Távora
2024-10-20 18:28 ` Eli Zaretskii
2024-10-20 19:18 ` João Távora
2024-10-27 10:56 ` Eli Zaretskii
2024-10-30 23:57 ` Romain Ouabdelkader
2024-10-31 7:40 ` Eli Zaretskii
2024-10-31 19:18 ` Romain Ouabdelkader
2024-10-18 19:16 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-18 19:25 ` Stephen Berman via Bug reports for GNU Emacs, the Swiss army knife of text editors
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).