chore(config): Update Emacs configuration with ibuffer and perspective improvements

This commit is contained in:
2026-05-11 22:12:31 +08:00
parent aa4dea523e
commit 61edd16f0c
11 changed files with 102 additions and 17 deletions

1
.gitignore vendored
View File

@@ -2,7 +2,6 @@
!init.el
!early-init.el
!custom.el
!lisp/
!lisp/**/
!lisp/**/*.el

View File

@@ -42,7 +42,7 @@
(use-package delight
:init
(delight '((eldoc-mode nil eldoc)
(org-indent-mode nil org)
(org-indent-mode nil org-indent)
(desktop-environment-mode nil desktop-environment)
(hs-minor-mode nil hideshow))))

View File

@@ -132,9 +132,7 @@
(add-hook 'exwm-init-hook
(lambda ()
(if (zerop (shell-command "pgrep -x fcitx5"))
(restart-fcitx5)
(start-process-shell-command "fcitx5" nil "fcitx5 -d"))
(restart-fcitx5)
(unless (zerop (shell-command "pgrep -x mihomo"))
(start-process-shell-command "mihomo" nil "mihomo -d ~/.config/mihomo/"))
(start-process-shell-command "xrandr-refresh" nil "xrandr --output DP-4 --mode 2560x1440 --rate 165.00")

View File

@@ -132,6 +132,36 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog
(magit-section-up)
(magit-section-toggle (magit-section-at)))
(defun my-persp-remove-marked-ibuffers ()
"Remove marked buffers from perspective."
(interactive)
(let ((buffers (ibuffer-get-marked-buffers)))
(dolist (buf buffers)
(persp-remove-buffer buf))))
(defun my-persp-add-marked-ibuffers (persp-name)
"Add marked buffers to perspective."
(interactive
(list (completing-read "Perspective: "
(persp-names)
nil nil)))
(let ((buffers (ibuffer-get-marked-buffers)))
(persp-switch persp-name)
(dolist (buf buffers)
(persp-add-buffer buf))))
(defun my-persp-set-marked-ibuffers (persp-name)
"Set marked buffers to perspective."
(interactive
(list (completing-read "Perspective: "
(persp-names)
nil nil)))
(let ((buffers (ibuffer-get-marked-buffers)))
(persp-switch persp-name)
(dolist (buf buffers)
(persp-set-buffer buf))))
(provide 'init-kbd-func)
;;; init-kbd-func.el ends here

View File

@@ -100,8 +100,8 @@
;; scratch buffer
(if *is-mac*
(general-def "C-c <f12>" 'persp-switch-to-scratch-buffer)
(general-def "C-c <delete>" 'persp-switch-to-scratch-buffer))
(general-def "C-c <f12>" 'scratch-buffer)
(general-def "C-c <delete>" 'scratch-buffer))
;; dired
(general-def (dired-mode-map dirvish-mode-map)
@@ -177,6 +177,12 @@
(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)
@@ -191,7 +197,8 @@
"C-c p c" nil
"C-M-<left>" 'persp-prev
"C-M-<right>" 'persp-next
"C-c p d" 'persp-kill)
"C-c p d" 'persp-kill
"C-x M-b" 'persp-ibuffer)
;; global map with C-c prefix
(general-def

View File

@@ -194,13 +194,59 @@ targets."
("C-x p b" . consult-project-buffer))
:config
(setq projectile-enable-caching t))
;; ibuffer
(use-package ibuffer
:config
(setq ibuffer-saved-filter-groups
'(("Main"
("App" (mode . exwm-mode))
("Scratch" (or
(name . "^*scratch")))
("Shell" (or
(mode . eshell-mode)
(mode . eat-mode)
(mode . vterm-mode)))
("Scripts" (or
(mode . shell-script-mode)
(mode . shell-mode)
(mode . sh-mode)
(mode . lua-mode)
(mode . bat-mode)))
("Elisp" (mode . emacs-lisp-mode))
("Scheme" (or
(mode . scheme-mode)
(name . "^*Geiser")))
("Text" (or
(mode . org-mode)
(mode . markdown-mode)))
("Emacs" (or
(name . "^\\*Help\\*$")
(name . "^\\*Custom.*")
(name . "^\\*Org Agenda\\*$")
(name . "^\\*info\\*$")
(name . "^\\*Backtrace\\*$")
(name . "^\\*Messages\\*$")
(name . "*Chinese-word-segmentation*")
(name . "^*Buffer List*")
(name . "*Calendar*")))
("Magit" (or
(mode . magit-blame-mode)
(mode . magit-cherry-mode)
(mode . magit-diff-mode)
(mode . magit-log-mode)
(mode . magit-process-mode)
(mode . magit-status-mode)))
("Directories" (mode . dired-mode))
("Diff" (name . "^*Diff")))))
(use-package ibuffer-projectile
:init (add-hook 'ibuffer-hook
(lambda ()
(ibuffer-projectile-set-filter-groups)
(unless (eq ibuffer-sorting-mode 'alphabetic)
(ibuffer-do-sort-by-alphabetic)))))
(add-hook 'ibuffer-hook
(lambda () (ibuffer-switch-to-saved-filter-groups "Main")
(unless (eq ibuffer-sorting-mode 'alphabetic)
(ibuffer-do-sort-by-alphabetic))))
(setq ibuffer-show-empty-filter-groups nil)
(setq ibuffer-use-other-window t))
;; avy中文支持
(use-package ace-pinyin
@@ -296,7 +342,7 @@ targets."
(setq switch-to-prev-buffer-skip
(lambda (win buff bury-or-kill)
(not (persp-is-current-buffer buff))))
(setq persp-initial-frame-name "desktop"))
(setq persp-initial-frame-name "main"))
;; magit
(use-package magit)

View File

@@ -105,6 +105,8 @@
'ripgrep)
(t 'grep)))
(setq switch-to-buffer-obey-display-actions t)
(provide 'init-startup)
;;; init-startup.el ends here

View File

@@ -32,6 +32,7 @@
;; org-mode美化
(use-package olivetti
:delight
:init
(add-hook 'olivetti-mode-hook
(lambda ()

View File

@@ -32,6 +32,7 @@
"\\*Edit Annotation.*\\*"
"\\*Flutter\\*"
"\\*Ibuffer\\*"
"Buffers\\*$"
"\\*Geiser Debug\\*"
"\\*Kimi-Code\\*"
"\\*gptel-agent:.*\\*"
@@ -50,6 +51,7 @@
process-menu-mode list-environment-mode cargo-process-mode
youdao-dictionary-mode osx-dictionary-mode fanyi-mode
gptel-mode
ibuffer-mode
"^\\*eshell.*\\*.*$" eshell-mode
"^\\*shell.*\\*.*$" shell-mode

View File

@@ -33,7 +33,7 @@
`(org-block-end-line ((,class (:foreground ,base01 :overline t :slant italic :extend t))))
`(org-priority ((,class (:foreground ,green :weight bold))))
`(org-checkbox ((,class (:foreground ,base0 :weight bold))))
`(denote-journal-calendar ((,class (:foreground ,red :slant italic))))
`(denote-journal-calendar ((,class (:foreground ,cyan :slant italic))))
`(font-lock-keyword-face ((,class (:foreground ,cyan :weight bold))))
`(font-lock-doc-face ((,class (:foreground ,green :slant normal))))
`(font-lock-string-face ((,class (:foreground ,green))))

View File

@@ -33,7 +33,7 @@
`(org-block-end-line ((,class (:foreground ,base01 :overline t :slant italic :extend t))))
`(org-priority ((,class (:foreground ,green :weight bold))))
`(org-checkbox ((,class (:foreground ,base0 :weight bold))))
`(denote-journal-calendar ((,class (:foreground ,red :slant italic))))
`(denote-journal-calendar ((,class (:foreground ,cyan :slant italic))))
`(font-lock-keyword-face ((,class (:foreground ,cyan :weight bold))))
`(font-lock-doc-face ((,class (:foreground ,green :slant normal))))
`(font-lock-string-face ((,class (:foreground ,green))))