.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

init-kbd.el (14236B)


      1 ;;; init-kbd.el --- keybindings -*- lexical-binding: t -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 ;;; global map
      8 (general-def
      9 
     10   ;; god-mode
     11   "M-i" #'god-mode-all
     12 
     13   ;; buffer, file, and window
     14   "<f2>" #'my-open-init-file
     15   "<mouse-4>" #'previous-buffer
     16   "<mouse-5>" #'next-buffer
     17   "M-[" #'previous-buffer
     18   "M-]" #'next-buffer
     19   "C-x 4 b" #'consult-buffer-other-window
     20   "C-x C-b" #'ibuffer-other-window
     21   "C-x b" #'consult-buffer
     22   "C-x C-1" #'delete-other-windows
     23   "C-x C-2" #'split-window-below
     24   "C-x C-3" #'split-window-right
     25   "C-x C-0" #'delete-window
     26 
     27   ;; edit
     28   [remap open-line] #'my-electric-open-line-and-indent
     29   "M-j" #'join-line
     30   "M-c" #'capitalize-dwim
     31   "M-u" #'upcase-dwim
     32   "M-l" #'downcase-dwim
     33   "C-," #'my-duplicate-current-line-or-region
     34   "C-<backspace>" #'my-kill-line-backwards
     35   "M-y" #'consult-yank-from-kill-ring
     36   "C-c <backspace>" #'hungry-delete-backward
     37   "C-c C-<backspace>" #'hungry-delete-forward
     38   "M-P" #'drag-stuff-up
     39   "M-N" #'drag-stuff-down
     40   "M-F" #'drag-stuff-right
     41   "M-B" #'drag-stuff-left
     42   "C-c e" #'my-hui-er/expand
     43   "M-z" #'avy-zap-to-char-dwim
     44   "M-Z" #'avy-zap-up-to-char-dwim
     45   "C-<" #'kmacro-x-mc-mark-previous
     46   "C->" #'kmacro-x-mc-mark-next
     47   "C-M-<" #'kmacro-x-mc-unmark-previous
     48   "C-M->" #'kmacro-x-mc-unmark-next
     49   "C-S-<mouse-1>" #'kmacro-x-mc-mark-at-click
     50   [remap undo] #'undo-only
     51   "C-x u" #'vundo
     52 
     53   ;; navigate
     54   "M-p" #'backward-paragraph
     55   "M-n" #'forward-paragraph
     56   "<mouse-2>" #'xref-find-definitions-at-mouse
     57   "C-M-;" #'avy-goto-char
     58   "C-M-'" #'avy-goto-word-1
     59   "M-g M-g" #'avy-goto-line
     60   "M-g g" #'consult-goto-line
     61   "C-c s" #'consult-line
     62   "C-c S" #'consult-line-multi
     63   "M-g i" #'consult-imenu
     64   "M-g I" #'consult-imenu-multi
     65   "M-g M-i" #'consult-imenu
     66   "C-x r b" #'consult-bookmark
     67 
     68   ;; window
     69   "M-`" #'popper-toggle
     70   "C-M--" #'popper-toggle-type
     71   "C-M-=" #'my-popper-toggle-type-delete-other-window
     72   "M-o" #'other-window
     73   "M-O" #'other-window-backward
     74 
     75   ;; org
     76   "C-c a" #'org-agenda
     77   "C-c l" #'org-store-link
     78   "C-c M-l" #'my-insert-raw-org-link
     79 
     80   ;; other
     81   "C-h h" #'hyperbole
     82   "C-c /" #'hui-search-web
     83   "C-c \\" #'hycontrol-enable-windows-mode
     84   "M-RET" #'my-hkey-either-lazy
     85   "C-;" #'embark-act
     86   "M-s M-b" #'eww-list-bookmarks
     87   "<f1>" #'eldoc-mouse-pop-doc-at-cursor
     88   "<f8>" #'emms-pause
     89   "<f7>" #'emms-previous
     90   "<f9>" #'emms-next
     91   "M-<f3>" #'profiler-start
     92   "M-<f4>" #'profiler-stop
     93   "C-x C-=" #'cnfonts-increase-fontsize
     94   "C-x C--" #'cnfonts-decrease-fontsize
     95   [remap count-words-region] #'my-count-words-region
     96   [remap eval-expression] #'pp-eval-expression
     97   [remap ispell-word] #'jinx-correct
     98   [remap describe-function] #'helpful-callable
     99   [remap describe-command] #'helpful-command
    100   [remap describe-variable] #'helpful-variable
    101   [remap describe-key] #'helpful-key
    102   [remap describe-symbol] #'helpful-symbol)
    103 
    104 
    105 ;;; other keymaps
    106 
    107 ;; calendar
    108 (general-def calendar-mode-map
    109   "RET" #'denote-journal-calendar-find-file)
    110 
    111 ;; completion
    112 (general-def completion-list-mode-map
    113   "M-n" #'minibuffer-next-completion
    114   "M-p" #'minibuffer-previous-completion)
    115 
    116 ;; corfu
    117 (general-def corfu-map
    118   "M-d" #'corfu-popupinfo-documentation
    119   "RET" nil)
    120 
    121 ;; diff
    122 (general-def diff-mode-map
    123   "M-o" #'other-window
    124   "M-m" #'my-back-to-indentation
    125   "C-w" #'diff-kill-ring-save)
    126 
    127 ;; dired
    128 (general-def (dired-mode-map dirvish-mode-map)
    129   "TAB" #'dirvish-subtree-toggle
    130   "C-<tab>" #'dirvish-subtree-remove
    131   "s" #'dirvish-quicksort
    132   "h" #'dirvish-history-menu
    133   "M-," #'scroll-other-window-down
    134   "M-." #'scroll-other-window
    135   "C-c m a" #'emms-add-dired
    136   "b" #'dired-up-directory
    137   "C-b" #'backward-char
    138   "C-f" #'forward-char
    139   "K" #'dired-kill-line
    140   "<right>" #'dired-find-file
    141   "<left>" #'dired-up-directory
    142   "C-/" #'dired-undo
    143   "<SPC>" #'my-dirvish-layout-toggle
    144   "C-c C-r" #'dired-rsync
    145   "=" #'ediff)
    146 (general-def (dired-mode-map dirvish-mode-map)
    147   :prefix "C-c d"
    148   "u" #'dirvish-setup-menu
    149   "r" #'dirvish-renaming-menu
    150   "v" #'dirvish-vc-menu
    151   "m" #'dirvish-mark-menu
    152   "i" #'dirvish-file-info-menu
    153   "y" #'dirvish-yank-menu)
    154 
    155 ;; discomfort
    156 (general-def discomfort-mode-map
    157   "p" #'previous-line
    158   "P" #'discomfort-poweroff)
    159 
    160 ;; eglot
    161 (general-def eglot-mode-map
    162   "C-c f e" #'consult-eglot-symbols)
    163 
    164 ;; elfeed
    165 (general-def elfeed-search-mode-map
    166   "v" #'my-elfeed-search-preview-other-window
    167   "TAB" #'my-elfeed-search-preview-other-window)
    168 
    169 ;; elisp
    170 (general-def (emacs-lisp-mode-map lisp-interaction-mode-map)
    171   "C-c C-l C-l" #'my-elisp-load-this-file
    172   "C-c C-l C-j" #'my-elisp-eval-and-print-last-sexp
    173   "C-c C-l C-p" #'my-elisp-pp-macroexpand-last-sexp
    174   "C-c C-l C-e" #'pp-eval-last-sexp
    175   "C-c C-l C-h" #'my-elisp-headerise
    176   "C-c C-z" #'my-switch-to-ielm)
    177 (general-def lisp-interaction-mode-map
    178   "C-j" #'my-elisp-eval-and-print-last-sexp)
    179 
    180 ;; embark
    181 (general-def embark-file-map
    182   "d" #'consult-directory-externally
    183   "p" #'emms-play-dired)
    184 (general-def embark-org-link-map
    185   "j" #'my-embark-denote-dired-jump
    186   "b" #'my-embark-denote-find-backlink-with-location)
    187 (general-def embark-general-map
    188   "j" #'embark-dired-jump)
    189 
    190 ;; emms
    191 (general-def emms-playlist-mode-map
    192   "<prior>" #'emms-previous
    193   "<next>" #'emms-next
    194   "C-c C-s" #'emms-history-save
    195   "SPC" #'emms-pause
    196   "<left>" #'emms-seek-backward
    197   "<right>" #'emms-seek-forward)
    198 
    199 ;; eshell
    200 (general-def eshell-mode-map
    201   "C-c h" #'my-eshell-input-from-history)
    202 
    203 ;; eww
    204 (general-def eww-mode-map
    205   "M-n" #'forward-paragraph
    206   "M-p" #'backward-paragraph
    207   "p" #'previous-line
    208   "n" #'next-line
    209   "P" #'eww-previous-url
    210   "N" #'eww-next-url
    211   "C-c C-p" #'outline-previous-heading
    212   "C-c C-n" #'outline-next-heading
    213   "C-c C-u" #'outline-up-heading)
    214 (general-def eww-bookmark-mode-map
    215   "p" #'previous-line
    216   "n" #'next-line)
    217 
    218 ;; flycheck
    219 (general-def flycheck-command-map
    220   "g" #'flycheck-annotate-mode
    221   "a" #'eglot-code-actions)
    222 
    223 ;; ghostel
    224 (general-def (ghostel-mode-map
    225               ghostel-semi-char-mode-map
    226               ghostel-line-mode-map)
    227   "M-]" nil
    228   "C-q" #'ghostel-send-next-key
    229   "C-c C-p" #'ghostel-previous-prompt
    230   "C-c C-n" #'ghostel-next-prompt
    231   "C-c M-p" #'ghostel-previous-hyperlink
    232   "C-c M-n" #'ghostel-next-hyperlink)
    233 (general-def ghostel-char-mode-map
    234   "M-]" nil
    235   "C-M-SPC" #'ghostel--send-event)
    236 (general-def ghostel-semi-char-mode-map
    237   "M-o" nil
    238   "C-c h" #'consult-ghostel-history
    239   "C-k" #'my-ghostel-send-C-k-and-kill
    240   "C-M-SPC" #'ghostel--send-event)
    241 
    242 ;; god-mode
    243 (general-def god-local-mode-map
    244   "i" #'god-mode-all
    245   "[" #'backward-paragraph
    246   "]" #'forward-paragraph
    247   "." #'repeat
    248   "y" #'yank
    249   "C-c C-<f12>" #'my-persp-scratch-buffer
    250   "z" #'avy-goto-char
    251   "'" #'avy-goto-word-1
    252   "<f1>" nil "<f2>" nil "<f3>" nil "<f4>" nil "<f5>" nil "<f6>" nil
    253   "<f7>" nil "<f8>" nil "<f9>" nil "<f10>" nil "<f11>" nil "<f12>" nil)
    254 
    255 ;; gptel
    256 (general-def gptel-mode-map
    257   "C-c C-s" #'my-gptel-save-session
    258   "C-c C-k" #'gptel-abort)
    259 
    260 ;; help
    261 (general-def (help-mode-map helpful-mode-map)
    262   "s" #'my-helpful-view-source
    263   "p" #'previous-line
    264   "n" #'next-line
    265   "R" #'remove-hook-at-point)
    266 
    267 ;; hs-hide-mode
    268 (general-def hs-minor-mode-map
    269   "C-c h" #'hs-toggle-hiding
    270   "C-c H" #'hs-toggle-all)
    271 
    272 ;; ibuffer
    273 (general-def ibuffer-mode-map
    274   "h k" #'my-persp-remove-marked-ibuffers
    275   "h A" #'my-persp-set-marked-ibuffers
    276   "h a" #'my-persp-add-marked-ibuffers
    277   "M-o" #'other-window)
    278 
    279 ;; ielm
    280 (general-def ielm-map "C-c C-z" #'my-repl-switch-back)
    281 
    282 ;; info
    283 (general-def Info-mode-map
    284   "M-n" #'forward-paragraph)
    285 
    286 ;; magit
    287 (general-def (magit-mode-map tokei-mode-map)
    288   "C-<tab>" #'my-magit-toggle-parent-section)
    289 
    290 ;; markdown
    291 (general-def markdown-mode-map
    292   "M-p" nil
    293   "M-n" nil
    294   "C-<tab>" #'markdown-cycle-parent-subtree
    295   "C-c C-e" #'markdown-do)
    296 
    297 ;; minibuffer
    298 (general-def minibuffer-local-map
    299   "C-c C-e" #'embark-export)
    300 
    301 ;; olivetti
    302 (general-def olivetti-mode-map
    303   "C-c \\" nil)
    304 
    305 ;; org-agenda
    306 (general-def org-agenda-mode-map
    307   "C-/" #'org-agenda-undo)
    308 (general-def org-ql-view-map
    309   "q" #'org-agenda-quit)
    310 
    311 ;; org-mode
    312 (general-def org-mode-map
    313   "C-<tab>" #'org-cycle-parent-subtree
    314   "M-g i" #'consult-outline
    315   "M-g M-i" #'consult-outline
    316   "C-c t l" #'org-toggle-link-display
    317   "M-{" #'backward-paragraph
    318   "M-}" #'forward-paragraph
    319   "C-," #'my-duplicate-current-line-or-region
    320   "C-c o l" #'denote-link-or-create
    321   "C-c o L" #'denote-org-link-to-heading
    322   "C-c o B" #'my-denote-org-find-backlink-for-heading-with-location
    323   "C-c o t" #'my-org-tree-slide-start
    324   "C-c \\" nil)
    325 
    326 ;; org-tree-slide-mode
    327 (general-def org-tree-slide-mode-map
    328   "<left>" #'org-tree-slide-move-previous-tree
    329   "<right>" #'org-tree-slide-move-next-tree
    330   "C-c o t" #'my-org-tree-slide-stop
    331   "q" #'my-org-tree-slide-stop
    332   "M-v" #'scroll-down-command)
    333 
    334 ;; perspective
    335 (general-def persp-mode-map
    336   "C-c p c" nil
    337   "C-c p d" #'persp-kill
    338   "C-x C-b" #'my-persp-ibuffer)
    339 
    340 ;; pilish
    341 (general-def (pilish-input-mode-map
    342               pilish-chat-mode-map)
    343   "C-c C-q" #'pilish-quit
    344   "C-c TAB" #'pilish-open-input
    345   "C-c C-t" #'pilish-tree-browser)
    346 
    347 ;; shell
    348 (general-def shell-mode-map
    349   "C-c h" #'my-shell-input-from-history)
    350 
    351 ;; sly
    352 (general-def (sly-mode-map sly-editing-mode-map)
    353   "M-p" #'backward-paragraph
    354   "M-n" #'forward-paragraph)
    355 (general-def sly-mrepl-mode-map
    356   "M-p" #'sly-mrepl-previous-input-or-button
    357   "M-n" #'sly-mrepl-next-input-or-button)
    358 (general-def sly-prefix-map
    359   "M-p" #'sly-pprint-eval-last-expression
    360   "C-p" #'sly-previous-note
    361   "C-n" #'sly-next-note)
    362 
    363 ;; speedbar
    364 (general-def speedbar-mode-map
    365   "^" #'speedbar-up-directory
    366   "<tab>" #'my-speedbar-tab)
    367 
    368 ;; vc
    369 (general-def vc-annotate-mode-map
    370   "t" #'consult-vc-annotate-revision
    371   "=" #'my-vc-annotate-diff-current-revision
    372   "d" #'my-vc-annotate-diff-current-revision
    373   "D" #'vc-annotate-show-diff-revision-at-line
    374   "l" #'my-vc-print-log-current-revision
    375   "L" #'vc-annotate-show-log-revision-at-line
    376   "M-n" #'vc-annotate-next-revision
    377   "M-p" #'vc-annotate-prev-revision
    378   "n" #'next-line
    379   "p" #'previous-line)
    380 
    381 
    382 ;;; with prefix
    383 
    384 ;; c for completion at point
    385 (general-def
    386   :prefix "C-c c"
    387   "t" #'cape-tex
    388   "e" #'cape-emoji
    389   "d" #'cape-dict
    390   "/" #'cape-dabbrev
    391   "f" #'cape-file
    392   "u" #'cape-rfc1345
    393   "a" #'cape-abbrev
    394   "l" #'cape-elisp-symbol)
    395 
    396 ;; d for dired
    397 (general-def
    398   :prefix "C-c d"
    399   "a" #'dirvish-quick-access
    400   "s" #'my-speedbar
    401   "h" #'dirvish-history-menu
    402   "f" #'dirvish-fd
    403   "F" #'dirvish-fd-switches-menu
    404   "t" #'trashed
    405   "d" #'discomfort)
    406 
    407 ;; f for find and consult command
    408 (general-def
    409   :prefix "C-c f"
    410   "r" #'consult-recent-file
    411   "f" #'consult-find
    412   "g" #'consult-grep
    413   "G" #'consult-git-grep
    414   "!" #'consult-flycheck
    415   "e" #'consult-symbol
    416   "l" #'consult-locate
    417   "h" #'my-consult-fd-home
    418   "m" #'consult-man
    419   "d" #'my-open-current-directory
    420   "J" #'consult-register
    421   "j" #'consult-jinx
    422   "k" #'consult-kmacro
    423   "o" #'consult-outline
    424   "i" #'consult-info
    425   "s" #'consult-focus-lines
    426   "t" #'consult-ghostel
    427   "a" #'hsys-consult-apropos
    428   "L" #'find-library)
    429 
    430 ;; g for gptel
    431 (general-def
    432   :prefix "C-c g"
    433   "g" #'gptel
    434   "m" #'gptel-menu
    435   "s" #'gptel-send
    436   "a" #'gptel-agent
    437   "t" #'gptel-tools
    438   "p" #'pilish)
    439 
    440 ;; j for journal
    441 (general-def
    442   :prefix "C-c j"
    443   "o" #'my-denote-journal-open-entry
    444   "n" #'denote-journal-new-or-existing-entry
    445   "f" #'my-denote-journal-find-file
    446   "g" #'my-consult-denote-journal-grep)
    447 
    448 ;; m for media
    449 (general-def
    450   :prefix "C-c m"
    451   "n" #'emms-next
    452   "p" #'emms-previous
    453   "f" #'emms-seek-forward
    454   "b" #'emms-seek-backward
    455   "B" #'emms-browser
    456   "s" #'emms-start
    457   "q" #'emms-stop
    458   "SPC" #'emms-pause
    459   "S" #'emms-toggle-single-track
    460   "l" #'emms-playlist-mode-switch-buffer
    461   "d" #'emms-play-directory)
    462 
    463 ;; o for org
    464 (general-def
    465   :prefix "C-c o"
    466   "f" #'my-denote-find-file
    467   "F" #'my-blog-find-file
    468   "g" #'my-consult-denote-grep
    469   "G" #'my-blog-grep
    470   "s" #'my-consult-org-agenda
    471   "p" #'my-consult-org-agenda-games
    472   "C" #'calendar
    473   "c" #'org-capture
    474   "n" #'denote
    475   "N" #'denote-date
    476   "r" #'denote-rename-file-identifier
    477   "b" #'my-denote-find-backlink-with-location
    478   "R" #'denote-rename-file
    479   "q" #'org-ql-search)
    480 
    481 ;; p for project
    482 (general-def
    483   :prefix "C-x p"
    484   "b" #'consult-project-buffer
    485   "t" #'ghostel-project
    486   "g" #'my-consult-git-grep-project
    487   "r" #'project-find-regexp
    488   "R" #'project-or-external-find-regexp
    489   "q" #'project-query-replace-regexp
    490   "v" #'magit-project-status
    491   "V" #'project-vc-dir
    492   "i" #'project-ibuffer
    493   "a" #'my-pilish)
    494 
    495 ;; r for replacement
    496 (general-def
    497   :prefix "C-c r"
    498   "h" #'substitute-target-in-paragraph
    499   "p" #'substitute-target-in-page
    500   "d" #'substitute-target-in-defun
    501   "D" #'substitute-target-in-defun-and-below
    502   "b" #'substitute-target-in-buffer
    503   "l" #'substitute-target-below-point
    504   "u" #'substitute-target-above-point)
    505 
    506 ;; t for modes toggle
    507 (general-def
    508   :prefix "C-c t"
    509   "f" #'flycheck-mode
    510   "j" #'jinx-mode
    511   "g" #'my-toggle-grammar-checker
    512   "h" #'global-diff-hl-mode
    513   "k" #'keycast-header-line-mode
    514   "v" #'vcursor-use-vcursor-map
    515   "e" #'eldoc-mouse-mode)
    516 
    517 ;; u for ui
    518 (general-def
    519   :prefix "C-c u"
    520   "l" #'global-tab-line-mode
    521   "d" #'disable-theme
    522   "t" #'consult-theme
    523   "f" #'describe-face
    524   "w" #'global-whitespace-mode
    525   "c" #'colorful-mode
    526   "p" #'my-pick-color)
    527 
    528 ;; v for version control
    529 (general-def
    530   :prefix "C-x v"
    531   "c" #'magit-clone
    532   "i" #'magit-init
    533   "l" #'magit-log-buffer-file)
    534 
    535 ;; w for whitespace
    536 (general-def
    537   :prefix "C-c w"
    538   "f" #'fixup-whitespace
    539   "r" #'whitespace-report
    540   "o" #'global-whitespace-toggle-options
    541   "c" #'whitespace-cleanup)
    542 
    543 ;; x for some other command
    544 (general-def
    545   :prefix "C-c x"
    546   "e" #'eshell
    547   "t" #'ghostel
    548   "s" #'shell
    549   "p" #'proced
    550   "b" #'benchmark-init/show-durations-tree
    551   "B" #'benchmark-init/show-durations-tabulated
    552   "f" #'elfeed
    553   "k" #'pass
    554   "g" #'gt-translate
    555   "w" #'my-synosaurus-lookup)
    556 
    557 ;; y for copy paste
    558 (general-def
    559   :prefix "C-c y"
    560   "d" #'my-copy-function-name
    561   "b" #'my-copy-buffer-name
    562   "f" #'my-copy-file-path)
    563 
    564 
    565 ;;; other
    566 
    567 (if *is-mac*
    568     (general-def
    569       "C-c <f12>" #'my-persp-scratch-buffer
    570       "s-SPC" #'launcher)
    571   (general-def
    572     "C-c <delete>" #'my-persp-scratch-buffer
    573     "s-SPC" #'xdg-launcher-run-app))
    574 
    575 (when *is-emacs-mac-port*
    576   (general-def
    577     "M-<f11>" #'mac-toggle-frame-fullscreen
    578     "<f12>" #'mac-toggle-frame-fullscreen))
    579 
    580 (provide 'init-kbd)
    581 ;;; init-kbd.el ends here