branch: externals/transient commit a2222d294c24ef587ff5538b7e6251ec67c9fab4 Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
transient-base-map: New parent of other shared keymaps --- docs/CHANGELOG | 5 +++++ lisp/transient.el | 56 +++++++++++++++++++++++++++---------------------------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/docs/CHANGELOG b/docs/CHANGELOG index 55ef46891b..611ab24b1c 100644 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -18,6 +18,11 @@ it necessary to find a new binding for ~transient-show~, which ~C-t~ is bound to now. #17 +- A new keymap, ~transient-base-map~ was added to make it easier to + change key bindings that are shared between all transients. This + new keymap is used as the parent of all the other keymaps that are + shared between all transients. + - The window that was selected before the transient window was shown is no longer re-selected before calling a suffix that exits the transient. If a suffix changes the selected window unintentionally, diff --git a/lisp/transient.el b/lisp/transient.el index f8449ea8ed..48475a382d 100644 --- a/lisp/transient.el +++ b/lisp/transient.el @@ -1095,8 +1095,32 @@ but unfortunately that does not exist (yet?)." ;;; Keymaps +(defvar transient-base-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "ESC ESC ESC") 'transient-quit-all) + (define-key map (kbd "C-g") 'transient-quit-one) + (define-key map (kbd "C-q") 'transient-quit-all) + (define-key map (kbd "C-z") 'transient-suspend) + (define-key map (kbd "C-v") 'transient-scroll-up) + (define-key map (kbd "M-v") 'transient-scroll-down) + (define-key map [next] 'transient-scroll-up) + (define-key map [prior] 'transient-scroll-down) + map) + "Parent of other keymaps used by Transient. + +This is the parent keymap of all the keymaps that are used in +all transients: `transient-map' (which in turn is the parent +of the transient-specific keymaps), `transient-edit-map' and +`transient-sticky-map'. + +If you change a binding here, then you might also have to edit +`transient-sticky-map' and `transient-common-commands'. While +the latter isn't a proper transient prefix command, it can be +edited using the same functions as used for transients.") + (defvar transient-map (let ((map (make-sparse-keymap))) + (set-keymap-parent map transient-base-map) (define-key map (kbd "C-p") 'universal-argument) (define-key map (kbd "C--") 'negative-argument) (define-key map (kbd "C-t") 'transient-show) @@ -1104,45 +1128,22 @@ but unfortunately that does not exist (yet?)." (define-key map (kbd "C-h") 'transient-help) (define-key map (kbd "M-p") 'transient-history-prev) (define-key map (kbd "M-n") 'transient-history-next) - ;; While setting suffix levels `transient-common-commands' - ;; isn't used, making this duplication necessary. - (define-key map (kbd "C-g") 'transient-quit-one) - (define-key map (kbd "C-q") 'transient-quit-all) - (define-key map (kbd "C-z") 'transient-suspend) - (define-key map (kbd "ESC ESC ESC") 'transient-quit-all) - (define-key map (kbd "C-v") 'transient-scroll-up) - (define-key map (kbd "M-v") 'transient-scroll-down) - (define-key map [next] 'transient-scroll-up) - (define-key map [prior] 'transient-scroll-down) map) - "Base keymap used by all transients.") + "Top-level keymap used by all transients.") (defvar transient-edit-map (let ((map (make-sparse-keymap))) + (set-keymap-parent map transient-base-map) (define-key map (kbd "?") 'transient-help) (define-key map (kbd "C-h") 'transient-help) (define-key map (kbd "C-x l") 'transient-set-level) - (define-key map (kbd "C-g") 'transient-quit-one) - (define-key map (kbd "C-q") 'transient-quit-all) - (define-key map (kbd "C-z") 'transient-suspend) - (define-key map (kbd "ESC ESC ESC") 'transient-quit-all) - (define-key map (kbd "C-v") 'transient-scroll-up) - (define-key map (kbd "M-v") 'transient-scroll-down) - (define-key map [next] 'transient-scroll-up) - (define-key map [prior] 'transient-scroll-down) map) "Keymap that is active while a transient in is in \"edit mode\".") (defvar transient-sticky-map (let ((map (make-sparse-keymap))) + (set-keymap-parent map transient-base-map) (define-key map (kbd "C-g") 'transient-quit-seq) - (define-key map (kbd "C-q") 'transient-quit-all) - (define-key map (kbd "C-z") 'transient-suspend) - (define-key map (kbd "ESC ESC ESC") 'transient-quit-all) - (define-key map (kbd "C-v") 'transient-scroll-up) - (define-key map (kbd "M-v") 'transient-scroll-down) - (define-key map [next] 'transient-scroll-up) - (define-key map [prior] 'transient-scroll-down) map) "Keymap that is active while an incomplete key sequence is active.") @@ -2733,8 +2734,7 @@ that does that. Of course \"Q\" may already be bound to something else, so that function binds \"M-q\" to that command instead. Of course \"M-q\" may already be bound to something else, but we stop there." - (define-key transient-map "q" 'transient-quit-one) - (define-key transient-edit-map "q" 'transient-quit-one) + (define-key transient-base-map "q" 'transient-quit-one) (define-key transient-sticky-map "q" 'transient-quit-seq) (setq transient-substitute-key-function 'transient-rebind-quit-commands))