From a47205eef4e283483f28373d84f33b4437f74b65 Mon Sep 17 00:00:00 2001 From: andsy10 Date: Wed, 15 Apr 2026 03:11:12 +0800 Subject: [PATCH] Config: replace smart-mode-line by simple-modeline, optimize org-ql config, add basic guile support --- init.el | 1 + lisp/fix-theme-colors.el | 20 +++++------ lisp/init-completion.el | 15 ++++++-- lisp/init-dired.el | 34 ++++++++++++------ lisp/init-elpa.el | 24 +++++++++---- lisp/init-exwm.el | 11 ++++++ lisp/init-kbd.el | 2 ++ lisp/init-org-refile.el | 5 +-- lisp/init-org.el | 72 +++++++++++++++++++++++++-------------- lisp/init-package.el | 13 ++++--- lisp/init-segmentation.el | 23 +++++++------ lisp/init-startup.el | 2 +- lisp/init-ui.el | 21 ++++++++---- 13 files changed, 163 insertions(+), 80 deletions(-) create mode 100644 lisp/init-exwm.el diff --git a/init.el b/init.el index da18eca..845ea53 100644 --- a/init.el +++ b/init.el @@ -21,6 +21,7 @@ (require 'init-org-refile) (require 'init-completion) (require 'init-window) +(require 'init-exwm) (require 'init-dired) (require 'init-workspace) (require 'init-ui) diff --git a/lisp/fix-theme-colors.el b/lisp/fix-theme-colors.el index 2304917..028cb37 100644 --- a/lisp/fix-theme-colors.el +++ b/lisp/fix-theme-colors.el @@ -127,7 +127,7 @@ (insert-file-contents filepath) (buffer-string))) (changes 0)) - + ;; Fix space-separated colors (dolist (fix theme-fixes-space) (let ((old-color (car fix)) @@ -139,7 +139,7 @@ (format "\"%s\"" new-color) content)) (setq changes (1+ changes))))) - + ;; Fix invalid colors (dolist (fix theme-fixes-invalid) (let ((old-color (car fix)) @@ -151,7 +151,7 @@ (format "\"%s\"" new-color) content)) (setq changes (1+ changes))))) - + ;; Fix :box properties (dolist (fix theme-fixes-box) (let ((old-prop (car fix)) @@ -162,7 +162,7 @@ new-prop content)) (setq changes (1+ changes))))) - + ;; Fix :family inside :box (invalid property) (dolist (fix theme-fixes-box-family) (let ((old-prop (car fix)) @@ -173,7 +173,7 @@ new-prop content)) (setq changes (1+ changes))))) - + (with-temp-file filepath (insert content)) (message " Fixed %d issue(s)" changes) @@ -203,18 +203,18 @@ This function can be called interactively or from Lisp." (interactive) (let* ((themes-dir (expand-file-name "~/.emacs.d/straight/repos/replace-colorthemes/")) (build-dir (expand-file-name "~/.emacs.d/straight/build/color-theme-modern/"))) - + (message "=== Fixing theme files ===\n") - + ;; Fix source files (if (file-directory-p themes-dir) (progn (message "Processing source files in: %s" themes-dir) (fix-all-themes themes-dir)) (message "WARNING: Source themes directory not found: %s" themes-dir)) - + (message "\n") - + ;; Fix build files (these are what Emacs actually loads) (if (file-directory-p build-dir) (progn @@ -222,7 +222,7 @@ This function can be called interactively or from Lisp." (fix-all-themes build-dir) (remove-compiled-themes build-dir)) (message "WARNING: Build themes directory not found: %s" build-dir)) - + (message "\n=== Done! ===") (message "Restart Emacs to load fixed themes."))) diff --git a/lisp/init-completion.el b/lisp/init-completion.el index afc8217..32da7a5 100644 --- a/lisp/init-completion.el +++ b/lisp/init-completion.el @@ -6,10 +6,12 @@ ;; eglot (use-package eglot - :hook ((python-mode . eglot-ensure)) - + :hook ((python-mode . eglot-ensure) + (scheme-mode . eglot-ensure)) :config - (setq eglot-send-changes-idle-time 0.25)) + (setq eglot-send-changes-idle-time 0.25) + (add-to-list 'eglot-server-programs + '(scheme-mode . ("guile-lsp-server")))) ;; corfu (use-package corfu @@ -117,6 +119,13 @@ (global-treesit-auto-mode) (setq treesit-font-lock-level 4)) +(use-package geiser) + +(use-package geiser-guile) + +(with-eval-after-load 'geiser + (setq geiser-default-implementation 'guile)) + (provide 'init-completion) ;;; init-completion.el ends here diff --git a/lisp/init-dired.el b/lisp/init-dired.el index 7335d35..98aa02d 100644 --- a/lisp/init-dired.el +++ b/lisp/init-dired.el @@ -27,31 +27,45 @@ (use-package dirvish :init (dirvish-override-dired-mode) + :config (if *is-mac* (setq dirvish-hide-details t) (setq dirvish-hide-details '(dirvish-side))) (setq dirvish-use-mode-line 'global) + (unless *is-windows* (setq dirvish-attributes '(file-time file-size))) + (setq dirvish-default-layout '(1 0.15 0.45)) + :custom (dirvish-quick-access-entries (cond (*is-windows* - '(("h" "~/" "Home") - ("e" "~/.emacs.d/") + '(("h" "~/" "Home") + ("e" "~/.emacs.d/" "Emacs config") ("p" "c:/Users/gaozh/Pictures/Screenshots/" "Pictures") - ("d" "f:/下载25-2-10/" "Download") - ("v" "f:/luping26-1-11/" "Videos") - ("n" "h:/emacs/my-org-note/" "Notes"))) + ("d" "f:/下载25-2-10/" "Download") + ("v" "f:/luping26-1-11/" "Videos") + ("n" "h:/emacs/my-org-note/" "Notes"))) + (*is-mac* '(("h" "~/" "Home") - ("e" "~/.emacs.d/") - ("p" "~/Pictures/" "Pictures") - ("d" "~/Downloads/" "Download") - ("v" "~/Movies/" "Videos") - ("n" "~/org/my-org-note/"))) + ("e" "~/.emacs.d/" "Emacs config") + ("p" "~/Pictures/" "Pictures") + ("d" "~/Downloads/" "Download") + ("v" "~/Movies/" "Videos") + ("n" "~/org/my-org-note/" "Notes"))) + + (*is-linux* + '(("h" "~/" "Home") + ("e" "~/.emacs.d/" "Emacs config") + ("s" "~/.config/guix/" "System config") + ("p" "~/图片/" "Pictures") + ("d" "~/downloads/" "Downloads") + ("v" "~/视频/" "Videos") + ("n" "~/org/my-org-note/" "Notes"))) (t nil)))) (use-package trashed diff --git a/lisp/init-elpa.el b/lisp/init-elpa.el index b439431..d819f92 100644 --- a/lisp/init-elpa.el +++ b/lisp/init-elpa.el @@ -5,13 +5,25 @@ ;;; Code: ;; Clash 代理配置 -(setq url-proxy-services - '(("http" . "127.0.0.1:7890") - ("https" . "127.0.0.1:7890") - ("no_proxy" . "\\(localhost\\|127\\.0\\.0\\.1\\|192\\.168\\.*\\)"))) +(if *is-linux* + (progn + (setq url-proxy-services + '(("http" . "192.168.31.121:7890") + ("https" . "192.168.31.121:7890") + ("no_proxy" . "\\(localhost\\|127\\.0\\.0\\.1\\|192\\.168\\.*\\)"))) -(setenv "http_proxy" "127.0.0.1:7890") -(setenv "https_proxy" "127.0.0.1:7890") + (setenv "http_proxy" "192.168.31.121:7890") + (setenv "https_proxy" "192.168.31.121:7890")) + + (progn + (setq url-proxy-services + '(("http" . "127.0.0.1:7890") + ("https" . "127.0.0.1:7890") + ("no_proxy" . "\\(localhost\\|127\\.0\\.0\\.1\\|192\\.168\\.*\\)"))) + + (setenv "http_proxy" "127.0.0.1:7890") + (setenv "https_proxy" "127.0.0.1:7890")) + ) ;; straight.el (defvar bootstrap-version) diff --git a/lisp/init-exwm.el b/lisp/init-exwm.el new file mode 100644 index 0000000..da3d22f --- /dev/null +++ b/lisp/init-exwm.el @@ -0,0 +1,11 @@ +;;; init-exwm.el --- exwm config -*- lexical-binding: t -*- + +;;; Commentary: + +;;; Code: + +(use-package exwm) + +(provide 'init-exwm) + +;;; init-exwm.el ends here diff --git a/lisp/init-kbd.el b/lisp/init-kbd.el index 63de70a..0246c9f 100644 --- a/lisp/init-kbd.el +++ b/lisp/init-kbd.el @@ -443,6 +443,8 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog ;; perspective (global-set-key (kbd "C-M-") 'persp-prev) (global-set-key (kbd "C-M-") 'persp-next) +(define-key persp-mode-map (kbd "C-c p c") nil) +(global-set-key (kbd "C-c p d") 'persp-kill) (provide 'init-kbd) diff --git a/lisp/init-org-refile.el b/lisp/init-org-refile.el index 8e3a695..99db956 100644 --- a/lisp/init-org-refile.el +++ b/lisp/init-org-refile.el @@ -107,10 +107,11 @@ ;; 文件头 (insert (format "#+title: %s\n" user-filename)) (insert (format "#+date: %s\n" (format-time-string "[%Y-%m-%d %a %H:%M]"))) - (insert (format "#+category: %s\n\n" category)) + (insert (format "#+category: %s\n" category)) + (insert "#+STARTUP: content\n\n") ;; 插入标题和tag - (insert (format "* STARTED %s %s\n" + (insert (format "* STARTED %s :root%s\n" ;; (if todo (concat todo " ") "") user-filename formatted-tags)) diff --git a/lisp/init-org.el b/lisp/init-org.el index bd7dc45..21b0dce 100644 --- a/lisp/init-org.el +++ b/lisp/init-org.el @@ -44,10 +44,8 @@ (format-time-string "%Y-%m-%d %a" time))) org-journal-carryover-items "TODO=\"TODO\"|TODO=\"STARTED\"|TODO=\"WAITING\"|TODO=\"SOMEDAY\"") - (when *is-windows* - (setq org-journal-dir "h:/emacs/my-org-daily/")) - - (when *is-mac* + (if *is-windows* + (setq org-journal-dir "h:/emacs/my-org-daily/") (setq org-journal-dir "~/org/my-org-daily/")) (add-hook 'org-journal-mode-hook 'font-lock-update) @@ -111,7 +109,6 @@ (lambda () (global-cns-mode-enable-in-buffer))) - ;; 一些随org-mode加载的基础配置 (add-hook 'org-mode-hook (lambda () @@ -163,34 +160,53 @@ (setq org-agenda-files '("~/org/my-org-daily" "~/org/my-org-note/"))) +(when *is-linux* + (setq org-agenda-files '("~/org/my-org-daily/" + "~/org/my-org-note/"))) + (setq org-agenda-span 'day) -(setq org-default-priority ?D) +(setq org-default-priority ?C) (setq org-agenda-skip-function-global '(org-agenda-skip-entry-if 'todo '("COMMENT"))) ;; org-ql -(use-package org-ql) +(use-package org-ql + :config + (with-eval-after-load 'org-ql-view + (keymap-set org-ql-view-map (kbd "q") 'org-agenda-Quit)) -(setq org-ql-views - '(("tags: emacs category:note" - :buffers-files org-agenda-files - :query (and (tags "emacs") (category "note")) - :sort date) + (setq org-ql-views + '(("tags: emacs category:note" + :buffers-files org-agenda-files + :query (and (tags "emacs") (category "note")) + :sort date) - ("tags: org" - :buffers-files org-agenda-files - :query (tags "org")) + ("tags: org" + :buffers-files org-agenda-files + :query (tags "org") + :super-groups ((:auto-property "CATEGORY"))) - ("all important todos" - :buffers-files org-agenda-files - :query (and (not (done)) (todo)) - :super-groups - ((:name "priority = A" :priority "A") - (:name "priority = B" :priority "B") - (:name "started" :todo "STARTED") - (:name "someday" :todo "SOMEDAY"))))) + ("group by time" + :buffers-files org-agenda-files + :query (and (ts :to "today") (tags "root")) + :sort date + :super-groups ((:auto-ts t))) + + ("group by category" + :buffers-files org-agenda-files + :query (tags "root") + :super-groups ((:auto-property "CATEGORY"))) + + ("all important todos" + :buffers-files org-agenda-files + :query (and (not (done)) (todo)) + :super-groups + ((:name "started" :todo "STARTED") + (:name "priority = A" :priority "A") + (:name "priority = B" :priority "B") + (:name "someday" :todo "SOMEDAY")))))) ;; org-super-agenda 配置 (use-package org-super-agenda @@ -258,11 +274,13 @@ "~/org/my-org-note/" (format-time-string "%Y%m%d") my-org-capture-temp-title))))) - "#+title: %(symbol-value 'my-org-capture-temp-title) + " +#+title: %(symbol-value 'my-org-capture-temp-title) #+date: %U -#+category: %^{Category|none|project|book|article|note|insight|fun} +#+category: %^{Category|none|project|book|article|note|wisdom|fun|data} +#+STARTUP: content -* %(symbol-value 'my-org-capture-temp-title) %^g +* %(symbol-value 'my-org-capture-temp-title) :root%^g :PROPERTIES: :END: %U @@ -276,6 +294,8 @@ " :jump-to-captured t))) +(setq org-bookmark-names-plist nil) + (global-set-key (kbd "C-c o c") 'org-capture) ;; 批量调整表格 diff --git a/lisp/init-package.el b/lisp/init-package.el index a02fbe2..c507e44 100644 --- a/lisp/init-package.el +++ b/lisp/init-package.el @@ -191,7 +191,7 @@ targets." ;; 启用savehist,保存命令顺序 (use-package savehist - :hook (after-init . savehist-mode) + ;; :hook (after-init . savehist-mode) :init (setq enable-recursive-minibuffers t history-length 50 savehist-additional-variables '(mark-ring @@ -199,11 +199,12 @@ targets." search-ring regexp-search-ring extended-command-history) - savehist-autosave-interval 300)) + savehist-autosave-interval 300) + (savehist-mode)) ;; saveplace,保存光标位置 (use-package saveplace - :hook (after-init . save-place-mode)) + :init (save-place-mode)) ;; undo增强 (use-package undo-fu) @@ -253,7 +254,7 @@ targets." ("M-Z" . avy-zap-up-to-char-dwim))) ;; jinx,拼写检查 -(unless *is-windows* +(if *is-mac* (use-package jinx :hook (org-mode-hook . jinx-mode) :bind ([remap ispell-word] . jinx-correct) @@ -276,6 +277,10 @@ targets." :init (add-hook 'after-init-hook #'global-flycheck-mode)) +(use-package flycheck-guile + :hook (scheme-mode . (lambda () + (require 'flycheck-guile)))) + ;; consult-flycheck (use-package consult-flycheck) diff --git a/lisp/init-segmentation.el b/lisp/init-segmentation.el index 7127364..d24d83d 100644 --- a/lisp/init-segmentation.el +++ b/lisp/init-segmentation.el @@ -4,8 +4,9 @@ ;;; Code: -;; emacs-chinese-word-segmentation 配置 -(when *is-windows* +;; emacs-chinese-word-segmentation +(cond + (*is-windows* (add-to-list 'load-path "h:/emacs/emacs-chinese-word-segmentation/") ;; 设置为进程调用方式 (setq cns-process-type 'shell) @@ -15,22 +16,22 @@ (setq cns-dict-directory "h:/emacs/emacs-chinese-word-segmentation/cppjieba/dict") ;; 直接设置进程命令,绕过 Windows shell 检测 (setq cns-process-shell-command - (format "%s %s %s %s %s %s" - cns-prog - (concat (file-name-as-directory cns-dict-directory) "jieba.dict.utf8") - (concat (file-name-as-directory cns-dict-directory) "hmm_model.utf8") - (concat (file-name-as-directory cns-dict-directory) "user.dict.utf8") - (concat (file-name-as-directory cns-dict-directory) "idf.utf8") - (concat (file-name-as-directory cns-dict-directory) "stop_words.utf8")))) + (format "%s %s %s %s %s %s" + cns-prog + (concat (file-name-as-directory cns-dict-directory) "jieba.dict.utf8") + (concat (file-name-as-directory cns-dict-directory) "hmm_model.utf8") + (concat (file-name-as-directory cns-dict-directory) "user.dict.utf8") + (concat (file-name-as-directory cns-dict-directory) "idf.utf8") + (concat (file-name-as-directory cns-dict-directory) "stop_words.utf8")))) -(when *is-mac* + (t (add-to-list 'load-path "~/emacs-stuff/emacs-chinese-word-segmentation/") ;; 设置为进程调用方式 (setq cns-process-type 'shell) ;; 设置可执行文件路径 (setq cns-prog "~/emacs-stuff/emacs-chinese-word-segmentation/cnws") ;; 设置字典目录 - (setq cns-dict-directory "~/emacs-stuff/emacs-chinese-word-segmentation/cppjieba/dict/")) + (setq cns-dict-directory "~/emacs-stuff/emacs-chinese-word-segmentation/cppjieba/dict/"))) ;; 其他配置 (setq cns-recent-segmentation-limit 40) diff --git a/lisp/init-startup.el b/lisp/init-startup.el index 97600de..81be898 100644 --- a/lisp/init-startup.el +++ b/lisp/init-startup.el @@ -5,7 +5,7 @@ ;;; Code: ;; mac自动全屏 -(when *is-mac* +(unless *is-windows* (toggle-frame-fullscreen) (global-unset-key (kbd "")) (global-set-key (kbd "") 'toggle-frame-fullscreen)) diff --git a/lisp/init-ui.el b/lisp/init-ui.el index 6ca4ba8..ccd2a9d 100644 --- a/lisp/init-ui.el +++ b/lisp/init-ui.el @@ -56,17 +56,24 @@ (load-theme 'my-base16-dark t)) ;; 很多主题 -(use-package doom-themes) -(use-package color-theme-modern) +;; (use-package doom-themes) +;; (use-package color-theme-modern) (use-package naysayer-theme) ;; 安装smart-mode-line -(use-package smart-mode-line - :defer 0.5 +;; (use-package smart-mode-line +;; :config +;; (setq sml/no-confirm-load-theme t) +;; ;; sml/theme 'respectful) +;; (sml/setup)) + +(use-package simple-modeline + :init (simple-modeline-mode) :config - (setq sml/no-confirm-load-theme t) - ;; sml/theme 'respectful) - (sml/setup)) + ;; (defun simple-modeline-segment-buffer-name () + ;; "Displays the full path of current file in the mode-line." + ;; (propertize " %f" 'face 'mode-line-buffer-id)) + ) ;; eshell高亮 (use-package eshell-syntax-highlighting