From e40b3c33f4750dcbe83012eb4e5b8e786f9f71b1 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Sat, 21 Nov 2015 12:25:19 +0300 Subject: [PATCH] emacs: Split 'guix-root-map' keymap. * emacs/guix-base.el: (guix-root-map): Split into... (guix-buffer-map): ... this and... * emacs/guix-ui.el (guix-ui-map): ... this. (guix-ui-define-interface): Generate 'guix-ENTRY-TYPE-BUFFER-TYPE-mode-map' keymaps inheriting them from 'guix-ui-map' and 'guix-BUFFER-TYPE-mode-map'. * emacs/guix-info.el (guix-info-mode-map): Use 'guix-buffer-map'. * emacs/guix-list.el (guix-list-mode-map): Likewise. * doc/emacs.texi (Emacs Keymaps): Document new keymaps. --- doc/emacs.texi | 8 ++++++-- emacs/guix-base.el | 6 ++---- emacs/guix-info.el | 4 ++-- emacs/guix-list.el | 2 +- emacs/guix-ui.el | 18 ++++++++++++++++++ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/doc/emacs.texi b/doc/emacs.texi index 5828bb74d5..15abedb6a1 100644 --- a/doc/emacs.texi +++ b/doc/emacs.texi @@ -439,8 +439,12 @@ 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-buffer-map +Parent keymap with general keys for any buffer type. + +@item guix-ui-map +Parent keymap with general keys for buffers used for Guix package +management (for packages, outputs and generations). @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 3aaa2665c0..73c94042ba 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -283,16 +283,14 @@ This alist is filled by `guix-buffer-define-interface' macro.") "Return 'revert-confirm' value for BUFFER-TYPE/ENTRY-TYPE." (guix-buffer-value buffer-type entry-type 'revert-confirm)) -(defvar guix-root-map +(defvar guix-buffer-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.") + "Parent keymap for Guix buffer modes.") (defvar-local guix-profile nil "Profile used for the current buffer.") diff --git a/emacs/guix-info.el b/emacs/guix-info.el index 3cad6624f3..6e50d34c4d 100644 --- a/emacs/guix-info.el +++ b/emacs/guix-info.el @@ -401,10 +401,10 @@ 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 (list guix-root-map button-buffer-map) + map (make-composed-keymap (list guix-buffer-map button-buffer-map) special-mode-map)) map) - "Parent keymap for info buffers.") + "Keymap for `guix-info-mode' buffers.") (define-derived-mode guix-info-mode special-mode "Guix-Info" "Parent mode for displaying information in info buffers.") diff --git a/emacs/guix-list.el b/emacs/guix-list.el index 9aed7dcb82..8a9c10f2da 100644 --- a/emacs/guix-list.el +++ b/emacs/guix-list.el @@ -380,7 +380,7 @@ 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 (make-composed-keymap guix-root-map + map (make-composed-keymap guix-buffer-map tabulated-list-mode-map)) (define-key map (kbd "RET") 'guix-list-describe) (define-key map (kbd "i") 'guix-list-describe) diff --git a/emacs/guix-ui.el b/emacs/guix-ui.el index 4f4688250b..25b110c815 100644 --- a/emacs/guix-ui.el +++ b/emacs/guix-ui.el @@ -27,6 +27,13 @@ (require 'cl-lib) (require 'guix-utils) +(defvar guix-ui-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "M") 'guix-apply-manifest) + (define-key map (kbd "C-c C-z") 'guix-switch-to-repl) + map) + "Parent keymap for Guix package/generation buffers.") + (defun guix-ui-list-describe (ids) "Describe 'ui' entries with IDS (list of identifiers)." (apply #'guix-get-show-entries @@ -52,12 +59,23 @@ The rest keyword arguments are passed to (buffer-type-str (symbol-name buffer-type)) (prefix (concat "guix-" entry-type-str "-" buffer-type-str)) + (mode-str (concat prefix "-mode")) + (mode-map (intern (concat mode-str "-map"))) + (parent-map (intern (format "guix-%s-mode-map" + buffer-type-str))) (required-var (intern (concat prefix "-required-params"))) (definer (intern (format "guix-%s-define-interface" buffer-type-str)))) (guix-keyword-args-let args ((required-val :required ''(id))) `(progn + (defvar ,mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent + map (make-composed-keymap ,parent-map guix-ui-map)) + map) + ,(format "Keymap for `%s' buffers." mode-str)) + (defvar ,required-var ,required-val ,(format "\ List of the required '%s' parameters for '%s' buffer.