Add :prefix-map to map! macro

Each prefix now defines a doom-leader-DESC-map keymap, where DESC is the
which-key description for that prefix key. This should make it easier
for users to move leader prefixes. e.g.

To move SPC TAB (workspaces) to SPC l:

  (map! :leader
        "TAB" nil
        "l" doom-leader-workspaces-map)
This commit is contained in:
Henrik Lissner 2019-05-13 22:30:21 -04:00
parent 0a0def6a53
commit b7d1702484
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 32 additions and 17 deletions

View file

@ -98,7 +98,7 @@ If any hook returns non-nil, all hooks after it are ignored.")
(push `(define-key doom-leader-map (general--kbd ,key)
,bdef)
forms))
(when-let* ((desc (plist-get udef :which-key)))
(when-let* ((desc (cadr (memq :which-key udef))))
(push `(which-key-add-key-based-replacements
(general--concat t doom-leader-alt-key ,key)
,desc)
@ -275,8 +275,20 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
((or :when :unless)
(doom--map-nested (list (intern (doom-keyword-name key)) (pop rest)) rest)
(setq rest nil))
(:prefix-map
(cl-destructuring-bind (prefix . desc)
(doom-enlist (pop rest))
(let ((keymap (intern (format "doom-leader-%s-map" desc))))
(push `(progn
(defvar ,keymap (make-sparse-keymap))
(map! :leader
:desc ,desc ,prefix ,keymap
:prefix ,prefix ,@rest))
doom--map-forms)
(setq rest nil))))
(:prefix
(cl-destructuring-bind (prefix . desc) (doom-enlist (pop rest))
(cl-destructuring-bind (prefix . desc)
(doom-enlist (pop rest))
(doom--map-set (if doom--map-fn :infix :prefix)
prefix)
(when (stringp desc)
@ -398,7 +410,10 @@ Properties
:mode [MODE(s)] [...] inner keybinds are applied to major MODE(s)
:map [KEYMAP(s)] [...] inner keybinds are applied to KEYMAP(S)
:keymap [KEYMAP(s)] [...] same as :map
:prefix [PREFIX] [...] set keybind prefix for following keys
:prefix [PREFIX] [...] set keybind prefix for following keys. PREFIX
can be a cons cell: (PREFIX . DESCRIPTION)
:prefix-map [PREFIX] [...] same as :prefix, but defines a prefix keymap
where the following keys will be bound.
:after [FEATURE] [...] apply keybinds when [FEATURE] loads
:textobj KEY INNER-FN OUTER-FN define a text object keybind pair
:if [CONDITION] [...]

View file

@ -526,7 +526,7 @@
:desc "Jump to bookmark" "RET" #'bookmark-jump
;; Prefixed key groups
(:prefix ("/" . "search")
(:prefix-map ("/" . "search")
:desc "Search buffer" "b" #'swiper
:desc "Search current directory" "d" #'+default/search-from-cwd
:desc "Jump to symbol" "i" #'imenu
@ -536,7 +536,7 @@
:desc "Search project" "p" #'+default/search-project)
(:when (featurep! :ui workspaces)
(:prefix ("TAB" . "workspace")
(:prefix-map ("TAB" . "workspace")
:desc "Display tab bar" "TAB" #'+workspace/display
:desc "Switch workspace" "." #'+workspace/switch-to
:desc "New workspace" "n" #'+workspace/new
@ -559,7 +559,7 @@
:desc "Switch to 9th workspace" "9" (λ! (+workspace/switch-to 8))
:desc "Switch to last workspace" "0" #'+workspace/switch-to-last))
(:prefix ("b" . "buffer")
(:prefix-map ("b" . "buffer")
:desc "Toggle narrowing" "-" #'doom/clone-and-narrow-buffer
:desc "Previous buffer" "[" #'previous-buffer
:desc "Next buffer" "]" #'next-buffer
@ -578,7 +578,7 @@
:desc "Pop scratch buffer" "x" #'doom/open-scratch-buffer
:desc "Bury buffer" "z" #'bury-buffer)
(:prefix ("c" . "code")
(:prefix-map ("c" . "code")
:desc "Compile" "c" #'compile
:desc "Jump to definition" "d" #'+lookup/definition
:desc "Jump to references" "D" #'+lookup/references
@ -590,7 +590,7 @@
:desc "Delete trailing newlines" "W" #'doom/delete-trailing-newlines
:desc "List errors" "x" #'flycheck-list-errors)
(:prefix ("f" . "file")
(:prefix-map ("f" . "file")
:desc "Find file" "." #'find-file
:desc "Find file from here" "/"
(if (featurep! :completion ivy)
@ -610,7 +610,7 @@
:desc "Delete this file" "X" #'doom/delete-this-file
:desc "Yank filename" "y" #'+default/yank-buffer-filename)
(:prefix ("g" . "git")
(:prefix-map ("g" . "git")
:desc "Git revert file" "R" #'vc-revert
(:when (featurep! :ui vc-gutter)
:desc "Git revert hunk" "r" #'git-gutter:revert-hunk
@ -658,12 +658,12 @@
:desc "Issue" "i" #'forge-create-issue
:desc "Pull request" "p" #'forge-create-pullreq)))
(:prefix ("i" . "insert")
(:prefix-map ("i" . "insert")
:desc "Insert from clipboard" "y" #'+default/yank-pop
:desc "Insert from evil register" "r" #'evil-ex-registers
:desc "Insert snippet" "s" #'yas-insert-snippet)
(:prefix ("n" . "notes")
(:prefix-map ("n" . "notes")
:desc "Open deft" "d" #'deft
:desc "Find file in notes" "n" #'+default/find-in-notes
:desc "Browse notes" "N" #'+default/browse-notes
@ -671,7 +671,7 @@
:desc "Org capture" "x" #'org-capture
:desc "Org store link" "l" #'org-store-link)
(:prefix ("o" . "open")
(:prefix-map ("o" . "open")
:desc "Org agenda" "A" #'org-agenda
(:prefix ("a" . "org agenda")
:desc "Agenda" "a" #'org-agenda
@ -720,7 +720,7 @@
(:when (featurep! :tools docker)
:desc "Docker" "D" #'docker))
(:prefix ("p" . "project")
(:prefix-map ("p" . "project")
:desc "Browse project" "." #'+default/browse-project
:desc "Find file in other project" ">" #'doom/find-file-in-other-project
:desc "Find file in project" "/" #'projectile-find-file
@ -743,7 +743,7 @@
:desc "Open term in project" "t" #'projectile-run-term
:desc "Open shell in project" "s" #'projectile-run-shell))
(:prefix ("q" . "session")
(:prefix-map ("q" . "session")
:desc "Quit Emacs" "q" #'save-buffers-kill-terminal
:desc "Quit Emacs without saving" "Q" #'evil-quit-all-with-error-code
:desc "Quick save current session" "s" #'doom/quicksave-session
@ -754,7 +754,7 @@
:desc "Restart Emacs" "R" #'doom/restart)
(:when (featurep! :tools upload)
(:prefix ("r" . "remote")
(:prefix-map ("r" . "remote")
:desc "Upload local" "u" #'ssh-deploy-upload-handler
:desc "Upload local (force)" "U" #'ssh-deploy-upload-handler-forced
:desc "Download remote" "d" #'ssh-deploy-download-handler
@ -763,7 +763,7 @@
:desc "Detect remote changes" ">" #'ssh-deploy-remote-changes-handler))
(:when (featurep! :editor snippets)
(:prefix ("s" . "snippets")
(:prefix-map ("s" . "snippets")
:desc "New snippet" "n" #'yas-new-snippet
:desc "Insert snippet" "i" #'yas-insert-snippet
:desc "Jump to mode snippet" "/" #'yas-visit-snippet-file
@ -773,7 +773,7 @@
:desc "Create temporary snippet" "c" #'aya-create
:desc "Use temporary snippet" "e" #'aya-expand))
(:prefix ("t" . "toggle")
(:prefix-map ("t" . "toggle")
:desc "Flyspell" "s" #'flyspell-mode
:desc "Flycheck" "f" #'flycheck-mode
:desc "Line numbers" "l" #'doom/toggle-line-numbers