;;; 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-" 'scratch-buffer "z" 'avy-goto-char "'" 'avy-goto-word-1 "" 'open-init-file) ;; g for gptel (general-def :prefix "C-c g" "o" 'gptel "m" 'gptel-menu "s" 'gptel-send "a" 'gptel-agent "t" 'gptel-tools) (general-def gptel-mode-map "C-c C-s" 'my-gptel-save-session "C-c C-k" 'gptel-abort) ;; 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 "w" 'global-whitespace-mode) ;; f for find and consult command (general-def :prefix "C-c f" "r" 'consult-recent-file "f" 'consult-fd "g" 'consult-ripgrep "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) ;; p for project (general-def :prefix "C-x p" "b" 'consult-project-buffer "E" 'eat-project "r" 'my-consult-ripgrep-project "R" 'project-query-replace-regexp "v" 'magit-project-status "V" 'project-vc-dir "a" 'my-gptel-agent-project "i" 'projectile-ibuffer) ;; g for magit (general-unbind "C-x g") (general-def :prefix "C-x g" "s" 'magit-status "c" 'magit-clone "d" 'magit-diff "b" 'magit-branch "B" 'magit-blame) ;; t for modes toggle (general-def :prefix "C-c t" "f" '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 "p" 'my-note-push "v" 'my-blog-preview "d" 'denote "r" 'denote-rename-file-date "R" 'denote-rename-file "m" 'my-denote-open-metanote) ;; 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 "s" 'emms-start "q" 'emms-stop "P" 'emms-pause "S" 'emms-toggle-single-track "l" 'emms-playlist-mode-switch-buffer "d" 'emms-play-directory) ;; d for dired (general-def :prefix "C-c d" "a" 'dirvish-quick-access "s" 'dirvish-side "h" 'dirvish-history-menu "f" 'dirvish-fd "F" 'dirvish-fd-switches-menu "t" 'trashed "d" 'discomfort) ;; x for some other command (general-def :prefix "C-c x" "e" 'eshell "E" 'eat) ;; scratch buffer (if *is-mac* (general-def "C-c " 'scratch-buffer) (general-def "C-c " '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 "" 'emms-play-dired "C-c m a" 'emms-add-dired "" 'my-dired-next-line "C-n" 'my-dired-next-line "n" 'my-dired-next-line "b" 'dired-up-directory "C-b" 'backward-char "C-f" 'forward-char "" 'dired-find-file "" 'dired-up-directory "C-/" 'dired-undo "" 'my-dirvish-layout-toggle "C-s" 'consult-line "C-r" 'consult-line) (general-def (dired-mode-map dirvish-mode-map) :prefix "C-c d" "u" '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 tokei-mode-map) "C-" '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) ;; sly-mode (general-def (sly-mode-map sly-editing-mode-map) "M-p" 'backward-paragraph "M-n" 'forward-paragraph "M-{" 'sly-previous-note "M-}" 'sly-next-note) ;; 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) ;; completion (general-def completion-list-mode-map "M-n" 'minibuffer-next-completion "M-p" 'minibuffer-previous-completion) ;; markdown (general-def markdown-mode-map "M-p" nil "M-n" nil) ;; org-mode (general-def org-mode-map "C-" 'org-cycle-parent-subtree "M-g i" 'consult-outline "M-g M-i" 'consult-outline "C-c t l" 'org-toggle-link-display "M-{" 'org-previous-visible-heading "M-}" 'org-next-visible-heading "C-," 'crux-duplicate-current-line-or-region "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 "C-a" 'mwim-beginning "C-e" 'mwim-end "C-c o t" 'my-org-tree-slide-start) ;; org-tree-slide-mode (general-def org-tree-slide-mode-map "" 'org-tree-slide-move-previous-tree "" 'org-tree-slide-move-next-tree "C-c o t" 'my-org-tree-slide-stop "ESC" 'my-org-tree-slide-stop "q" 'my-org-tree-slide-stop) ;; 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 "" 'newline) ;; emms (general-def emms-playlist-mode-map "" 'emms-previous "" 'emms-next "C-c C-s" 'emms-history-save) ;; perspective (general-def persp-mode-map "C-c p c" nil "C-c p d" 'persp-kill "C-x M-b" 'persp-ibuffer) ;; info (general-def Info-mode-map "M-n" 'forward-paragraph) ;; diff (general-def diff-mode-map "M-o" 'other-window) ;; discomfort (general-def discomfort-mode-map "p" 'previous-line "P" 'discomfort-poweroff) ;; eww (general-def eww-mode-map "M-n" 'forward-paragraph "M-p" 'backward-paragraph) ;; 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 "a" 'org-agenda "l" 'org-store-link "k" 'comment-line "K" 'comment-kill "C-s" 'consult-focus-lines) ;; global map (general-def ;; god-mode "M-i" 'god-mode-all ;; buffer, file, and window "" 'open-init-file "" 'previous-buffer "" '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-" 'crux-kill-line-backwards "M-y" 'consult-yank-from-kill-ring "C-c " 'hungry-delete-backward "C-c C-" '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 "C-S-" 'mc/add-cursor-on-click ;; undo "C-/" 'undo-fu-only-undo "C-?" 'undo-fu-only-redo "C-x u" 'vundo ;; navigate "C-a" 'mwim-beginning "C-e" 'mwim-end "M-p" 'backward-paragraph "M-n" 'forward-paragraph "" '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 "M-g i" 'consult-imenu "M-g I" 'consult-imenu-multi "M-g M-i" 'consult-imenu ;; window "C-M-" 'shrink-window-horizontally "C-M-" 'enlarge-window-horizontally "C-M-" 'shrink-window "C-M-" 'enlarge-window "M-`" 'popper-toggle "C-M-=" 'popper-toggle-type-delete-other-window "M-o" 'other-window "" 'esw/swap-two-windows ;; other "C-x r b" 'consult-bookmark "C-x v =" 'magit-diff-buffer-file "C-;" 'embark-act) (cond (*is-android* (general-def "C-M-w" 'popper-toggle-type-delete-other-window)) (*is-linux* (general-def "M-S-SPC" 'xdg-launcher-run-app)) (t nil)) ;; 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