Files
.emacs.d/lisp/init-base.el
andsy10 f55f775139 feat: Add multiple keyboard bindings and UI improvements
- Add `my-denote-open-metanote` function and keybinding
- Add `discomfort` and `xdg-launcher-run-app` bindings for Linux
- Add `mc/add-cursor-on-click` binding
- Add `guix` package
- Fix pixel-scroll-precision
- Add terminal UI theme improvements for xref and match faces
- Rename functions to `my-` prefix for consistency
- Reorganize org agenda priority grouping
- Switch EMMS default player to VLC
2026-06-17 09:23:37 +08:00

246 lines
6.4 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;; init-base.el --- base config -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
;; general键位绑定
(use-package general)
;; delight修改mode-line中的模式名
(use-package delight
:config
(delight
`((eldoc-mode nil eldoc)
(org-indent-mode nil org-indent)
(desktop-environment-mode nil desktop-environment)
(hs-minor-mode nil hideshow)
(rainbow-delimiters-mode ,(propertize " Rdelimiters" 'face 'rainbow-delimiters-depth-1-face) rainbow-delimiters))))
;; gcmh垃圾回收
(use-package gcmh
:delight
:init
(setq gcmh-idle-delay 'auto
gcmh-auto-idle-delay-factor 10
gcmh-high-cons-threshold #x4000000)
(gcmh-mode))
;; benchmark-init
(use-package benchmark-init
:init
(benchmark-init/activate)
:hook
(after-init . benchmark-init/deactivate))
;; server-mode
(use-package server
:demand t
:hook
(emacs-startup . (lambda ()
(unless (server-running-p)
(server-mode 1)))))
;; recentf最近打开的文件
(if (or (display-graphic-p) *is-android*)
(use-package recentf
:hook
(after-init . recentf-mode)
:init
(setq recentf-max-saved-items 30)
:config
(if *is-android*
(add-to-list 'recentf-exclude "~/storage/shared/my-org-note/journal/.*\\.org\\'")
(add-to-list 'recentf-exclude "~/org/my-org-note/journal/.*\\.org\\'")
(add-to-list 'recentf-exclude "~/org/my-org-note/20260509T232442==agenda--all-my-todos__org\\.org"))
(add-to-list 'recentf-exclude "~/.emacs.d/emms/history")
(add-to-list 'recentf-exclude "~/.emacs.d/bookmarks")))
;; savehist保存命令顺序
(use-package savehist
:hook
(after-init . savehist-mode)
:init
(setq enable-recursive-minibuffers t
history-length 50
savehist-additional-variables '(mark-ring
global-mark-ring
search-ring
regexp-search-ring
extended-command-history)
savehist-ignored-variables '(consult-notes-history)
savehist-autosave-interval 300))
;; saveplace保存光标位置
(use-package saveplace
:hook
(after-init . save-place-mode))
;; restart-emacs
(use-package restart-emacs)
;; async
(if *is-android*
(use-package async
:hook
(after-init . dired-async-mode)
(after-init . async-bytecomp-package-mode)
:init
(setq async-bytecomp-allowed-packages '(all))))
;; autorevert buffer
(use-package autorevert
:delight
:hook
(after-init . global-auto-revert-mode))
;; which-key快捷键提示
(use-package which-key
:delight
:hook
(after-init . which-key-mode))
;; winner-mode保存窗口布局历史
(use-package winner
:hook
(after-init . winner-mode))
;; ibuffer
(use-package ibuffer
:config
(setq ibuffer-saved-filter-groups
'(("Main"
("App" (mode . exwm-mode))
("Scratch" (or
(name . "^*scratch")))
("eww" (or
(mode . eww-mode)
(mode . eww-bookmark-mode)
(mode . eww-buffers-mode)
(mode . eww-history-mode)))
("Calc" (or
(mode . calc-mode)
(mode . calc-trail-mode)))
("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)))
("Config" (or
(mode . conf-mode)
(mode . conf-desktop-mode)
(mode . conf-toml-mode)
(mode . conf-xdefaults-mode)))
("Elisp" (mode . emacs-lisp-mode))
("Scheme" (or
(mode . scheme-mode)))
("Geiser" (or
(name . "^Geiser")
(mode . geiser-repl-mode)
(mode . geiser-debug-mode)
(mode . geiser-messages-mode)
(mode . geiser-debug-mode)
(mode . geiser-doc-mode)
(mode . geiser-autodoc-mode)))
("gptel" (or
(name . "^\\*gptel")))
("Common-lisp" (or
(mode . common-lisp-mode)
(mode . lisp-mode)))
("Sly" (or
(mode . lisp-data-mode)
(mode . sly-db-mode)
(mode . sly-mrepl-mode)
(name . "\\*sly-compilation\\*")
(name . "^\\*img-cache\\*")))
("Text" (or
(mode . org-mode)
(mode . markdown-mode)
(name . "^\\*\\[D\\] FILE backlinks for")))
("Help" (or
(mode . help-mode)
(mode . helpful-mode)))
("Info" (or
(name . "^\\*info")))
("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)
(mode . magit-revision-mode)))
("Directories" (or
(mode . dired-mode)
(name . "^*dirvish")))
("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 . grep-mode)
(mode . occur-mode))))))
(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
ibuffer-use-other-window t
ibuffer-default-sorting-mode 'filename))
(use-package simple
:straight nil
:hook
(after-init . size-indication-mode)
(after-init . column-number-mode)
:config
(setq kill-whole-line t ;kill-line删除换行符
set-mark-command-repeat-pop t)) ;更方便地pop mark
;; 滚动
(unless *is-mac*
(use-package pixel-scroll
:straight nil
:hook
(after-init . pixel-scroll-precision-mode)
:init
(setq scroll-preserve-screen-position t
scroll-conservatively 101)
:config
(advice-add 'pixel-scroll-precision :around
(lambda (orig event)
(cl-letf (((symbol-function 'device-class)
(lambda (&rest _) 'mouse)))
(funcall orig event))))))
;; eww
(use-package eww
:config
(setq eww-auto-rename-buffer t))
;; shr
(use-package shr
:config
(setq shr-inhibit-images nil))
(provide 'init-base)
;;; init-base.el ends here