* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link @ 2024-12-31 5:37 Visuwesh 2025-01-05 15:17 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Visuwesh @ 2024-12-31 5:37 UTC (permalink / raw) To: 75219 When the point is over a character with a keymap that has `follow-link', mode-line mouse-1 binding is translated to mode-line mouse-2 binding. To reproduce, 1. emacs -Q 2. M-: (define-key mode-line-buffer-identification-keymap [mode-line mouse-2] #'mouse-buffer-menu) RET 3. M-s M-w something RET 4. Move the point over to any link 5. Click the buffer name in the mode-line with mouse-1 6. Observe how mouse-buffer-menu is executed instead of changing the buffer Setting mouse-1-click-follows-link to nil cancels this erroneous translation and makes mode-line mouse-1 binding change the buffer as expected. In GNU Emacs 31.0.50 (build 27, x86_64-pc-linux-gnu, X toolkit, cairo version 1.18.2, Xaw scroll bars) of 2024-12-07 built on astatine Repository revision: 9ddec89e422d0dd6e9069731b8f2dd2c90aa5607 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101014 System Description: Debian GNU/Linux trixie/sid Configured using: 'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d --without-gconf --without-libsystemd --with-cairo CFLAGS=-g3' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LC_MONETARY: ta_IN.UTF-8 value of $LC_NUMERIC: ta_IN.UTF-8 value of $LANG: en_GB.UTF-8 locale-coding-system: utf-8-unix Major mode: ELisp/l Minor modes in effect: TeX-PDF-mode: t reveal-mode: t outline-minor-mode: t recentf-mode: t server-mode: t paredit-mode: t eros-mode: t flymake-mode: t pdf-occur-global-minor-mode: t minibuffer-depth-indicate-mode: t repeat-mode: t display-time-mode: t display-battery-mode: t delete-selection-mode: t xterm-mouse-mode: t vz/winkey-minor-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 use-hard-newlines: t tab-bar-history-mode: t tab-bar-mode: t file-name-shadow-mode: t context-menu-mode: t global-font-lock-mode: t font-lock-mode: t undelete-frame-mode: t minibuffer-regexp-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t abbrev-mode: t Load-path shadows: /home/viz/lib/emacs/straight/build/transient/transient hides /home/viz/lib/ports/emacs/lisp/transient /home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/ports/emacs/lisp/org/ob-awk /home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/ports/emacs/lisp/org/org-capture /home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/ports/emacs/lisp/org/ob-sql /home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/ports/emacs/lisp/org/ol-doi /home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/ports/emacs/lisp/org/org-plot /home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/ports/emacs/lisp/org/ob-dot /home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/ports/emacs/lisp/org/ol-eshell /home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/ports/emacs/lisp/org/ob-C /home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/ports/emacs/lisp/org/ob-ref /home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/ports/emacs/lisp/org/org-list /home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/ports/emacs/lisp/org/org-mouse /home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/ports/emacs/lisp/org/ob-haskell /home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/ports/emacs/lisp/org/ob-plantuml /home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/ports/emacs/lisp/org/org-keys /home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/ports/emacs/lisp/org/org-clock /home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/ports/emacs/lisp/org/ox-html /home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/ports/emacs/lisp/org/oc-biblatex /home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/ports/emacs/lisp/org/ob-table /home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/ports/emacs/lisp/org/ob /home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/ports/emacs/lisp/org/ol-w3m /home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/ports/emacs/lisp/org/ob-groovy /home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/ports/emacs/lisp/org/org-footnote /home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/ports/emacs/lisp/org/org-entities /home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/ports/emacs/lisp/org/ob-org /home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/ports/emacs/lisp/org/org-macs /home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/ports/emacs/lisp/org/ob-shell /home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/ports/emacs/lisp/org/ob-R /home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-lisp /home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/ports/emacs/lisp/org/ob-js /home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/ports/emacs/lisp/org/ob-maxima /home/viz/lib/emacs/straight/build/org/org-element-ast hides /home/viz/lib/ports/emacs/lisp/org/org-element-ast /home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/ports/emacs/lisp/org/ox-ascii /home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/ports/emacs/lisp/org/org-persist /home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/ports/emacs/lisp/org/ox-md /home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/ports/emacs/lisp/org/org-duration /home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/ports/emacs/lisp/org/ob-lilypond /home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/ports/emacs/lisp/org/ob-ruby /home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/ports/emacs/lisp/org/ob-core /home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/ports/emacs/lisp/org/ol-mhe /home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/ports/emacs/lisp/org/ob-ditaa /home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/ports/emacs/lisp/org/ol-irc /home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/ports/emacs/lisp/org/ob-fortran /home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/ports/emacs/lisp/org/org-feed /home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/ports/emacs/lisp/org/ob-java /home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/ports/emacs/lisp/org/ox /home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/ports/emacs/lisp/org/oc-csl /home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/ports/emacs/lisp/org/ob-exp /home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/ports/emacs/lisp/org/org-loaddefs /home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/ports/emacs/lisp/org/ob-scheme /home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/ports/emacs/lisp/org/ob-tangle /home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/ports/emacs/lisp/org/ox-koma-letter /home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/ports/emacs/lisp/org/ob-gnuplot /home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/ports/emacs/lisp/org/org-crypt /home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/ports/emacs/lisp/org/org-datetree /home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/ports/emacs/lisp/org/org-attach /home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/ports/emacs/lisp/org/ob-julia /home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/ports/emacs/lisp/org/ob-sqlite /home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/ports/emacs/lisp/org/org-cycle /home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/ports/emacs/lisp/org/org-faces /home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/ports/emacs/lisp/org/org-mobile /home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/ports/emacs/lisp/org/org-ctags /home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/ports/emacs/lisp/org/ob-latex /home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/ports/emacs/lisp/org/ob-matlab /home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/ports/emacs/lisp/org/ob-sed /home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/ports/emacs/lisp/org/org-attach-git /home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/ports/emacs/lisp/org/ob-python /home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/ports/emacs/lisp/org/ox-icalendar /home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/ports/emacs/lisp/org/org-tempo /home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/ports/emacs/lisp/org/ob-screen /home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/ports/emacs/lisp/org/org-num /home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/ports/emacs/lisp/org/ob-forth /home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/ports/emacs/lisp/org/ox-odt /home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/ports/emacs/lisp/org/ol-bbdb /home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/ports/emacs/lisp/org/org-table /home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/ports/emacs/lisp/org/ox-man /home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/ports/emacs/lisp/org/ox-org /home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/ports/emacs/lisp/org/ob-comint /home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/ports/emacs/lisp/org/ob-clojure /home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/ports/emacs/lisp/org/org-id /home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/ports/emacs/lisp/org/oc-natbib /home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/ports/emacs/lisp/org/ox-texinfo /home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/ports/emacs/lisp/org/org-agenda /home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/ports/emacs/lisp/org/org-src /home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-emacs-lisp /home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/ports/emacs/lisp/org/ob-css /home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/ports/emacs/lisp/org/ox-latex /home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/ports/emacs/lisp/org/oc /home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/ports/emacs/lisp/org/ol /home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/ports/emacs/lisp/org/org-element /home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/ports/emacs/lisp/org/org /home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/ports/emacs/lisp/org/org-goto /home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/ports/emacs/lisp/org/ob-eval /home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/ports/emacs/lisp/org/org-habit /home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/ports/emacs/lisp/org/org-pcomplete /home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/ports/emacs/lisp/org/ol-eww /home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/ports/emacs/lisp/org/ob-processing /home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/ports/emacs/lisp/org/org-timer /home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/ports/emacs/lisp/org/org-inlinetask /home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/ports/emacs/lisp/org/ol-bibtex /home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/ports/emacs/lisp/org/org-fold-core /home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/ports/emacs/lisp/org/oc-basic /home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/ports/emacs/lisp/org/ox-publish /home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/ports/emacs/lisp/org/oc-bibtex /home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/ports/emacs/lisp/org/org-macro /home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/ports/emacs/lisp/org/ol-docview /home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/ports/emacs/lisp/org/org-fold /home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/ports/emacs/lisp/org/org-lint /home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/ports/emacs/lisp/org/org-version /home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/ports/emacs/lisp/org/ob-ocaml /home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/ports/emacs/lisp/org/ob-sass /home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/ports/emacs/lisp/org/ob-perl /home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/ports/emacs/lisp/org/ol-rmail /home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/ports/emacs/lisp/org/org-protocol /home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/ports/emacs/lisp/org/ol-info /home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/ports/emacs/lisp/org/ob-eshell /home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/ports/emacs/lisp/org/org-refile /home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/ports/emacs/lisp/org/ob-octave /home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/ports/emacs/lisp/org/ob-lua /home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/ports/emacs/lisp/org/ol-gnus /home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/ports/emacs/lisp/org/ob-makefile /home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/ports/emacs/lisp/org/org-archive /home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/ports/emacs/lisp/org/ob-lob /home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/ports/emacs/lisp/org/ol-man /home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/ports/emacs/lisp/org/org-compat /home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/ports/emacs/lisp/org/org-colview /home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/ports/emacs/lisp/org/org-indent /home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/ports/emacs/lisp/org/ox-beamer /home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/ports/emacs/lisp/org/ob-calc Features: (shadow gnus-fun find-dired tramp-cmds ement-room-list taxy-magit-section taxy svg-lib persist ement-tabulated-room-list ement ement-notifications ement-notify notifications ement-room ement-lib ement-api ement-structs ement-macros magit-section dns wdired expand-region text-mode-expansions cc-mode-expansions the-org-mode-expansions python-el-fgallina-expansions nxml-mode-expansions latex-mode-expansions js-mode-expansions html-mode-expansions css-mode-expansions er-basic-expansions expand-region-core expand-region-custom ob-R ob-awk ob-clojure ob-css ob-dot ob-eshell eshell esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module esh-module-loaddefs esh-util ob-forth ob-groovy ob-haskell ob-java ob-js ob-julia ob-latex ob-lilypond ob-lisp ob-lua ob-makefile ob-maxima ob-ocaml ob-octave ob-org ob-perl ob-processing ob-ruby ob-sass ob-scheme ob-screen ob-sed ob-sqlite ob-sql ob-ditaa ob-plantuml org-clock org-colview org-crypt org-ctags org-mouse org-plot org-protocol ox-md ox-texinfo lacarte icomplete pcmpl-git emacsbug emacs-news-mode edebug tabify org-datetree org-capture doct gnus-search eieio-opt speedbar ezimage dframe view whitespace vc-dir tramp-cache time-stamp tramp-sh tramp trampver tramp-integration tramp-message tramp-compat tramp-loaddefs tex-mode tex-font shortdoc comp-common grep tex-buf man url-http url-gw msb olivetti pdf-sync pdf-outline pdf-links pdf-history pdf-roll tex-info texinfo texinfo-loaddefs dabbrev url-cache url-auth misc gnus-dired latex latex-flymake tex-ispell tex-style tex rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid nxml-mode nxml-outln nxml-rap external-completion locate shr-color qp flow-fill mm-archive sort gnus-cite textsec uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check gnus-async gnus-bcklg gnus-ml network-stream nsm nndraft nnmh nnmaildir nnagent nnml nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg nntp gnus-cache mhtml-mode css-mode js c-ts-common sgml-mode dired-aux typo pcmpl-unix shell-command+ latexenc face-remap org-pdftools pdf-annot facemenu org-noter oc-bibtex image-file image-converter oc-basic org-ql-find org-ql-completing-read org-ql-search org-ql-view transient ov crm org-super-agenda ht f s org-ql peg ts dash org-habit org-duration embark-org ob-gnuplot ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-icalendar org-agenda ox-html ox-mathml org-latex-preview ox-latex table ox-ascii ox-publish ox org-element org-persist avl-tree ob-fortran ob-python python ob-calc calc-store calc-trail calc-ext calc calc-loaddefs rect calc-macs ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs ob-shell shell ob-racket cdlatex texmathp org-attach ol-eww eww xdg vtable mule-util url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range gnus-win gnus nnheader range ol-docview doc-view ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi org-tempo org-id org-refile org-element-ast inline ol-man org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie treesit ob-comint org-pcomplete pcomplete org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs smerge-mode avy mail-extr flyspell ispell ecomplete pulse color bug-reference etags fileloop generator imenu-xref xref cl-print help-fns radix-tree executable misearch multi-isearch reveal noutline outline cursor-sensor recentf tree-widget vc-backup log-view log-edit message sendmail yank-media puny rfc822 mml mml-sec epa epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader add-log pcvs-util vc diff vc-git diff-mode track-changes vc-dispatcher server paredit edmacro kmacro eros checkdoc lisp-mnt flymake project wordel-autoloads mines-autoloads sokoban-autoloads ement-autoloads svg-lib-autoloads taxy-magit-section-autoloads magit-section-autoloads taxy-autoloads persist-autoloads nov-autoloads esxml-autoloads kv-autoloads transmission-autoloads csv-mode-autoloads lua-mode-autoloads gnuplot-autoloads go-mode-autoloads racket-mode-autoloads eros-autoloads comint-mime-autoloads writegood-mode-autoloads embark ffap thingatpt compat embark-autoloads xeft-autoloads paredit-autoloads puni-autoloads expand-region-autoloads filladapt-autoloads compose org-ql-autoloads transient-autoloads ov-autoloads org-super-agenda-autoloads ts-autoloads ht-autoloads f-autoloads s-autoloads dash-autoloads org-pdftools-autoloads org-noter-autoloads change-env-autoloads math-delimiters-autoloads doct-autoloads emacs-ob-racket-autoloads valign-autoloads cdlatex-autoloads tempo bibtex iso8601 time-date auctex-autoloads tex-site pdf-occur ibuf-ext ibuffer ibuffer-loaddefs tablist advice tablist-filter semantic/wisent/comp semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local cedet pdf-isearch let-alist pdf-misc imenu pdf-tools package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source eieio eieio-core json url-vars compile comint ansi-osc ansi-color ring cus-edit wid-edit pdf-view password-cache jka-compr pdf-cache pdf-info tq pdf-util pdf-macs image-mode dired-x dired dired-loaddefs exif pdf-tools-autoloads tablist-autoloads typo-autoloads mb-depth repeat visual-fill-autoloads olivetti-autoloads time format-spec battery filenotify dom tamil99 quail disp-table lacarte-autoloads shell-command-plus-autoloads delsel xt-mouse cus-load avy-autoloads icalendar diary-lib diary-loaddefs cal-menu calendar cal-loaddefs plz warnings icons easy-mmode dired-du-autoloads finder-inf filecache imenu-xref-autoloads ert map byte-opt ewoc debug backtrace find-func qrencode-autoloads derived tochemfig-autoloads chemtable-autoloads molar-mass-autoloads files-x vc-backup-autoloads skeleton saveplace-pdf-view saveplace bookmark text-property-search pp saveplace-pdf-view-autoloads dbus xml rx plz-autoloads inspector-autoloads xr-autoloads info straight-autoloads cl-seq cl-extra help-mode straight subr-x cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile pcase vz-nh-theme vz-options-theme rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen 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 dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty move-toolbar make-network-process emacs) Memory information: ((conses 16 3216893 684419) (symbols 48 94087 10) (strings 32 528033 66919) (string-bytes 1 26653336) (vectors 16 203501) (vector-slots 8 2927604 306719) (floats 8 10695 19070) (intervals 56 291148 3209) (buffers 984 166)) ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link 2024-12-31 5:37 bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link Visuwesh @ 2025-01-05 15:17 ` Eli Zaretskii 2025-01-05 18:10 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2025-01-05 15:17 UTC (permalink / raw) To: Visuwesh, Stefan Monnier; +Cc: 75219 > From: Visuwesh <visuweshm@gmail.com> > Date: Tue, 31 Dec 2024 11:07:05 +0530 > > When the point is over a character with a keymap that has `follow-link', > mode-line mouse-1 binding is translated to mode-line mouse-2 binding. > > To reproduce, > > 1. emacs -Q > 2. M-: (define-key mode-line-buffer-identification-keymap [mode-line mouse-2] #'mouse-buffer-menu) RET > 3. M-s M-w something RET > 4. Move the point over to any link > 5. Click the buffer name in the mode-line with mouse-1 > 6. Observe how mouse-buffer-menu is executed instead of changing the > buffer This happens because key-binding considers the local keymap at point even if its POSITION argument specifies a mouse click in a completely different location (in this case: on the mode line). For example, try M-: (key-binding [follow-link] nil t (list (selected-window) 'mode-line '(82 . 549) 10000)) RET Evaluate this in EWW buffer, once with point on a link and another time with point on a regular character. In the second case this will return nil, but in the first case it will return 'mouse-face', an indication that the click should follow a link. The result of this is that mouse-on-link-p returns non-nil, and mouse--click-1-maybe-follows-link decides we need to follow the link. The reason why key-binding considers the local keymap at point is this part of current-active-maps (which key-binding calls): ptrdiff_t pt = click_position (position); <<<<<<<<<<<<<<<<<<<<< /* This usually returns the buffer's local map, but that can be overridden by a `local-map' property. */ Lisp_Object local_map = get_local_map (pt, current_buffer, Qlocal_map); /* This returns nil unless there is a `keymap' property. */ Lisp_Object keymap = get_local_map (pt, current_buffer, Qkeymap); Lisp_Object otlp = KVAR (current_kboard, Voverriding_terminal_local_map); and click_position does this: static ptrdiff_t click_position (Lisp_Object position) { EMACS_INT pos = (FIXNUMP (position) ? XFIXNUM (position) : MARKERP (position) ? marker_position (position) : PT); if (! (BEGV <= pos && pos <= ZV)) args_out_of_range (Fcurrent_buffer (), position); return pos; } So if POSITION is a mouse click event, click_position will always return the position of point. It is easy to prevent this strange result from click_position by ignoring local map at POSITION which is a list, but I don't know how much code out there relies on this "fallback" to point. Stefan, any ideas or suggestions? ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link 2025-01-05 15:17 ` Eli Zaretskii @ 2025-01-05 18:10 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2025-01-05 18:51 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2025-01-05 18:10 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 75219, Visuwesh > The reason why key-binding considers the local keymap at point is this > part of current-active-maps (which key-binding calls): > > ptrdiff_t pt = click_position (position); <<<<<<<<<<<<<<<<<<<<< > /* This usually returns the buffer's local map, > but that can be overridden by a `local-map' property. */ > Lisp_Object local_map = get_local_map (pt, current_buffer, Qlocal_map); > /* This returns nil unless there is a `keymap' property. */ > Lisp_Object keymap = get_local_map (pt, current_buffer, Qkeymap); > Lisp_Object otlp = KVAR (current_kboard, Voverriding_terminal_local_map); > > and click_position does this: > > static ptrdiff_t > click_position (Lisp_Object position) > { > EMACS_INT pos = (FIXNUMP (position) ? XFIXNUM (position) > : MARKERP (position) ? marker_position (position) > : PT); > if (! (BEGV <= pos && pos <= ZV)) > args_out_of_range (Fcurrent_buffer (), position); > return pos; > } > > So if POSITION is a mouse click event, click_position will always > return the position of point. Yeah, we pay attention to the "window" part of the posn but not the rest. 🙁 > Stefan, any ideas or suggestions? Maybe something like the patch below, but maybe we should call `posn-point` instead? Stefan diff --git a/src/keymap.c b/src/keymap.c index e3461243cdd..7393495b41a 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -1659,6 +1659,10 @@ click_position (Lisp_Object position) { EMACS_INT pos = (FIXNUMP (position) ? XFIXNUM (position) : MARKERP (position) ? marker_position (position) + /* FIXME: POSN_POSN seems to be less thorough + than `posn-point'! */ + : CONSP (position) && INTEGERP (POSN_POSN (position)) + ? POSN_POSN (position) : PT); if (! (BEGV <= pos && pos <= ZV)) args_out_of_range (Fcurrent_buffer (), position); ^ permalink raw reply related [flat|nested] 6+ messages in thread
* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link 2025-01-05 18:10 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2025-01-05 18:51 ` Eli Zaretskii 2025-01-05 21:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2025-01-05 18:51 UTC (permalink / raw) To: Stefan Monnier; +Cc: 75219, visuweshm > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: Visuwesh <visuweshm@gmail.com>, 75219@debbugs.gnu.org > Date: Sun, 05 Jan 2025 13:10:45 -0500 > > > So if POSITION is a mouse click event, click_position will always > > return the position of point. > > Yeah, we pay attention to the "window" part of the posn but not the > rest. 🙁 > > > Stefan, any ideas or suggestions? > > Maybe something like the patch below, but maybe we should call > `posn-point` instead? It shouldn't be hard to find a solution along these lines, but what bothers me is how many Lisp code out there relies on this strange "fallback"? Also, for clicks on mode line there will be no buffer position in the event, and then it sounds like your patch will again fall back on returning point? I thought that clicks on the mode line should examine local keymaps only on the mode-line's string at the click, don't you agree? ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link 2025-01-05 18:51 ` Eli Zaretskii @ 2025-01-05 21:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2025-01-07 18:57 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2025-01-05 21:51 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 75219, visuweshm > Also, for clicks on mode line there will be no buffer position in the > event, and then it sounds like your patch will again fall back on > returning point? I thought that clicks on the mode line should > examine local keymaps only on the mode-line's string at the click, > don't you agree? +1 Stefan ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link 2025-01-05 21:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2025-01-07 18:57 ` Eli Zaretskii 0 siblings, 0 replies; 6+ messages in thread From: Eli Zaretskii @ 2025-01-07 18:57 UTC (permalink / raw) To: Stefan Monnier; +Cc: 75219, visuweshm > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: visuweshm@gmail.com, 75219@debbugs.gnu.org > Date: Sun, 05 Jan 2025 16:51:03 -0500 > > > Also, for clicks on mode line there will be no buffer position in the > > event, and then it sounds like your patch will again fall back on > > returning point? I thought that clicks on the mode line should > > examine local keymaps only on the mode-line's string at the click, > > don't you agree? > > +1 Wait a minute... we already have in current-active-maps code to support this, right below the call to click_position: if (CONSP (position)) { Lisp_Object string = POSN_STRING (position); /* For a mouse click, get the local text-property keymap of the place clicked on, rather than point. */ if (POSN_INBUFFER_P (position)) { Lisp_Object pos = POSN_BUFFER_POSN (position); if (FIXNUMP (pos) && XFIXNUM (pos) >= BEG && XFIXNUM (pos) <= Z) { local_map = get_local_map (XFIXNUM (pos), current_buffer, Qlocal_map); keymap = get_local_map (XFIXNUM (pos), current_buffer, Qkeymap); } } /* If on a mode line string with a local keymap, or for a click on a string, i.e. overlay string or a string displayed via the `display' property, consider `local-map' and `keymap' properties of that string. */ if (CONSP (string) && STRINGP (XCAR (string))) { Lisp_Object pos = XCDR (string); string = XCAR (string); if (FIXNUMP (pos) && XFIXNUM (pos) >= 0 && XFIXNUM (pos) < SCHARS (string)) { Lisp_Object map = Fget_text_property (pos, Qlocal_map, string); if (!NILP (map)) local_map = map; map = Fget_text_property (pos, Qkeymap, string); if (!NILP (map)) keymap = map; } } } The "STRINGP (XCAR (string))" case is ours. The problem there is that it overrides the previous values of local_map and keymap only if the corresponding properties on the string are non-nil. I think we should override them unconditionally, since the values calculated from point are irrelevant when the click was on a mode line. And indeed, with the patch below (which basically does the same with properties on a string as we already do with properties on buffer text), the bug is solved. My only hesitation is whether we should do this with _any_ string or only with mode-line and header-line strings. If the string is a display string or an overlay string, and the keymap properties of that string at the click are nil, should we fall back on the keymap properties at point, or should we ignore the buffer properties and behave as if there are no keymap properties at the click? diff --git a/src/keymap.c b/src/keymap.c index c0f49a7..4defe3a 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -1745,13 +1745,8 @@ DEFUN ("current-active-maps", Fcurrent_active_maps, Scurrent_active_maps, && XFIXNUM (pos) >= 0 && XFIXNUM (pos) < SCHARS (string)) { - Lisp_Object map = Fget_text_property (pos, Qlocal_map, string); - if (!NILP (map)) - local_map = map; - - map = Fget_text_property (pos, Qkeymap, string); - if (!NILP (map)) - keymap = map; + local_map = Fget_text_property (pos, Qlocal_map, string); + keymap = Fget_text_property (pos, Qkeymap, string); } } ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-01-07 18:57 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-12-31 5:37 bug#75219: 31.0.50; mouse-2 mode-line binding overridden by mouse-1-click-follows-link Visuwesh 2025-01-05 15:17 ` Eli Zaretskii 2025-01-05 18:10 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2025-01-05 18:51 ` Eli Zaretskii 2025-01-05 21:51 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2025-01-07 18:57 ` Eli Zaretskii
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.