feat(config): Improve dired, keybindings, terminal UI and add packages

- Add dired buffer killing and custom dirvish layout toggle
- Replace ido with fido-mode in terminal config
- Add custom terminal color theme with 24-bit color support
- Add new packages: tokei, helpful, gptel-magit
- Refactor project keybindings under C-x p prefix
- Add mwim navigation bindings globally
- Improve ibuffer filter groups and consult buffer filters
- Add diff-mode keybindings and refine magit diff display
This commit is contained in:
2026-06-03 20:29:01 +08:00
parent 35fd3dfd27
commit 8db37d1c6d
13 changed files with 235 additions and 83 deletions

View File

@@ -32,11 +32,7 @@
(use-package drag-stuff)
;; mwim更聪明的beginning/end of line
(use-package mwim
:bind (([remap move-beginning-of-line] . mwim-beginning)
([remap move-end-of-line] . mwim-end)
([remap org-beginning-of-line] . mwim-beginning)
([remap org-end-of-line] . mwim-end)))
(use-package mwim)
;; which-key快捷键提示
(use-package which-key
@@ -66,22 +62,31 @@
;; consult搜索与导航
(use-package consult
:config
;; everything
(when *is-windows*
(setq consult-locate-args (encode-coding-string "es.exe -i -p -r" 'gbk))
(setq consult-ripgrep-args (encode-coding-string
"rg --null --line-buffered --color=never --max-columns=1000 --path-separator / --smart-case --no-heading --line-number"
'gbk))
;; set locate arguments
(cond
(*is-windows*
(setq consult-locate-args (encode-coding-string "es.exe -i -p -r" 'gbk)
consult-ripgrep-args (encode-coding-string
"rg --null --line-buffered --color=never --max-columns=1000 --path-separator / --smart-case --no-heading --line-number"
'gbk))
(add-to-list 'process-coding-system-alist '("es" gbk . gbk)))
;; mdfind
(when *is-mac*
(*is-mac*
(setq consult-locate-args "mdfind -name"))
;; plocate
(when *is-linux*
(*is-linux*
(setq consult-locate-args "plocate --basename --ignore-case")))
;; set some buffer filter
(setq consult-buffer-filter
(cl-union consult-buffer-filter
'("^\\*dirvish"
"^PREVIEW"
"^\\*helpful"
"^\\*Help"
"Diff"
"straight"
"\\*Messages\\*")
:test 'equal)))
;; embark快捷指令
(use-package embark
:config
@@ -176,7 +181,10 @@ targets."
(save-place-mode))
;; 撤回增强和跨会话历史
(use-package undo-fu)
(use-package undo-fu
:config
(setq undo-in-region t
undo-fu-allow-undo-in-region t))
(use-package undo-fu-session
:init
@@ -198,13 +206,14 @@ targets."
;; project
(use-package project
:bind
([remap project-vc-dir] . magit-project-status)
:config
(setq project-switch-commands (assq-delete-all 'project-vc-dir project-switch-commands))
(add-to-list 'project-switch-commands '(magit-project-status "Magit" ?v))
(add-to-list 'project-switch-commands '(eat-project "Eat" ?E))
(add-to-list 'project-switch-commands '(consult-ripgrep-project "Ripgrep" ?r)))
(setq project-switch-commands
(seq-uniq (append project-switch-commands
'((magit-project-status "Magit" ?v)
(eat-project "Eat" ?E)
(project-query-replace-regexp "Query Replace" ?R)
(consult-ripgrep-project "Ripgrep" ?r))))))
;; ibuffer
(use-package ibuffer
@@ -227,7 +236,8 @@ targets."
("Config" (or
(mode . conf-mode)
(mode . conf-desktop-mode)
(mode . conf-toml-mode)))
(mode . conf-toml-mode)
(mode . conf-xdefaults-mode)))
("Elisp" (mode . emacs-lisp-mode))
("Scheme" (or
(mode . scheme-mode)))
@@ -254,14 +264,9 @@ targets."
(mode . org-mode)
(mode . markdown-mode)
(name . "^\\*\\[D\\] FILE backlinks for")))
("Emacs" (or
(name . "^\\*Help\\*$")
(name . "^\\*Custom.*")
(name . "^\\*EMMS Playlist\\*")
(name . "^\\*Messages\\*$")
(name . "*Chinese-word-segmentation*")
(name . "^*Buffer List*")
(name . "\\*discomfort\\*")))
("Help" (or
(mode . help-mode)
(mode . helpful-mode)))
("Info" (or
(name . "^\\*info")))
("Magit" (or
@@ -275,7 +280,25 @@ targets."
("Directories" (or
(mode . dired-mode)
(name . "^*dirvish")))
("Diff" (name . "^*Diff")))))
("Grep" (or
(mode . grep-mode)
(mode . rg-mode)
(mode . xref--xref-buffer-mode)
(mode . xref-edit-mode)))
("Diff" (name . "^*Diff"))
("Emacs" (or
(name . "^\\*Help\\*$")
(name . "^\\*Custom.*")
(name . "^\\*EMMS Playlist\\*")
(name . "^\\*Messages\\*$")
(name . "*Chinese-word-segmentation*")
(name . "^*Buffer List*")
(name . "\\*discomfort\\*")
(mode . calendar-mode)
(mode . calc-mode)
(mode . calc-trail-mode)
(mode . grep-mode)
(mode . occur-mode))))))
(add-hook 'ibuffer-hook
(lambda () (ibuffer-switch-to-saved-filter-groups "Main")
@@ -372,7 +395,7 @@ targets."
(unless *is-android* (which-key-enable-god-mode-support))
(setq god-mode-enable-function-key-translation nil
god-exempt-major-modes
(delete-dups (append '(diff-mode exwm-mode) god-exempt-major-modes))
(cl-union '(diff-mode exwm-mode) god-exempt-major-modes :test 'equal)
god-mode-lighter-string "THANK-GOD-MODE")
(defun my-sync-god-mode-lighter-face (&rest _)
@@ -408,14 +431,17 @@ targets."
(consult-customize consult-source-buffer :hidden t :default nil)
(add-to-list 'consult-buffer-sources persp-consult-source))
(setq switch-to-prev-buffer-skip
(lambda (win buff bury-or-kill)
(not (persp-is-current-buffer buff))))
(lambda (win buff bury-or-kill)
(or (not (persp-is-current-buffer buff))
(cl-some (lambda (re) (string-match-p re (buffer-name buff)))
consult-buffer-filter))))
(setq persp-initial-frame-name "main"))
;; magit
(use-package magit
:config
(setq magit-bind-magit-project-status nil))
(setq magit-bind-magit-project-status nil
magit-diff-refine-hunk 'all))
;; git-timemachine
(use-package git-timemachine)
@@ -436,6 +462,25 @@ targets."
emms-info-functions '(emms-info-native))
(emms-history-load))
;; tokei
(use-package tokei)
;; helpful
(use-package helpful
:bind
(([remap describe-function] . helpful-callable)
([remap describe-command] . helpful-command)
([remap describe-variable] . helpful-variable)
([remap describe-key] . helpful-key)
([remap describe-symbol] . helpful-symbol)
:map emacs-lisp-mode-map
("C-c C-d C-d" . helpful-at-point)
:map lisp-interaction-mode-map
("C-c C-d C-d" . helpful-at-point)
:map helpful-mode-map
("C-x K" . helpful-kill-buffers)
("r" . remove-hook-at-point)))
(provide 'init-package)
;;; init-package.el ends here