.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 (10142B)


      1 ;;; init-kbd.el --- keybindings -*- lexical-binding: t -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 ;; god-mode
      8 (general-def god-local-mode-map
      9   "i" #'god-mode-all
     10   "[" #'backward-paragraph
     11   "]" #'forward-paragraph
     12   "." #'repeat
     13   "y" #'yank
     14   "C-c C-<f12>" #'my-scratch-buffer
     15   "z" #'avy-goto-char
     16   "'" #'avy-goto-word-1
     17   "<f2>" #'open-init-file)
     18 
     19 ;; g for gptel
     20 (general-def
     21   :prefix "C-c g"
     22   "g" #'gptel
     23   "m" #'gptel-menu
     24   "s" #'gptel-send
     25   "a" #'gptel-agent
     26   "t" #'gptel-tools
     27   "p" #'pi-coding-agent)
     28 
     29 (general-def gptel-mode-map
     30   "C-c C-s" #'my-gptel-save-session
     31   "C-c C-k" #'gptel-abort)
     32 
     33 ;; pi
     34 (general-def (pi-coding-agent-input-mode-map
     35               pi-coding-agent-chat-mode-map)
     36   "C-c C-q" #'pi-coding-agent-quit
     37   "C-c TAB" #'pi-coding-agent-open-input
     38   "C-c C-t" #'pi-coding-agent-tree-browser)
     39 
     40 ;; elfeed
     41 (general-def elfeed-search-mode-map
     42   "v" #'my-elfeed-search-preview-other-window
     43   "TAB" #'my-elfeed-search-preview-other-window)
     44 
     45 ;; u for ui
     46 (general-def
     47   :prefix "C-c u"
     48   "l" #'global-tab-line-mode
     49   "d" #'disable-theme
     50   "R" #'rainbow-mode
     51   "i" #'indent-bars-mode
     52   "t" #'consult-theme
     53   "c" #'consult-colors-emacs
     54   "f" #'describe-face
     55   "r" #'rainbow-delimiters-mode
     56   "k" #'keycast-header-line-mode
     57   "w" #'global-whitespace-mode)
     58 
     59 ;; w for whitespace
     60 (general-def
     61   :prefix "C-c w"
     62   "f" #'fixup-whitespace
     63   "r" #'whitespace-report
     64   "o" #'global-whitespace-toggle-options
     65   "c" #'whitespace-cleanup)
     66 
     67 ;; f for find and consult command
     68 (general-def
     69   :prefix "C-c f"
     70   "r" #'consult-recent-file
     71   "f" #'consult-find
     72   "g" #'consult-grep
     73   "G" #'consult-git-grep
     74   "e" #'consult-flycheck
     75   "l" #'consult-locate
     76   "h" #'consult-fd-home
     77   "m" #'consult-man
     78   "d" #'my-open-current-directory
     79   "J" #'consult-register
     80   "j" #'consult-jinx
     81   "k" #'consult-kmacro
     82   "o" #'consult-outline
     83   "i" #'consult-info
     84   "s" #'consult-focus-lines
     85   "t" #'consult-ghostel)
     86 
     87 ;; p for project
     88 (general-def
     89   :prefix "C-x p"
     90   "b" #'consult-project-buffer
     91   "t" #'ghostel-project
     92   "g" #'my-consult-git-grep-project
     93   "r" #'project-find-regexp
     94   "R" #'project-or-external-find-regexp
     95   "q" #'project-query-replace-regexp
     96   "v" #'magit-project-status
     97   "V" #'project-vc-dir
     98   "i" #'project-ibuffer
     99   "a" #'my-pi-coding-agent)
    100 
    101 ;; v for version control
    102 (general-def
    103   :prefix "C-x v"
    104   "c" #'magit-clone
    105   "i" #'magit-init
    106   "l" #'magit-log-buffer-file)
    107 
    108 ;; t for modes toggle
    109 (general-def
    110   :prefix "C-c t"
    111   "f" #'flycheck-mode
    112   "j" #'jinx-mode
    113   "g" #'gptel-mode
    114   "h" #'global-diff-hl-mode)
    115 
    116 ;; o for org-mode
    117 (general-def
    118   :prefix "C-c o"
    119   "f" #'my-denote-find-file
    120   "F" #'my-blog-find-file
    121   "g" #'consult-denote-grep
    122   "G" #'my-blog-grep
    123   "s" #'consult-org-agenda
    124   "C" #'calendar
    125   "c" #'org-capture
    126   "d" #'denote
    127   "r" #'denote-rename-file-date
    128   "R" #'denote-rename-file
    129   "m" #'my-denote-open-metanote
    130   "q" #'org-ql-search)
    131 
    132 (general-def
    133   "C-c a" 'org-agenda
    134   "C-c l" #'org-store-link)
    135 
    136 ;; j for journal
    137 (general-def
    138   :prefix "C-c j"
    139   "o" #'my-denote-journal-open-entry
    140   "n" #'denote-journal-new-or-existing-entry)
    141 
    142 ;; m for media
    143 (general-def
    144   :prefix "C-c m"
    145   "n" #'emms-next
    146   "p" #'emms-previous
    147   "b" #'emms-browser
    148   "s" #'emms-start
    149   "q" #'emms-stop
    150   "P" #'emms-pause
    151   "S" #'emms-toggle-single-track
    152   "l" #'emms-playlist-mode-switch-buffer
    153   "d" #'emms-play-directory)
    154 
    155 ;; d for dired
    156 (general-def
    157   :prefix "C-c d"
    158   "a" #'dirvish-quick-access
    159   "s" #'my-speedbar
    160   "h" #'dirvish-history-menu
    161   "f" #'dirvish-fd
    162   "F" #'dirvish-fd-switches-menu
    163   "t" #'trashed
    164   "d" #'discomfort)
    165 
    166 ;; x for some other command
    167 (general-def
    168   :prefix "C-c x"
    169   "e" #'eshell
    170   "t" #'ghostel
    171   "p" #'proced
    172   "b" #'benchmark-init/show-durations-tree
    173   "B" #'benchmark-init/show-durations-tabulated
    174   "S" #'syncthing
    175   "f" #'elfeed
    176   "k" #'pass
    177   "g" #'gt-translate
    178   "s" #'my-synosaurus-lookup)
    179 
    180 ;; r for replacement
    181 (general-def
    182   :prefix "C-c r"
    183   "h" #'substitute-target-in-paragraph
    184   "p" #'substitute-target-in-page
    185   "d" #'substitute-target-in-defun
    186   "b" #'substitute-target-in-buffer
    187   "l" #'substitute-target-below-point
    188   "u" #'substitute-target-above-point)
    189 
    190 ;; scratch buffer
    191 (if *is-mac*
    192     (general-def "C-c <f12>" #'my-scratch-buffer)
    193   (general-def "C-c <delete>" #'my-scratch-buffer))
    194 
    195 ;; dired
    196 (general-def (dired-mode-map dirvish-mode-map)
    197   "TAB" #'dirvish-subtree-toggle
    198   "C-<tab>" #'dirvish-subtree-remove
    199   "s" #'dirvish-quicksort
    200   "h" #'dirvish-history-menu
    201   "M-," #'scroll-other-window-down
    202   "M-." #'scroll-other-window
    203   "C-c m a" #'emms-add-dired
    204   "b" #'dired-up-directory
    205   "C-b" #'backward-char
    206   "C-f" #'forward-char
    207   "<right>" #'dired-find-file
    208   "<left>" #'dired-up-directory
    209   "C-/" #'dired-undo
    210   "<SPC>" #'my-dirvish-layout-toggle
    211   "C-c C-r" #'dired-rsync
    212   "e" #'ediff)
    213 
    214 (general-def (dired-mode-map dirvish-mode-map)
    215   :prefix "C-c d"
    216   "u" #'dirvish-setup-menu
    217   "r" #'dirvish-renaming-menu
    218   "v" #'dirvish-vc-menu
    219   "m" #'dirvish-mark-menu
    220   "i" #'dirvish-file-info-menu
    221   "y" #'dirvish-yank-menu)
    222 
    223 ;; speedbar
    224 (general-def speedbar-mode-map
    225   "^" #'speedbar-up-directory
    226   "<tab>" #'my-speedbar-tab)
    227 
    228 ;; magit
    229 (general-def (magit-mode-map tokei-mode-map)
    230   "C-<tab>" #'my-magit-toggle-parent-section)
    231 
    232 ;; sly
    233 (general-def (sly-mode-map sly-editing-mode-map)
    234   "M-p" #'backward-paragraph
    235   "M-n" #'forward-paragraph)
    236 
    237 (general-def sly-prefix-map
    238   "M-p" #'sly-pprint-eval-last-expression
    239   "C-p" #'sly-previous-note
    240   "C-n" #'sly-next-note)
    241 
    242 ;; ghostel
    243 (general-def (ghostel-mode-map
    244               ghostel-semi-char-mode-map
    245               ghostel-line-mode-map)
    246   "M-]" nil
    247   "C-q" #'ghostel-send-next-key)
    248 
    249 (general-def ghostel-char-mode-map
    250   "M-]" nil)
    251 
    252 (general-def ghostel-semi-char-mode-map
    253   "M-o" nil
    254   "C-c h" #'consult-ghostel-history
    255   "C-k" #'my-ghostel-send-C-k-and-kill)
    256 
    257 ;; embark
    258 (general-def embark-file-map
    259   "d" #'consult-directory-externally
    260   "p" #'emms-play-dired)
    261 
    262 (general-def minibuffer-local-map
    263   "C-c C-e" #'embark-export)
    264 
    265 ;; completion
    266 (general-def completion-list-mode-map
    267   "M-n" #'minibuffer-next-completion
    268   "M-p" #'minibuffer-previous-completion)
    269 
    270 ;; markdown
    271 (general-def markdown-mode-map
    272   "M-p" nil
    273   "M-n" nil)
    274 
    275 ;; org-mode
    276 (general-def org-mode-map
    277   "C-<tab>" #'org-cycle-parent-subtree
    278   "M-g i" #'consult-outline
    279   "M-g M-i" #'consult-outline
    280   "C-c t l" #'org-toggle-link-display
    281   "M-{" #'backward-paragraph
    282   "M-}" #'forward-paragraph
    283   "C-," #'crux-duplicate-current-line-or-region
    284   "C-c o l" #'denote-link
    285   "C-c o L" #'denote-org-link-to-heading
    286   "C-c o b" #'my-denote-find-backlink-with-location
    287   "C-c o B" #'my-denote-org-find-backlink-for-heading-with-location
    288   "C-c o t" #'my-org-tree-slide-start)
    289 
    290 ;; org-tree-slide-mode
    291 (general-def org-tree-slide-mode-map
    292   "<left>" #'org-tree-slide-move-previous-tree
    293   "<right>" #'org-tree-slide-move-next-tree
    294   "C-c o t" #'my-org-tree-slide-stop
    295   "q" #'my-org-tree-slide-stop
    296   "M-v" #'scroll-down-command)
    297 
    298 ;; hs-hide-mode
    299 (general-def hs-minor-mode-map
    300   "C-c h" #'hs-toggle-hiding
    301   "C-c H" #'hs-hide-all
    302   "C-c S" #'hs-show-all)
    303 
    304 ;; calendar
    305 (general-def calendar-mode-map
    306   "RET" #'denote-journal-calendar-find-file)
    307 
    308 ;; ibuffer
    309 (general-def ibuffer-mode-map
    310   "h k" #'my-persp-remove-marked-ibuffers
    311   "h A" #'my-persp-set-marked-ibuffers
    312   "h a" #'my-persp-add-marked-ibuffers)
    313 
    314 ;; multiple-cursor
    315 (general-def mc/keymap
    316   "<return>" #'newline)
    317 
    318 ;; emms
    319 (general-def emms-playlist-mode-map
    320   "<prior>" #'emms-previous
    321   "<next>" #'emms-next
    322   "C-c C-s" #'emms-history-save)
    323 
    324 ;; perspective
    325 (general-def persp-mode-map
    326   "C-c p c" nil
    327   "C-c p d" #'persp-kill
    328   "C-x M-b" #'persp-ibuffer)
    329 
    330 ;; info
    331 (general-def Info-mode-map
    332   "M-n" #'forward-paragraph)
    333 
    334 ;; diff
    335 (general-def diff-mode-map
    336   "M-o" #'other-window)
    337 
    338 ;; discomfort
    339 (general-def discomfort-mode-map
    340   "p" #'previous-line
    341   "P" #'discomfort-poweroff)
    342 
    343 ;; eww
    344 (general-def eww-mode-map
    345   "M-n" #'forward-paragraph
    346   "M-p" #'backward-paragraph
    347   "p" #'shr-previous-link
    348   "n" #'shr-next-link
    349   "P" #'eww-previous-url
    350   "N" #'eww-next-url)
    351 
    352 ;; global map
    353 (general-def
    354 
    355   ;; god-mode
    356   "M-i" #'god-mode-all
    357 
    358   ;; buffer, file, and window
    359   "<f2>" #'open-init-file
    360   "<mouse-4>" #'previous-buffer
    361   "<mouse-5>" #'next-buffer
    362   "M-[" #'previous-buffer
    363   "M-]" #'next-buffer
    364   "C-x C-b" #'ibuffer-other-window
    365   "C-x K" #'crux-kill-other-buffers
    366   "C-x b" #'consult-buffer
    367   "C-x C-1" #'delete-other-windows
    368   "C-x C-2" #'split-window-below
    369   "C-x C-3" #'split-window-right
    370   "C-x C-0" #'delete-window
    371 
    372   ;; edit
    373   "M-c" #'capitalize-dwim
    374   "M-u" #'upcase-dwim
    375   "M-l" #'downcase-dwim
    376   "C-," #'crux-duplicate-current-line-or-region
    377   "C-<backspace>" #'crux-kill-line-backwards
    378   "M-y" #'consult-yank-from-kill-ring
    379   "C-c <backspace>" #'hungry-delete-backward
    380   "C-c C-<backspace>" #'hungry-delete-forward
    381   "M-P" #'drag-stuff-up
    382   "M-N" #'drag-stuff-down
    383   "M-F" #'drag-stuff-right
    384   "M-B" #'drag-stuff-left
    385   "C-M-SPC" #'er/mark-symbol
    386   "M-@" #'er/mark-word
    387   "C-c e" #'er/expand-region
    388   "C-c c" #'hydra-multiple-cursors/body
    389   "C-S-<mouse-1>" #'mc/add-cursor-on-click
    390   "C-c k" #'comment-kill
    391   "M-z" #'avy-zap-to-char-dwim
    392   "M-Z" #'avy-zap-up-to-char-dwim
    393 
    394   ;; undo
    395   "C-/" #'undo-fu-only-undo
    396   "C-?" #'undo-fu-only-redo
    397   "C-x u" #'vundo
    398 
    399   ;; navigate
    400   "M-p" #'backward-paragraph
    401   "M-n" #'forward-paragraph
    402   "<mouse-2>" #'xref-find-definitions-at-mouse
    403   "C-M-;" #'avy-goto-char
    404   "C-M-'" #'avy-goto-word-1
    405   "M-g g" #'avy-goto-line
    406   "C-c s" #'consult-line
    407   "M-g M-g" #'consult-goto-line
    408   "M-g i" #'consult-imenu
    409   "M-g I" #'consult-imenu-multi
    410   "M-g M-i" #'consult-imenu
    411 
    412   ;; window
    413   "C-M-<left>" #'shrink-window-horizontally
    414   "C-M-<right>" #'enlarge-window-horizontally
    415   "C-M-<down>" #'shrink-window
    416   "C-M-<up>" #'enlarge-window
    417   "M-`" #'popper-toggle
    418   "C-M-=" #'popper-toggle-type-delete-other-window
    419   "M-o" #'other-window
    420   "M-O" #'other-window-backward
    421 
    422   ;; other
    423   "C-x r b" #'consult-bookmark
    424   "C-;" #'embark-act
    425   "M-s M-b" #'eww-list-bookmarks)
    426 
    427 (cond
    428  (*is-android*
    429   (general-def
    430     "C-M-w" #'popper-toggle-type-delete-other-window))
    431  (*is-linux*
    432   (general-def
    433     "M-S-SPC" #'xdg-launcher-run-app))
    434  (t nil))
    435 
    436 (provide 'init-kbd)
    437 ;;; init-kbd.el ends here