Files
.emacs.d/lisp/init-kbd.el
User 61d09a4625 refactor(config): Update Emacs configuration across multiple modules
- Prefix gptel backend names with "gptel-" for consistency
- Add denote-org-backlinks-for-heading keybinding
- Refine recentf exclusions for org journal files
- Remove org-default-priority setting
- Add gptel and denote backlink buffer rules to ibuffer
- Enable markdown-ts-mode for Emacs 31+ with truncate lines
- Add electric-pair support for equals sign
- Update popper and window management regexes for new buffer names
2026-05-27 04:06:12 +08:00

367 lines
8.4 KiB
EmacsLisp

;;; init-kbd.el --- keybindings -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
;; 修改mac键位
(when *is-mac*
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'super)
(setq mac-pass-control-to-system nil)
(setq mac-pass-command-to-system nil))
;; god-mode
(general-def god-local-mode-map
"i" 'god-mode-all
"[" 'backward-paragraph
"]" 'forward-paragraph
"." 'repeat
"y" 'yank
"C-c C-<f12>" 'scratch-buffer
"z" 'avy-goto-char
"'" 'avy-goto-word-1
"<f2>" 'open-init-file)
;; g for gptel
(general-def
:prefix "C-c g"
"o" 'gptel
"m" 'gptel-menu
"s" 'gptel-send
"a" 'gptel-agent-project
"t" 'gptel-tools)
(general-def gptel-mode-map
"C-c C-s" 'my-gptel-save-session)
;; u for ui
(general-def
:prefix "C-c u"
"l" 'global-tab-line-mode
"d" 'disable-theme
"R" 'rainbow-mode
"b" 'indent-bars-mode
"t" 'consult-theme
"c" 'my-color-picker
"f" 'describe-face
"r" 'rainbow-delimiters-mode
"k" 'keycast-header-line-mode)
;; f for find and consult command
(general-def
:prefix "C-c f"
"r" 'consult-recent-file
"f" 'consult-fd
"g" 'consult-ripgrep-project
"e" 'consult-flycheck
"l" 'consult-locate
"h" 'consult-fd-home
"m" 'consult-man
"d" 'my-open-current-directory
"j" 'consult-jinx
"k" 'consult-kmacro
"o" 'consult-outline
"i" 'consult-info)
;; t for modes toggle
(general-def
:prefix "C-c t"
"f" 'global-flycheck-mode
"j" 'my/jinx-smart-toggle
"g" 'gptel-mode)
;; o for org-mode
(general-def
:prefix "C-c o"
"f" 'consult-notes
"s" 'consult-org-agenda
"g" 'consult-notes-search-in-all-notes
"C" 'calendar
"c" 'org-capture
"p" 'my-blog-publish
"v" 'my-blog-preview
"d" 'denote
"r" 'denote-rename-file)
;; q for org-ql
(general-def
:prefix "C-c q"
"s" 'org-ql-search
"v" 'org-ql-view)
;; j for journal
(general-def
:prefix "C-c j"
"o" 'my-denote-journal-open-entry
"n" 'denote-journal-new-or-existing-entry)
;; m for media
(general-def
:prefix "C-c m"
"n" 'emms-next
"p" 'emms-previous
"b" 'emms-browser
"q" 'emms-stop
"S" 'emms-toggle-single-track
"l" 'switch-to-emms-playlist
"d" 'my-emms-play-directory)
;; d for dired
(general-def
:prefix "C-c d"
"a" 'dirvish-quick-access
"s" 'dirvish-side
"h" 'dirvish-history-menu)
;; scratch buffer
(if *is-mac*
(general-def "C-c <f12>" 'scratch-buffer)
(general-def "C-c <delete>" 'scratch-buffer))
;; dired
(general-def (dired-mode-map dirvish-mode-map)
"s" 'dirvish-quicksort
"h" 'dirvish-history-menu
"M-," 'scroll-other-window-down
"M-." 'scroll-other-window
"<mouse-2>" 'emms-play-dired
"C-c m a" 'emms-add-dired
"<down>" 'my/dired-next-line
"C-n" 'my/dired-next-line
"n" 'my/dired-next-line
"b" 'dired-up-directory
"C-b" 'dired-up-directory
"<right>" 'dired-find-file
"<left>" 'dired-up-directory
"C-f" 'dired-find-file
"<SPC>" 'dirvish-layout-toggle
"C-s" 'consult-line
"C-r" 'consult-line)
(general-def (dired-mode-map dirvish-mode-map)
:prefix "C-c d"
"d" 'dirvish-setup-menu
"r" 'dirvish-renaming-menu
"v" 'dirvish-vc-menu
"m" 'dirvish-mark-menu
"i" 'dirvish-file-info-menu
"y" 'dirvish-yank-menu)
;; magit
(general-def magit-mode-map
"C-<tab>" 'my-magit-toggle-parent-section
"p" 'magit-section-backward-sibling
"M-p" 'magit-section-backward
"n" 'magit-section-forward-sibling
"M-n" 'magit-section-forward)
;; flycheck
(general-def flycheck-mode-map
"M-{" 'flycheck-previous-error
"M-}" 'flycheck-next-error)
;; vterm
(general-def vterm-mode-map
"M-]" nil
"C-q" 'vterm-send-next-key)
;; eat
(general-def (eat-semi-char-mode-map eat-line-mode-map eat-char-mode-map eat-eshell-semi-char-mode-map eat-eshell-char-mode-map)
"M-[" nil
"M-]" nil)
;; embark
(general-def embark-file-map
"d" 'consult-directory-externally
"p" 'emms-play-dired)
(general-def minibuffer-local-map
"C-c C-e" 'embark-export)
;; markdown
(general-def markdown-mode-map
"M-p" nil
"M-n" nil)
;; org-mode
(general-def org-mode-map
"C-<tab>" 'org-cycle-parent-subtree
"C-c i" 'consult-outline
"C-c t l" 'org-toggle-link-display
"M-{" 'org-previous-visible-heading
"M-}" 'org-next-visible-heading
"C-," 'duplicate-and-move-to-next-line
"C-c o l" 'denote-link
"C-c o L" 'denote-org-link-to-heading
"C-c o b" 'denote-backlinks
"C-c o B" 'denote-org-backlinks-for-heading)
;; hs-hide-mode
(general-def hs-minor-mode-map
"C-c h" 'hs-toggle-hiding
"C-c H" 'hs-hide-all
"C-c S" 'hs-show-all)
;; calendar
(general-def calendar-mode-map
"RET" 'denote-journal-calendar-find-file)
;; ibuffer
(general-def ibuffer-mode-map
"h k" 'my-persp-remove-marked-ibuffers
"h A" 'my-persp-set-marked-ibuffers
"h a" 'my-persp-add-marked-ibuffers)
;; multiple-cursor
(general-def mc/keymap
"<return>" 'newline)
;; emms
(general-def emms-playlist-mode-map
"<prior>" 'emms-previous
"<next>" 'emms-next)
;; perspective
(general-def persp-mode-map
"C-c p c" nil
"C-M-<left>" 'persp-prev
"C-M-<right>" 'persp-next
"C-c p d" 'persp-kill
"C-x M-b" 'persp-ibuffer)
;; visual-line
(general-def visual-line-mode-map
"C-k" 'kill-visual-line)
;; global map with C-c prefix
(general-def
:prefix "C-c"
"c" 'hydra-multiple-cursors/body
"r" 'restart-emacs
"e" 'er/expand-region
"s" 'consult-line
"i" 'consult-imenu
"I" 'consult-imenu-multi
"a" 'org-agenda
"l" 'org-store-link
"k" 'comment-line
"K" 'comment-kill
"E" 'eshell
"C-t" 'trashed
"C-s" 'consult-focus-lines)
;; global map
(general-def
;; god-mode
"M-i" 'god-mode-all
;; buffer, file, and window
"<f2>" 'open-init-file
"<mouse-4>" 'previous-buffer
"<mouse-5>" 'next-buffer
"M-[" 'previous-buffer
"M-]" 'next-buffer
"C-x C-b" 'ibuffer-other-window
"C-x K" 'crux-kill-other-buffers
"C-x b" 'consult-buffer
"C-x C-1" 'delete-other-windows
"C-x C-2" 'split-window-below
"C-x C-3" 'split-window-right
"C-x C-0" 'delete-window
;; edit
"M-c" 'capitalize-dwim
"M-u" 'upcase-dwim
"M-l" 'downcase-dwim
"C-," 'crux-duplicate-current-line-or-region
"C-k" 'crux-smart-kill-line
"C-<backspace>" 'crux-kill-line-backwards
"M-y" 'consult-yank-from-kill-ring
"C-c <backspace>" 'hungry-delete-backward
"C-c C-<backspace>" 'hungry-delete-forward
"M-P" 'drag-stuff-up
"M-N" 'drag-stuff-down
"M-F" 'drag-stuff-right
"M-B" 'drag-stuff-left
"C-M-SPC" 'er/mark-symbol
"M-@" 'er/mark-word
;; undo
"C-/" 'undo-fu-only-undo
"C-?" 'undo-fu-only-redo
"C-x u" 'vundo
;; navigate
"M-p" 'backward-paragraph
"M-n" 'forward-paragraph
"<mouse-2>" 'xref-find-definitions-at-mouse
"C-M-;" 'avy-goto-char
"C-M-'" 'avy-goto-word-1
"M-g g" 'avy-goto-line
"M-g M-g" 'consult-goto-line
;; window
"M-<left>" 'shrink-window-horizontally
"M-<right>" 'enlarge-window-horizontally
"M-<down>" 'shrink-window
"M-<up>" 'enlarge-window
"M-`" 'popper-toggle
"C-M-=" 'popper-toggle-type-delete-other-window
"M-o" 'other-window
"<f10>" 'esw/swap-two-windows
;; other
"C-x r b" 'consult-bookmark
"C-x p b" 'consult-project-buffer
"C-x p E" 'eat-project
"C-;" 'embark-act)
(when *is-android*
(general-def
"C-M-w" 'popper-toggle-type-delete-other-window))
;; expand region
(setq expand-region-reset-fast-key "r")
(setq expand-region-contract-fast-key "c")
;; save-some-buffer时diff更改
(add-to-list 'save-some-buffers-action-alist
(list "d"
(lambda (buffer) (diff-buffer-with-file (buffer-file-name buffer)))
"show diff between the buffer and its file"))
;; multiple-cursors hydra
(defhydra hydra-multiple-cursors ()
"
^Mark^ ^Unmark^ ^Other^
------------------------------------------------------------------
_p_ : prev line _P_ : previous _c_ : edit lines
_n_ : next line _N_ : next _._ : pop
_b_ : prev word _q_ : quit
_f_ : next word _i_ : insert numbers
_B_ : prev symbol
_F_ : next symbol
_s_ : in region
_a_ : all dwim
"
("p" mc/mark-previous-like-this)
("n" mc/mark-next-like-this)
("b" mc/mark-previous-like-this-word)
("f" mc/mark-next-like-this-word)
("B" mc/mark-previous-like-this-symbol)
("F" mc/mark-next-like-this-symbol)
("P" mc/unmark-previous-like-this)
("N" mc/unmark-next-like-this)
("a" mc/mark-all-dwim)
("s" mc/mark-all-in-region)
("c" mc/edit-lines)
("i" mc/insert-numbers)
("." mc/mark-pop)
("q" nil))
(provide 'init-kbd)
;;; init-kbd.el ends here