diff --git a/doc/emacs.texi b/doc/emacs.texi index 0e89a11668..180037a88f 100644 --- a/doc/emacs.texi +++ b/doc/emacs.texi @@ -426,6 +426,9 @@ If you want to change default key bindings, use the following keymaps (@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}): @table @code +@item guix-root-map +Parent keymap with general keys for all guix modes. + @item guix-list-mode-map Parent keymap with general keys for ``list'' buffers. diff --git a/emacs/guix-base.el b/emacs/guix-base.el index 587288eaf9..fe89584f18 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -295,6 +295,17 @@ See `guix-update-after-operation' for details." ;;; Common definitions for buffer types +(defvar guix-root-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "l") 'guix-history-back) + (define-key map (kbd "r") 'guix-history-forward) + (define-key map (kbd "g") 'revert-buffer) + (define-key map (kbd "R") 'guix-redisplay-buffer) + (define-key map (kbd "M") 'guix-apply-manifest) + (define-key map (kbd "C-c C-z") 'guix-switch-to-repl) + map) + "Parent keymap for all guix modes.") + (defvar-local guix-profile nil "Profile used for the current buffer.") (put 'guix-profile 'permanent-local t) @@ -440,15 +451,7 @@ following keywords are available: "\\{" mode-map-str "}") (setq-local revert-buffer-function 'guix-revert-buffer) (setq-local guix-history-size ,history-var) - (and (fboundp ',mode-init-fun) (,mode-init-fun))) - - (let ((map ,mode-map)) - (define-key map (kbd "l") 'guix-history-back) - (define-key map (kbd "r") 'guix-history-forward) - (define-key map (kbd "g") 'revert-buffer) - (define-key map (kbd "R") 'guix-redisplay-buffer) - (define-key map (kbd "M") 'guix-apply-manifest) - (define-key map (kbd "C-c C-z") 'guix-switch-to-repl))))) + (and (fboundp ',mode-init-fun) (,mode-init-fun)))))) (put 'guix-define-buffer-type 'lisp-indent-function 'defun) diff --git a/emacs/guix-info.el b/emacs/guix-info.el index cbf8f46ad6..bb21024c0c 100644 --- a/emacs/guix-info.el +++ b/emacs/guix-info.el @@ -395,7 +395,7 @@ See `insert-text-button' for the meaning of PROPERTIES." (defvar guix-info-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent - map (make-composed-keymap button-buffer-map + map (make-composed-keymap (list guix-root-map button-buffer-map) special-mode-map)) map) "Parent keymap for info buffers.") diff --git a/emacs/guix-list.el b/emacs/guix-list.el index 26dfeacb8c..e84d60a0aa 100644 --- a/emacs/guix-list.el +++ b/emacs/guix-list.el @@ -371,7 +371,9 @@ Same as `tabulated-list-sort', but also restore marks after sorting." (defvar guix-list-mode-map (let ((map (make-sparse-keymap))) - (set-keymap-parent map tabulated-list-mode-map) + (set-keymap-parent + map (make-composed-keymap guix-root-map + tabulated-list-mode-map)) (define-key map (kbd "RET") 'guix-list-describe) (define-key map (kbd "m") 'guix-list-mark) (define-key map (kbd "*") 'guix-list-mark)