From 1e81a3546142e06b9e4e9a0ae3f599c98c3f5c6c Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 3 Jun 2018 15:46:00 +0200 Subject: [PATCH] Minimize dependence on map! This is in preparation for general.el integration coming in 2.1.1. It is very likely that map! will change (and even more, be split into several macros). Not much, but change none-the-less. Specifically, the state keywords (e.g. :nvi, :n, :i) will be removed in favor of a :state property that takes a list, e.g. (normal visual insert). In any case, both map! and general are also relatively expensive compared to define-key and evil-define-key* (and the new define-key! macro), so use that when we can. This also means changes to either API won't affect Doom's modules in the long term. --- core/core-keybinds.el | 27 ++++++--- modules/app/calendar/config.el | 2 +- modules/app/irc/config.el | 4 +- modules/app/rss/config.el | 35 ++++++------ modules/app/twitter/config.el | 51 ++++++++--------- modules/completion/helm/config.el | 27 +++++---- modules/completion/ivy/config.el | 56 +++++++++--------- modules/config/default/autoload/evil.el | 2 +- modules/emacs/eshell/config.el | 33 ++++++----- modules/feature/evil/config.el | 40 +++++++------ modules/lang/cc/config.el | 4 +- modules/lang/ess/config.el | 75 +++++++++++++------------ modules/lang/latex/config.el | 12 ++-- modules/lang/markdown/config.el | 55 +++++++++--------- modules/lang/org/+babel.el | 2 +- modules/tools/ein/config.el | 5 +- modules/tools/password-store/config.el | 12 ++-- modules/tools/pdf/config.el | 6 +- modules/tools/prodigy/config.el | 2 +- modules/ui/doom-dashboard/config.el | 65 ++++++++++++--------- 20 files changed, 276 insertions(+), 239 deletions(-) diff --git a/core/core-keybinds.el b/core/core-keybinds.el index 91258aac8..95c7d0881 100644 --- a/core/core-keybinds.el +++ b/core/core-keybinds.el @@ -153,17 +153,26 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See (defvar doom--defer nil) (defvar doom--local nil) -(defmacro define-key! (keymap key def &rest rest) +(defmacro define-key! (keymaps key def &rest rest) "TODO" (declare (indent defun)) - `(progn - (define-key ,keymap ,key ,def) - ,@(let (forms) - (while rest - (let ((key (pop rest)) - (def (pop rest))) - (push `(define-key ,keymap ,key ,def) forms))) - (nreverse forms)))) + (if (and (listp keymaps) + (not (eq (car-safe keymaps) 'quote))) + `(dolist (map (list ,@keymaps)) + ,(macroexpand `(define-key! map ,key ,def ,@rest))) + (when (eq (car-safe keymaps) 'quote) + (pcase (cadr keymaps) + (`global (setq keymaps '(current-global-map))) + (`local (setq keymaps '(current-local-map))) + (x (error "%s is not a valid keymap" x)))) + `(let ((map ,keymaps)) + (define-key map ,key ,def) + ,@(let (forms) + (while rest + (let ((key (pop rest)) + (def (pop rest))) + (push `(define-key map ,key ,def) forms))) + (nreverse forms))))) (defmacro map! (&rest rest) "A nightmare of a key-binding macro that will use `evil-define-key*', diff --git a/modules/app/calendar/config.el b/modules/app/calendar/config.el index c607b2898..b359e1212 100644 --- a/modules/app/calendar/config.el +++ b/modules/app/calendar/config.el @@ -27,7 +27,7 @@ cfw:fchar-top-left-corner ?┏ cfw:fchar-top-right-corner ?┓) - (map! :map cfw:calendar-mode-map "q" #'+calendar/quit) + (define-key cfw:calendar-mode-map "q" #'+calendar/quit) (when (featurep 'solaire-mode) (add-hook 'cfw:calendar-mode-hook #'solaire-mode)) diff --git a/modules/app/irc/config.el b/modules/app/irc/config.el index 7d7c6df11..703ac4122 100644 --- a/modules/app/irc/config.el +++ b/modules/app/irc/config.el @@ -103,7 +103,7 @@ playback.") (advice-add 'circe--irc-conn-disconnected :after #'+irc*circe-disconnect-hook) ;; Let `+irc/quit' and `circe' handle buffer cleanup - (map! :map circe-mode-map [remap kill-buffer] #'bury-buffer) + (define-key circe-mode-map [remap kill-buffer] #'bury-buffer) (defun +irc*circe-truncate-nicks () "Truncate long nicknames in chat output non-destructively." @@ -163,7 +163,7 @@ playback.") (def-package! lui :commands lui-mode :config - (map! :map lui-mode-map "C-u" #'lui-kill-to-beginning-of-line) + (define-key lui-mode-map "\C-u" #'lui-kill-to-beginning-of-line) (when (featurep! :feature spellcheck) (setq lui-flyspell-p t lui-fill-type nil)) diff --git a/modules/app/rss/config.el b/modules/app/rss/config.el index e3908aa80..606bbaedf 100644 --- a/modules/app/rss/config.el +++ b/modules/app/rss/config.el @@ -39,23 +39,24 @@ paths.") ;; Enhance readability of a post (add-hook 'elfeed-show-mode-hook #'+rss|elfeed-wrap) - (map! (:map (elfeed-search-mode-map elfeed-show-mode-map) - [remap kill-this-buffer] #'+rss/quit - [remap kill-buffer] #'+rss/quit) - - (:map elfeed-search-mode-map - :n "q" #'+rss/quit - :n "r" #'elfeed-update - :n "s" #'elfeed-search-live-filter - :n "RET" #'elfeed-search-show-entry - :n "M-RET" #'elfeed-search-browse-url) - - (:map elfeed-show-mode-map - :n "q" #'elfeed-kill-buffer - :m "j" #'evil-next-visual-line - :m "k" #'evil-previous-visual-line - [remap next-buffer] #'+rss/next - [remap previous-buffer] #'+rss/previous))) + (define-key! (elfeed-search-mode-map elfeed-show-mode-map) + [remap kill-this-buffer] #'+rss/quit + [remap kill-buffer] #'+rss/quit) + (define-key! elfeed-show-mode-map + [remap next-buffer] #'+rss/next + [remap previous-buffer] #'+rss/previous) + (when (featurep 'evil) + (evil-define-key* 'normal elfeed-search-mode-map + "q" #'+rss/quit + "r" #'elfeed-update + "s" #'elfeed-search-live-filter + (kbd "RET") #'elfeed-search-show-entry + (kbd "M-RET") #'elfeed-search-browse-url) + (evil-define-key* 'normal elfeed-show-mode-map + "q" #'elfeed-kill-buffer) + (evil-define-key* 'motion elfeed-show-mode-map + "j" #'evil-next-visual-line + "k" #'evil-previous-visual-line))) (def-package! elfeed-org diff --git a/modules/app/twitter/config.el b/modules/app/twitter/config.el index acc592b40..4238172e0 100644 --- a/modules/app/twitter/config.el +++ b/modules/app/twitter/config.el @@ -52,28 +52,29 @@ mode-line-format nil)) (add-hook 'twittering-mode-hook #'+twitter|switch-mode-and-header-line) - (map! :map twittering-mode-map - "q" #'+twitter/quit - "Q" #'+twitter/quit-all - [remap twittering-kill-buffer] #'+twitter/quit - [remap delete-window] #'+twitter/quit - [remap +workspace/close-window-or-workspace] #'+twitter/quit - (:when (featurep! :feature evil) - [remap evil-window-delete] #'+twitter/quit - "f" #'twittering-favorite - "F" #'twittering-unfavorite - "C-f" #'twittering-follow - "C-F" #'twittering-unfollow - "d" #'twittering-delete-status - "r" #'twittering-retweet - "R" #'twittering-toggle-or-retrieve-replied-statuses - "o" #'twittering-update-status-interactive - "O" #'+twitter/ace-link - "/" #'twittering-search - "J" #'twittering-goto-next-status - "K" #'twittering-goto-previous-status - "g" nil - "gg" #'twittering-goto-first-status - "G" #'twittering-goto-last-status - "gj" #'twittering-goto-next-status-of-user - "gk" #'twittering-goto-previous-status-of-user))) + (define-key! twittering-mode-map + "q" #'+twitter/quit + "Q" #'+twitter/quit-all + [remap twittering-kill-buffer] #'+twitter/quit + [remap delete-window] #'+twitter/quit + [remap +workspace/close-window-or-workspace] #'+twitter/quit) + (when (featurep! :feature evil +everywhere) + (define-key! twittering-mode-map + [remap evil-window-delete] #'+twitter/quit + "f" #'twittering-favorite + "F" #'twittering-unfavorite + "\C-f" #'twittering-follow + "\C-F" #'twittering-unfollow + "d" #'twittering-delete-status + "r" #'twittering-retweet + "R" #'twittering-toggle-or-retrieve-replied-statuses + "o" #'twittering-update-status-interactive + "O" #'+twitter/ace-link + "/" #'twittering-search + "J" #'twittering-goto-next-status + "K" #'twittering-goto-previous-status + "g" nil + "gg" #'twittering-goto-first-status + "G" #'twittering-goto-last-status + "gj" #'twittering-goto-next-status-of-user + "gk" #'twittering-goto-previous-status-of-user))) diff --git a/modules/completion/helm/config.el b/modules/completion/helm/config.el index 2233d7b07..7d137e6d9 100644 --- a/modules/completion/helm/config.el +++ b/modules/completion/helm/config.el @@ -14,20 +14,19 @@ :defer 1 :after-call pre-command-hook :init - (map! :map global-map - [remap apropos] #'helm-apropos - [remap bookmark-jump] #'helm-bookmarks - [remap execute-extended-command] #'helm-M-x - [remap find-file] #'helm-find-files - [remap imenu-anywhere] #'helm-imenu-anywhere - [remap imenu] #'helm-semantic-or-imenu - [remap swiper] #'helm-swoop - [remap noop-show-kill-ring] #'helm-show-kill-ring - [remap projectile-find-file] #'helm-projectile-find-file - [remap projectile-recentf] #'helm-projectile-recentf - [remap projectile-switch-project] #'helm-projectile-switch-project - [remap projectile-switch-to-buffer] #'helm-projectile-switch-to-buffer - [remap recentf-open-files] #'helm-recentf) + (define-key! 'global + [remap apropos] #'helm-apropos + [remap bookmark-jump] #'helm-bookmarks + [remap execute-extended-command] #'helm-M-x + [remap find-file] #'helm-find-files + [remap imenu-anywhere] #'helm-imenu-anywhere + [remap imenu] #'helm-semantic-or-imenu + [remap noop-show-kill-ring] #'helm-show-kill-ring + [remap projectile-find-file] #'helm-projectile-find-file + [remap projectile-recentf] #'helm-projectile-recentf + [remap projectile-switch-project] #'helm-projectile-switch-project + [remap projectile-switch-to-buffer] #'helm-projectile-switch-to-buffer + [remap recentf-open-files] #'helm-recentf) :config (helm-mode +1) ;; helm is too heavy for find-file-at-point diff --git a/modules/completion/ivy/config.el b/modules/completion/ivy/config.el index 702afd189..596fff5b3 100644 --- a/modules/completion/ivy/config.el +++ b/modules/completion/ivy/config.el @@ -50,9 +50,10 @@ immediately runs it on the current candidate (ending the ivy session)." (after! magit (setq magit-completing-read-function #'ivy-completing-read)) (after! yasnippet (add-to-list 'yas-prompt-functions #'+ivy-yas-prompt nil #'eq)) - (map! [remap switch-to-buffer] #'ivy-switch-buffer - [remap persp-switch-to-buffer] #'+ivy/switch-workspace-buffer - [remap imenu-anywhere] #'ivy-imenu-anywhere) + (define-key! 'global + [remap switch-to-buffer] #'ivy-switch-buffer + [remap persp-switch-to-buffer] #'+ivy/switch-workspace-buffer + [remap imenu-anywhere] #'ivy-imenu-anywhere) (ivy-mode +1)) @@ -69,19 +70,21 @@ immediately runs it on the current candidate (ending the ivy session)." (def-package! counsel :commands counsel-describe-face :init - (map! [remap apropos] #'counsel-apropos - [remap bookmark-jump] #'counsel-bookmark - [remap describe-face] #'counsel-describe-face - [remap describe-function] #'counsel-describe-function - [remap describe-variable] #'counsel-describe-variable - [remap execute-extended-command] #'counsel-M-x - [remap find-file] #'counsel-find-file - [remap find-library] #'counsel-find-library - [remap info-lookup-symbol] #'counsel-info-lookup-symbol - [remap imenu] #'counsel-imenu - [remap recentf-open-files] #'counsel-recentf - [remap org-capture] #'counsel-org-capture - [remap swiper] #'counsel-grep-or-swiper) + (define-key! 'global + [remap apropos] #'counsel-apropos + [remap bookmark-jump] #'counsel-bookmark + [remap describe-face] #'counsel-describe-face + [remap describe-function] #'counsel-describe-function + [remap describe-variable] #'counsel-describe-variable + [remap execute-extended-command] #'counsel-M-x + [remap find-file] #'counsel-find-file + [remap find-library] #'counsel-find-library + [remap info-lookup-symbol] #'counsel-info-lookup-symbol + [remap imenu] #'counsel-imenu + [remap recentf-open-files] #'counsel-recentf + [remap org-capture] #'counsel-org-capture + [remap swiper] #'counsel-grep-or-swiper) + :config (set! :popup "^\\*ivy-occur" '((size . 0.35)) '((transient . 0) (quit))) @@ -106,12 +109,13 @@ immediately runs it on the current candidate (ending the ivy session)." :commands (counsel-projectile-find-file counsel-projectile-find-dir counsel-projectile-switch-to-buffer counsel-projectile-grep counsel-projectile-ag counsel-projectile-switch-project) :init - (map! [remap projectile-find-file] #'counsel-projectile-find-file - [remap projectile-find-dir] #'counsel-projectile-find-dir - [remap projectile-switch-to-buffer] #'counsel-projectile-switch-to-buffer - [remap projectile-grep] #'counsel-projectile-grep - [remap projectile-ag] #'counsel-projectile-ag - [remap projectile-switch-project] #'counsel-projectile-switch-project) + (define-key! 'global + [remap projectile-find-file] #'counsel-projectile-find-file + [remap projectile-find-dir] #'counsel-projectile-find-dir + [remap projectile-switch-to-buffer] #'counsel-projectile-switch-to-buffer + [remap projectile-grep] #'counsel-projectile-grep + [remap projectile-ag] #'counsel-projectile-ag + [remap projectile-switch-project] #'counsel-projectile-switch-project) :config ;; Highlight entries that have been visited (ivy-set-display-transformer #'counsel-projectile-find-file #'+ivy-projectile-find-file-transformer)) @@ -126,10 +130,10 @@ immediately runs it on the current candidate (ending the ivy session)." (def-package! ivy-hydra :commands (+ivy@coo/body ivy-dispatching-done-hydra) :init - (map! :after ivy - :map ivy-minibuffer-map - "C-o" #'+ivy@coo/body - "M-o" #'ivy-dispatching-done-hydra) + (after! ivy + (define-key! ivy-minibuffer-map + "\C-o" #'+ivy@coo/body + (kbd "M-o") #'ivy-dispatching-done-hydra)) :config (defhydra +ivy@coo (:hint nil :color pink) " diff --git a/modules/config/default/autoload/evil.el b/modules/config/default/autoload/evil.el index b3cf49b6d..1d35ac8bf 100644 --- a/modules/config/default/autoload/evil.el +++ b/modules/config/default/autoload/evil.el @@ -42,7 +42,7 @@ buffers." integration." (interactive) (let ((prefix (this-command-keys))) - (map! :m prefix nil) + (evil-define-key* 'motion 'global prefix nil) (evilem-default-keybindings prefix) (set-transient-map evilem-map) (which-key-reload-key-sequence prefix))) diff --git a/modules/emacs/eshell/config.el b/modules/emacs/eshell/config.el index f78a8513f..90ed2816c 100644 --- a/modules/emacs/eshell/config.el +++ b/modules/emacs/eshell/config.el @@ -55,20 +55,23 @@ (defun +eshell|init-keymap () "Setup eshell keybindings. This must be done in a hook because eshell-mode redefines its keys every time `eshell-mode' is enabled." - (map! :map eshell-mode-map - :n [return] #'+eshell/goto-end-of-prompt - :n "c" #'+eshell/evil-change - :n "C" #'+eshell/evil-change-line - :n "d" #'+eshell/evil-delete - :n "D" #'+eshell/evil-delete-line - :i "C-d" #'+eshell/quit-or-delete-char - :i "C-p" #'eshell-previous-input - :i "C-n" #'eshell-next-input - [remap doom/backward-to-bol-or-indent] #'eshell-bol - [remap doom/backward-kill-to-bol-and-indent] #'eshell-kill-input - [remap split-window-below] #'+eshell/split-below - [remap split-window-right] #'+eshell/split-right - [remap evil-window-split] #'+eshell/split-below - [remap evil-window-vsplit] #'+eshell/split-right)) + (when (featurep 'evil) + (evil-define-key* 'normal eshell-mode-map + [return] #'+eshell/goto-end-of-prompt + "c" #'+eshell/evil-change + "C" #'+eshell/evil-change-line + "d" #'+eshell/evil-delete + "D" #'+eshell/evil-delete-line) + (evil-define-key* 'insert eshell-mode-map + "\C-d" #'+eshell/quit-or-delete-char + "\C-p" #'eshell-previous-input + "\C-n" #'eshell-next-input)) + (define-key! eshell-mode-map + [remap split-window-below] #'+eshell/split-below + [remap split-window-right] #'+eshell/split-right + [remap doom/backward-to-bol-or-indent] #'eshell-bol + [remap doom/backward-kill-to-bol-and-indent] #'eshell-kill-input + [remap evil-window-split] #'+eshell/split-below + [remap evil-window-vsplit] #'+eshell/split-right)) (add-hook 'eshell-first-time-mode-hook #'+eshell|init-keymap)) diff --git a/modules/feature/evil/config.el b/modules/feature/evil/config.el index cf9c59b35..5f6ad5f43 100644 --- a/modules/feature/evil/config.el +++ b/modules/feature/evil/config.el @@ -63,6 +63,8 @@ variable for an explanation of the defaults (in comments). See (add-hook 'doom-post-init-hook #'evil-mode) (evil-select-search-module 'evil-search-module 'evil-search) + (put 'evil-define-key* 'lisp-indent-function 'defun) + (set! :popup "^\\*evil-registers" '((size . 0.3))) (set! :popup "^\\*Command Line" '((size . 8))) @@ -77,18 +79,20 @@ variable for an explanation of the defaults (in comments). See ;; --- keybind fixes ---------------------- - (map! (:after wgrep - ;; A wrapper that invokes `wgrep-mark-deletion' across lines you use - ;; `evil-delete' in wgrep buffers. - :map wgrep-mode-map [remap evil-delete] #'+evil-delete) + (after! wgrep + ;; A wrapper that invokes `wgrep-mark-deletion' across lines you use + ;; `evil-delete' in wgrep buffers. + (define-key! wgrep-mode-map + [remap evil-delete] #'+evil-delete)) - ;; replace native folding commands - [remap evil-toggle-fold] #'+evil:fold-toggle - [remap evil-close-fold] #'+evil:fold-close - [remap evil-open-fold] #'+evil:fold-open - [remap evil-open-fold-rec] #'+evil:fold-open - [remap evil-close-folds] #'+evil:fold-close-all - [remap evil-open-folds] #'+evil:fold-open-all) + ;; replace native folding commands + (define-key! 'global + [remap evil-toggle-fold] #'+evil:fold-toggle + [remap evil-close-fold] #'+evil:fold-close + [remap evil-open-fold] #'+evil:fold-open + [remap evil-open-fold-rec] #'+evil:fold-open + [remap evil-close-folds] #'+evil:fold-close-all + [remap evil-open-folds] #'+evil:fold-open-all) (defun +evil|disable-highlights () "Disable ex search buffer highlights." @@ -234,7 +238,7 @@ variable for an explanation of the defaults (in comments). See evil-escape-key-sequence "jk" evil-escape-delay 0.25) (add-hook 'pre-command-hook #'evil-escape-pre-command-hook) - (map! :irvo "C-g" #'evil-escape) + (evil-define-key* '(insert replace visual operator) 'global "\C-g" #'evil-escape) :config ;; no `evil-escape' in minibuffer (add-hook 'evil-escape-inhibit-functions #'minibufferp)) @@ -259,8 +263,9 @@ variable for an explanation of the defaults (in comments). See evilmi-outer-text-object evilmi-inner-text-object) :config (global-evil-matchit-mode 1) :init - (map! [remap evil-jump-item] #'evilmi-jump-items - :textobj "%" #'evilmi-inner-text-object #'evilmi-outer-text-object) + (define-key! 'global [remap evil-jump-item] #'evilmi-jump-items) + (define-key evil-inner-text-objects-map "%" #'evilmi-inner-text-object) + (define-key evil-outer-text-objects-map "%" #'evilmi-outer-text-object) :config ;; Fixes #519 where d% wouldn't leave a dangling end-parenthesis (evil-set-command-properties 'evilmi-jump-items :type 'inclusive :jump t) @@ -374,8 +379,9 @@ the new algorithm is confusing, like in python or ruby." evil-visualstar/begin-search-forward evil-visualstar/begin-search-backward) :init - (map! :v "*" #'evil-visualstar/begin-search-forward - :v "#" #'evil-visualstar/begin-search-backward) + (evil-define-key* 'visual 'global + "*" #'evil-visualstar/begin-search-forward + "#" #'evil-visualstar/begin-search-backward) :config (global-evil-visualstar-mode 1)) @@ -402,7 +408,7 @@ the new algorithm is confusing, like in python or ruby." ;; so that any plugins that depend on multiple-cursors (which I have no control ;; over) can still use it in relative safety. (after! multiple-cursors-core - (map! :map mc/keymap :ne "" #'mc/keyboard-quit) + (evil-define-key* '(normal emacs) [escape] #'mc/keyboard-quit) (defvar +evil--mc-compat-evil-prev-state nil) (defvar +evil--mc-compat-mark-was-active nil) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index cb02a6558..cd053efe3 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -110,7 +110,7 @@ compilation database is present in the project.") ;; Smartparens and cc-mode both try to autoclose angle-brackets intelligently. ;; The result isn't very intelligent (causes redundant characters), so just do ;; it ourselves. - (map! :map c++-mode-map "<" nil ">" nil) + (define-key! c++-mode-map "<" nil ">" nil) ;; ...and leave it to smartparens (sp-with-modes '(c++-mode objc-mode) @@ -228,7 +228,7 @@ compilation database is present in the project.") (add-hook! kill-emacs (ignore-errors (rtags-cancel-process))) ;; Use rtags-imenu instead of imenu/counsel-imenu - (map! :map (c-mode-map c++-mode-map) [remap imenu] #'rtags-imenu) + (define-key! (c-mode-map c++-mode-map) [remap imenu] #'rtags-imenu) (when (featurep 'evil) (add-hook 'rtags-jump-hook #'evil-set-jump)) (add-hook 'rtags-after-find-file-hook #'recenter) diff --git a/modules/lang/ess/config.el b/modules/lang/ess/config.el index a1fc837b2..aca1c81d5 100644 --- a/modules/lang/ess/config.el +++ b/modules/lang/ess/config.el @@ -41,44 +41,45 @@ (ess-toggle-underscore t) (set! :repl 'ess-mode #'+ess/r-repl) (set! :lookup 'ess-mode :documentation #'ess-display-help-on-object) - (map! (:map ess-doc-map - "h" #'ess-display-help-on-object - "p" #'ess-R-dv-pprint - "t" #'ess-R-dv-ctable) - (:map ess-mode-map - "" #'ess-eval-line - "" #'comint-next-input - "" #'comint-previous-input - (:localleader - :nv "," #'ess-eval-region-or-function-or-paragraph-and-step - :n "'" #'R - :n "" #'ess-switch-to-inferior-or-script-buffer - :n "" #'ess-switch-process - :n ;; REPL - :n "B" #'ess-eval-buffer-and-go - :n "b" #'ess-eval-buffer - :nv "d" #'ess-eval-region-or-line-and-step - :n "D" #'ess-eval-function-or-paragraph-and-step - :n "L" #'ess-eval-line-and-go - :n "l" #'ess-eval-line - :nv "R" #'ess-eval-region-and-go - :nv "r" #'ess-eval-region - :n "F" #'ess-eval-function-and-go - :n "f" #'ess-eval-function - ;; predefined keymaps - :n "h" #'ess-doc-map - :n "x" #'ess-extra-map - :n "p" #'ess-r-package-dev-map - :n "v" #'ess-dev-map - ;; noweb - :n "cC" #'ess-eval-chunk-and-go - :n "cc" #'ess-eval-chunk - :n "cd" #'ess-eval-chunk-and-step - :n "cm" #'ess-noweb-mark-chunk - :n "cp" #'ess-noweb-previous-chunk - :n "cn" #'ess-noweb-next-chunk)))) + (define-key! ess-doc-map + "h" #'ess-display-help-on-object + "p" #'ess-R-dv-pprint + "t" #'ess-R-dv-ctable) + (define-key! ess-doc-map + [s-return] #'ess-eval-line + [up] #'comint-next-input + [down] #'comint-previous-input) + (map! :map ess-mode-map + :localleader + :nv "," #'ess-eval-region-or-function-or-paragraph-and-step + :n "'" #'R + :n "" #'ess-switch-to-inferior-or-script-buffer + :n "" #'ess-switch-process + :n ;; REPL + :n "B" #'ess-eval-buffer-and-go + :n "b" #'ess-eval-buffer + :nv "d" #'ess-eval-region-or-line-and-step + :n "D" #'ess-eval-function-or-paragraph-and-step + :n "L" #'ess-eval-line-and-go + :n "l" #'ess-eval-line + :nv "R" #'ess-eval-region-and-go + :nv "r" #'ess-eval-region + :n "F" #'ess-eval-function-and-go + :n "f" #'ess-eval-function + ;; predefined keymaps + :n "h" #'ess-doc-map + :n "x" #'ess-extra-map + :n "p" #'ess-r-package-dev-map + :n "v" #'ess-dev-map + ;; noweb + :n "cC" #'ess-eval-chunk-and-go + :n "cc" #'ess-eval-chunk + :n "cd" #'ess-eval-chunk-and-step + :n "cm" #'ess-noweb-mark-chunk + :n "cp" #'ess-noweb-previous-chunk + :n "cn" #'ess-noweb-next-chunk)) ;; `ess-smart-equals-mode' -(add-hook! (ess-mode inferior-ess) +(add-hook! '(ess-mode-hook inferior-ess-hook) #'ess-smart-equals-mode) diff --git a/modules/lang/latex/config.el b/modules/lang/latex/config.el index 585873e53..bf76d3daf 100644 --- a/modules/lang/latex/config.el +++ b/modules/lang/latex/config.el @@ -52,7 +52,7 @@ LaTeX-fill-break-at-separators nil LaTeX-item-indent 0) ; item indentation. - (map! :map LaTeX-mode-map "C-j" nil) + (define-key LaTeX-mode-map "C-j" nil) ;; Do not prompt for Master files, this allows auto-insert to add templates ;; to .tex files @@ -120,10 +120,10 @@ :config (map-put TeX-view-program-list "preview-pane" '(latex-preview-pane-mode)) (map-put TeX-view-program-selection 'output-pdf '("preview-pane")) - (map! :map doc-view-mode-map - "ESC" #'delete-window - "q" #'delete-window - "k" (λ! (quit-window) (delete-window)))) + (define-key! doc-view-mode-map + (kbd "ESC") #'delete-window + "q" #'delete-window + "k" (λ! (quit-window) (delete-window)))) (def-package! reftex @@ -170,7 +170,7 @@ bibtex-completion-notes-path (expand-file-name "notes.org" +latex-bibtex-dir) bibtex-completion-pdf-open-function (lambda (fpath) (async-start-process "open-pdf" "/usr/bin/xdg-open" nil fpath)))) - (map! :map bibtex-mode-map "C-c \\" #'bibtex-fill-entry)) + (define-key bibtex-mode-map (kbd "C-c \\") #'bibtex-fill-entry)) (def-package! auctex-latexmk diff --git a/modules/lang/markdown/config.el b/modules/lang/markdown/config.el index 230d41f01..c28067b72 100644 --- a/modules/lang/markdown/config.el +++ b/modules/lang/markdown/config.el @@ -18,32 +18,35 @@ (add-hook 'markdown-mode-hook #'+markdown|set-fill-column-and-line-spacing) (add-hook 'markdown-mode-hook #'auto-fill-mode) - (map! (:map markdown-mode-map - [remap find-file-at-point] #'markdown-follow-thing-at-point - "M-*" #'markdown-insert-list-item - "M-b" #'markdown-insert-bold - "M-i" #'markdown-insert-italic - "M-`" #'+markdown/insert-del - :m "gj" #'markdown-next-visible-heading - :m "gk" #'markdown-previous-visible-heading - ;; Assumes you have a markdown renderer plugin in chrome - :n "M-r" #'browse-url-of-file - ;; TODO: Make context sensitive - :m "]h" #'markdown-next-visible-heading - :m "[h" #'markdown-previous-visible-heading - :m "[p" #'markdown-promote - :m "]p" #'markdown-demote - :m "[l" #'markdown-next-link - :m "]l" #'markdown-previous-link - :i "M--" #'markdown-insert-hr - - (:localleader - :nv "o" #'markdown-open - :nv "b" #'markdown-preview - (:prefix "i" - :nv "t" #'markdown-toc-generate-toc - :nv "i" #'markdown-insert-image - :nv "l" #'markdown-insert-link))))) + (define-key! markdown-mode-map + [remap find-file-at-point] #'markdown-follow-thing-at-point + (kbd "M-*") #'markdown-insert-list-item + (kbd "M-b") #'markdown-insert-bold + (kbd "M-i") #'markdown-insert-italic + (kbd "M-`") #'+markdown/insert-del) + (when (featurep! :feature evil +everywhere) + (evil-define-key* 'motion markdown-mode-map + "gj" #'markdown-next-visible-heading + "gk" #'markdown-previous-visible-heading + ;; TODO: Make context sensitive + "]h" #'markdown-next-visible-heading + "[h" #'markdown-previous-visible-heading + "[p" #'markdown-promote + "]p" #'markdown-demote + "[l" #'markdown-next-link + "]l" #'markdown-previous-link) + (evil-define-key* 'insert markdown-mode-map + (kbd "M--") #'markdown-insert-hr) + (evil-define-key* 'normal markdown-mode-map + (kbd "M-r") #'browse-url-of-file)) + (map! :map markdown-mode-map + :localleader + :nv "o" #'markdown-open + :nv "b" #'markdown-preview + (:prefix "i" + :nv "t" #'markdown-toc-generate-toc + :nv "i" #'markdown-insert-image + :nv "l" #'markdown-insert-link))) (def-package! markdown-toc diff --git a/modules/lang/org/+babel.el b/modules/lang/org/+babel.el index 3b590d1a9..909695e77 100644 --- a/modules/lang/org/+babel.el +++ b/modules/lang/org/+babel.el @@ -41,7 +41,7 @@ string). Stops at the first function to return non-nil.") (advice-add #'org-babel-confirm-evaluate :around #'+org*babel-lazy-load-library) ;; I prefer C-c C-c for confirming over the default C-c ' - (map! :map org-src-mode-map "C-c C-c" #'org-edit-src-exit) + (define-key org-src-mode-map (kbd "C-c C-c") #'org-edit-src-exit) ;; In a recent update, `org-babel-get-header' was removed from org-mode, which ;; is something a fair number of babel plugins use. So until those plugins diff --git a/modules/tools/ein/config.el b/modules/tools/ein/config.el index 3228632ff..c2e290cec 100644 --- a/modules/tools/ein/config.el +++ b/modules/tools/ein/config.el @@ -42,9 +42,8 @@ (add-to-list 'doom-real-buffer-functions #'+ein-buffer-p nil #'eq) ;; Ace-link on notebook list buffers - (map! :after ein-notebooklist - :map ein:notebooklist-mode-map - "o" #'+ein/ace-link-ein) + (after! ein-notebooklist + (define-key ein:notebooklist-mode-map "o" #'+ein/ace-link-ein)) ;; add hydra (defhydra +ein/hydra (:hint t :color red) diff --git a/modules/tools/password-store/config.el b/modules/tools/password-store/config.el index 922361fdd..e05bf4b73 100644 --- a/modules/tools/password-store/config.el +++ b/modules/tools/password-store/config.el @@ -31,12 +31,12 @@ (set! :popup "^\\*Password-Store" '((side . left) (size . 0.25)) '((quit))) - (map! :map pass-mode-map - "j" #'pass-next-entry - "k" #'pass-prev-entry - "d" #'pass-kill - "C-j" #'pass-next-directory - "C-k" #'pass-next-directory)) + (define-key! pass-mode-map + "j" #'pass-next-entry + "k" #'pass-prev-entry + "d" #'pass-kill + "\C-j" #'pass-next-directory + "\C-k" #'pass-next-directory)) ;; Is built into Emacs 26+ diff --git a/modules/tools/pdf/config.el b/modules/tools/pdf/config.el index 85a4be1f8..27da28d94 100644 --- a/modules/tools/pdf/config.el +++ b/modules/tools/pdf/config.el @@ -6,9 +6,9 @@ (unless noninteractive (pdf-tools-install)) - (map! :map pdf-view-mode-map - "q" #'kill-this-buffer - doom-leader-key nil) + (define-key! pdf-view-mode-map + "q" #'kill-this-buffer + (kbd doom-leader-key) nil) (setq-default pdf-view-display-size 'fit-page) ;; Turn off cua so copy works diff --git a/modules/tools/prodigy/config.el b/modules/tools/prodigy/config.el index e9ba7ca32..b06d7278a 100644 --- a/modules/tools/prodigy/config.el +++ b/modules/tools/prodigy/config.el @@ -9,5 +9,5 @@ (advice-add #'prodigy-services :around #'+prodigy*services) - (map! :map prodigy-mode-map "d" #'+prodigy/delete)) + (define-key prodigy-mode-map "d" #'+prodigy/delete)) diff --git a/modules/ui/doom-dashboard/config.el b/modules/ui/doom-dashboard/config.el index 01c1f0d14..5749fb3b6 100644 --- a/modules/ui/doom-dashboard/config.el +++ b/modules/ui/doom-dashboard/config.el @@ -66,35 +66,46 @@ Possible values: (cl-loop for (car . _cdr) in fringe-indicator-alist collect (cons car nil) into alist finally do (setq fringe-indicator-alist alist)) - (add-hook 'post-command-hook #'+doom-dashboard|reposition-point nil t)) + (add-hook 'post-command-hook #'+doom-dashboard|reposition-point nil t) + ;; + (setq-local which-key-idle-delay 0.01) + (setq-local which-key-min-display-lines 9)) -(map! :map +doom-dashboard-mode-map - "n" #'forward-button - :gn [down] #'forward-button - :gn "C-n" #'forward-button - :gn [tab] #'forward-button - :gn "TAB" #'forward-button - "p" #'backward-button - :gn [up] #'backward-button - :gn "C-p" #'backward-button - :gn [backtab] #'backward-button - :gn "S-TAB" #'backward-button - (:when (featurep! :feature evil) - :m "j" #'forward-button - :m "k" #'backward-button - [remap evil-next-visual-line] #'forward-button - [remap evil-previous-visual-line] #'backward-button +(define-key! +doom-dashboard-mode-map + "n" #'forward-button + "p" #'backward-button + "\C-n" #'forward-button + "\C-p" #'backward-button + [down] #'forward-button + [up] #'backward-button + [tab] #'forward-button + [backtab] #'backward-button) - [remap evil-delete] #'ignore - [remap evil-delete-line] #'ignore - [remap evil-insert] #'ignore - [remap evil-append] #'ignore - [remap evil-replace] #'ignore - [remap evil-replace-state] #'ignore - [remap evil-change] #'ignore - [remap evil-change-line] #'ignore - [remap evil-visual-char] #'ignore - [remap evil-visual-line] #'ignore)) +(when (featurep 'evil) + (evil-define-key* 'normal +doom-dashboard-mode-map + "j" #'forward-button + "k" #'backward-button + "n" #'forward-button + "p" #'backward-button + "\C-n" #'forward-button + "\C-p" #'backward-button + [down] #'forward-button + [up] #'backward-button + [tab] #'forward-button + [backtab] #'backward-button) + (define-key! +doom-dashboard-mode-map + [remap evil-next-visual-line] #'forward-button + [remap evil-previous-visual-line] #'backward-button + [remap evil-delete] #'ignore + [remap evil-delete-line] #'ignore + [remap evil-insert] #'ignore + [remap evil-append] #'ignore + [remap evil-replace] #'ignore + [remap evil-replace-state] #'ignore + [remap evil-change] #'ignore + [remap evil-change-line] #'ignore + [remap evil-visual-char] #'ignore + [remap evil-visual-line] #'ignore)) ;;