GNU bug report logs - #43617
27.1; Define-minor-mode keybindings not get precedence over global keymap

Previous Next

Package: emacs;

Reported by: dalanicolai <at> gmail.com

Date: Fri, 25 Sep 2020 18:11:02 UTC

Severity: normal

Tags: notabug

Found in version 27.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: dalanicolai <at> gmail.com
Cc: 43617 <at> debbugs.gnu.org
Subject: bug#43617: 27.1; Define-minor-mode keybindings not get precedence over global  keymap
Date: Sat, 26 Sep 2020 16:04:56 +0200
dalanicolai <at> gmail.com writes:

> Start emacs with the -Q flag, use the following code to create
> keybindings with define-minor-mode:
>
> (define-minor-mode pdf-continuous-scroll-mode
>   "Emulate continuous scroll with two synchronized buffers"
>   nil
>   " Continuous"
>   '(((kbd "j") . (lambda () (interactive) (print "pushed j")))
>     ((kbd "C-n") . (lambda () (interactive)(print "pushed C-n"))))
>   (print "toggled minor mode"))
>
> Now activate the just defined pdf-continuous-scroll-mode.
> The "C-n" keybinding does not work correctly while the "j"
> keybinding does (i.e. prints "pushed j").

Hm.  It seems like there's a difference between \C-n and (kbd "C-n")
here for some reason.  With this definition:

(define-minor-mode pdf-continuous-scroll-mode-3
  "Emulate continuous scroll with two synchronized buffers"
  nil
  " Continuous"
  '(((kbd "j") . (lambda () (interactive) (print "pushed j")))
    ("\C-n" . (lambda () (interactive)(print "pushed C-n"))))
  (print "toggled minor mode"))

we get the keymap:

(keymap
 (14 lambda nil
     (interactive)
     (print "pushed C-n"))
 (106 lambda nil
      (interactive)
      (print "pushed j")))

With `kbd', we get the following keymap, which surely has to be wrong:

(keymap
 (67 keymap
     (45 keymap
	 (110 lambda nil
	      (interactive)
	      (print "pushed C-n"))))
 (106 lambda nil
      (interactive)
      (print "pushed j")))


-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




This bug report was last modified 4 years and 289 days ago.

Previous Next


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