diff --git a/init.el b/init.el index 104ae04..2aa82a6 100644 --- a/init.el +++ b/init.el @@ -15,7 +15,7 @@ (if (or (display-graphic-p) *is-android*) (progn - (load "init-proxy" t) + (require 'init-proxy nil t) (require 'init-startup) (require 'init-elpa) (require 'init-base) @@ -32,10 +32,10 @@ (require 'init-kbd-func) (require 'init-kbd) (require 'init-segmentation) - (load "init-local" t)) + (require 'init-local nil t)) (progn (require 'init-terminal-startup) - (load "init-proxy" t) + (require 'init-proxy nil t) (require 'init-elpa) (require 'init-terminal-package) (require 'init-terminal-ui) diff --git a/lisp/init-base.el b/lisp/init-base.el index 3ff9079..f24a6c1 100644 --- a/lisp/init-base.el +++ b/lisp/init-base.el @@ -22,7 +22,7 @@ :delight :init (setq gcmh-idle-delay 'auto - gcmh-auto-idle-delay-factor 10 + gcmh-auto-idle-delay-factor 10 gcmh-high-cons-threshold #x4000000) (gcmh-mode)) @@ -35,9 +35,10 @@ ;; server-mode (use-package server + :demand t :hook (emacs-startup . (lambda () - (unless server-mode + (unless (server-running-p) (server-mode 1))))) ;; recentf,最近打开的文件 @@ -52,7 +53,9 @@ (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 "~/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 diff --git a/lisp/init-completion.el b/lisp/init-completion.el index 9cfc42c..8a8b272 100644 --- a/lisp/init-completion.el +++ b/lisp/init-completion.el @@ -154,6 +154,10 @@ targets." :config ;;Quit completion before saving (add-hook 'before-save-hook #'corfu-quit) + (add-hook 'eshell-mode-hook + (lambda () + (setq-local corfu-auto nil) + (local-set-key (kbd "TAB") 'completion-at-point))) :bind (:map corfu-map ("RET" . nil))) @@ -164,12 +168,6 @@ targets." :hook (after-init . corfu-terminal-mode)) -;; 在eshell中使用tab打开补全 -(add-hook 'eshell-mode-hook - (lambda () - (setq-local corfu-auto nil) - (local-set-key (kbd "TAB") 'completion-at-point))) - (use-package emacs :custom (tab-always-indent 'complete) diff --git a/lisp/init-dired.el b/lisp/init-dired.el index cba29b2..d155657 100644 --- a/lisp/init-dired.el +++ b/lisp/init-dired.el @@ -18,36 +18,34 @@ dired-mouse-drag-files t mouse-drag-and-drop-region-cross-program t dired-compress-file-default-suffix ".zip" - dired-kill-when-opening-new-buffer t - dired-kill-when-opening-new-dired-buffer t) + dired-kill-when-opening-new-dired-buffer nil + dired-auto-revert-buffer t) (put 'dired-find-alternate-file 'disabled nil)) ;; dirvish (use-package dirvish - :hook - (dired-mode-hook . denote-dired-mode) + :straight + '(dirvish :fork (:host github :repo "latiagertrutis/dirvish")) :init (dirvish-override-dired-mode) - :config (require 'vc) + (if *is-windows* (require 'fix-dirvish-preview)) (if (or *is-mac* *is-android*) (setq dirvish-hide-details t) (setq dirvish-hide-details '(dirvish-side))) - (setq dirvish-use-mode-line t) - - (unless *is-windows* - (setq dirvish-attributes '(file-time file-size))) (if *is-android* (setq dirvish-default-layout '(1 0.6)) (setq dirvish-default-layout nil dirvish-layout-recipes '((1 0.15 0.45)))) - (with-eval-after-load 'dirvish - (add-hook 'dired-mode-hook #'dired-hide-details-mode)) + (setq dirvish-use-mode-line t + dirvish-mode-line-format '(:left (sort omit symlink) :right (free-space index)) + dirvish-attributes '(file-time file-size) + dirvish-yank-sources 'session) :custom (dirvish-quick-access-entries @@ -78,6 +76,7 @@ ("v" "~/视频/" "Videos") ("n" "~/org/my-org-note/" "Notes") ("g" "~/gptel/" "gptel sessions"))) + (*is-android* '(("h" "~/" "Home") ("e" "~/.emacs.d" "Emacs") diff --git a/lisp/init-elpa.el b/lisp/init-elpa.el index dbf0652..fc5ff8e 100644 --- a/lisp/init-elpa.el +++ b/lisp/init-elpa.el @@ -1,4 +1,4 @@ -;;; init-elpa.el --- elpa config -*- lexical-binding: t -*- +;;; init-elpa.el --- package manager -*- lexical-binding: t -*- ;;; Commentary: diff --git a/lisp/init-gptel.el b/lisp/init-gptel.el index 722bb14..1c75f27 100644 --- a/lisp/init-gptel.el +++ b/lisp/init-gptel.el @@ -119,12 +119,9 @@ from the last 1500 characters of the buffer." (use-package gptel-magit :straight - (gptel-magit :type git - :host github - :repo "ArthurHeymans/gptel-magit") + '(gptel-magit :fork (:host github :repo "ArthurHeymans/gptel-magit")) :hook (magit-mode . gptel-magit-install) - :init (with-eval-after-load 'gptel (gptel-make-openai "gptel-Kimi-Code-magit" diff --git a/lisp/init-kbd-func.el b/lisp/init-kbd-func.el index e694ff6..c0bf41a 100644 --- a/lisp/init-kbd-func.el +++ b/lisp/init-kbd-func.el @@ -188,6 +188,11 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog (interactive) (load-file (expand-file-name "~/.emacs.d/lisp/fix-theme-colors.el"))) +(defun my-note-push () + "Git add/commit/push notes in `~/org/my-org-note/', generate commit message." + (interactive) + (my-blog-publish "~/org/my-org-note/")) + (when *is-linux* (defun reboot () "Execute loginctl reboot command." diff --git a/lisp/init-kbd.el b/lisp/init-kbd.el index 2b53a6a..c0888f0 100644 --- a/lisp/init-kbd.el +++ b/lisp/init-kbd.el @@ -29,7 +29,7 @@ "o" 'gptel "m" 'gptel-menu "s" 'gptel-send - "a" 'gptel-agent-project + "a" 'gptel-agent "t" 'gptel-tools) (general-def gptel-mode-map @@ -47,7 +47,8 @@ "c" 'my-color-picker "f" 'describe-face "r" 'rainbow-delimiters-mode - "k" 'keycast-header-line-mode) + "k" 'keycast-header-line-mode + "w" 'global-whitespace-mode) ;; f for find and consult command (general-def @@ -73,7 +74,8 @@ "r" 'consult-ripgrep-project "R" 'project-query-replace-regexp "v" 'magit-project-status - "V" 'project-vc-dir) + "V" 'project-vc-dir + "a" 'gptel-agent-project) ;; t for modes toggle (general-def @@ -90,7 +92,8 @@ "g" 'consult-notes-search-in-all-notes "C" 'calendar "c" 'org-capture - "p" 'my-blog-publish + "P" 'my-blog-publish + "p" 'my-note-push "v" 'my-blog-preview "d" 'denote "r" 'denote-rename-file) @@ -151,6 +154,7 @@ "" 'dired-find-file "" 'dired-up-directory "C-f" 'dired-find-file + "C-/" 'dired-undo "" 'my-dirvish-layout-toggle "C-s" 'consult-line "C-r" 'consult-line) diff --git a/lisp/init-org.el b/lisp/init-org.el index 0393d4b..557ad9e 100644 --- a/lisp/init-org.el +++ b/lisp/init-org.el @@ -6,17 +6,21 @@ (use-package org :hook - (org-mode . (lambda () - (org-indent-mode) - (visual-line-mode) - (jinx-mode) - (electric-pair-local-mode) - (require 'org-tempo) - (setq-local electric-pair-inhibit-predicate - (lambda (char) - (or (eq char ?<) - (electric-pair-default-inhibit char)))))) + (org-mode . org-indent-mode) + (org-mode . visual-line-mode) + (org-mode . jinx-mode) + (org-mode . my-org-electric-pair-fix) + (org-mode . electric-pair-local-mode) + :config + (require 'org-tempo) + + (defun my-org-electric-pair-fix () + (setq-local electric-pair-inhibit-predicate + (lambda (char) + (or (eq char ?<) + (electric-pair-default-inhibit char))))) + ;; log默认放入drawer中 (setq org-log-done t org-log-into-drawer t) @@ -60,6 +64,7 @@ (use-package denote :hook (after-init . denote-rename-buffer-mode) + (dired-mode . denote-dired-mode) :config (if *is-android* (setq denote-directory "~/storage/shared/my-org-note/") @@ -238,12 +243,13 @@ See `org-capture-templates' for more information." (function org-hugo-new-subtree-post-capture-template))))) ;; 快速部署 - (defun my-blog-publish () + (defun my-blog-publish (&optional directory) "Publish blog , git add/commit/push , generate commit message." (interactive) - (let* ((blog-dir (if *is-windows* - "h:/emacs/hugo/this-is-my-blog/" - "~/org/hugo/this-is-my-blog/")) + (let* ((blog-dir (or directory + (if *is-windows* + "h:/emacs/hugo/this-is-my-blog/" + "~/org/hugo/this-is-my-blog/"))) (timestamp (format-time-string "%Y-%m-%d %H:%M:%S")) (default-directory blog-dir)) ;; save buffer diff --git a/lisp/init-package.el b/lisp/init-package.el index d9430c1..7e67b9b 100644 --- a/lisp/init-package.el +++ b/lisp/init-package.el @@ -160,6 +160,12 @@ ("C-x K" . helpful-kill-buffers) ("r" . remove-hook-at-point))) +;; typit,打字游戏 +(use-package typit) + +;; power-mode +(use-package power-mode) + (provide 'init-package) ;;; init-package.el ends here diff --git a/lisp/init-segmentation.el b/lisp/init-segmentation.el index 2a8fd6d..5eef998 100644 --- a/lisp/init-segmentation.el +++ b/lisp/init-segmentation.el @@ -1,4 +1,4 @@ -;;; init-segmentation.el --- Chinese segmentation config -*- lexical-binding: t -*- +;;; init-segmentation.el --- Chinese word segmentation -*- lexical-binding: t -*- ;;; Commentary: @@ -7,30 +7,23 @@ ;; emacs-chinese-word-segmentation (cond (*is-windows* - (add-to-list 'load-path "h:/emacs/emacs-chinese-word-segmentation/") - ;; 设置为进程调用方式 - (setq cns-process-type 'shell) - ;; 设置可执行文件路径 - (setq cns-prog "h:/emacs/emacs-chinese-word-segmentation/cnws.exe") - ;; 设置字典目录 - (setq cns-dict-directory "h:/emacs/emacs-chinese-word-segmentation/cppjieba/dict") - ;; 直接设置进程命令,绕过 Windows shell 检测 + (add-to-list 'load-path "h:/emacs/emacs-chinese-word-segmentation/") ;设置为进程调用方式 + (setq cns-process-type 'shell) ;设置可执行文件路径 + (setq cns-prog "h:/emacs/emacs-chinese-word-segmentation/cnws.exe") ;设置字典目录 + (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")))) (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/"))) ;; 其他配置 @@ -39,20 +32,12 @@ ;; 自动启动 (when (featurep 'cns) - (add-hook 'find-file-hook 'global-cns-mode)) + (add-hook 'after-init-hook 'global-cns-mode)) ;; 取消C-绑定 (with-eval-after-load 'cns (define-key cns-mode-map (kbd "C-") nil)) -;; vterm下关闭cns-mode -(add-hook 'vterm-mode-hook - (lambda () - (run-at-time 0 nil - (lambda () - (when (derived-mode-p 'vterm-mode) - (cns-mode -1)))))) - (provide 'init-segmentation) ;;; init-segmentation.el ends here diff --git a/lisp/init-startup.el b/lisp/init-startup.el index 1bf1441..6f5649b 100644 --- a/lisp/init-startup.el +++ b/lisp/init-startup.el @@ -86,6 +86,9 @@ ;; 移动到垃圾桶 (setq delete-by-moving-to-trash t) +;; 优化换行规则 +(setq word-wrap-by-category t) + (provide 'init-startup) ;;; init-startup.el ends here diff --git a/lisp/init-terminal-package.el b/lisp/init-terminal-package.el index 3264dab..ecb386a 100644 --- a/lisp/init-terminal-package.el +++ b/lisp/init-terminal-package.el @@ -6,11 +6,12 @@ (use-package gcmh :delight + :hook + (emacs-startup . gcmh-mode) :init (setq gcmh-idle-delay 'auto - gcmh-auto-idle-delay-factor 10 - gcmh-high-cons-threshold #x4000000) - (gcmh-mode)) + gcmh-auto-idle-delay-factor 10 + gcmh-high-cons-threshold #x4000000)) (use-package benchmark-init :init diff --git a/lisp/my-base16-dark-theme.el b/lisp/my-base16-dark-theme.el index cf0fc81..d37acb5 100644 --- a/lisp/my-base16-dark-theme.el +++ b/lisp/my-base16-dark-theme.el @@ -51,10 +51,14 @@ `(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)))) + `(line-number ((,class (:foreground ,base01 :weight light)))) + `(button ((,class (:foreground ,yellow :underline t)))) `(dashboard-footer-face ((,class (:foreground ,blue)))) `(dashboard-text-banner ((,class (:foreground ,green)))) `(dashboard-heading ((,class (:foreground ,green :weight bold)))) `(dirvish-file-time ((,class (:foreground ,base01)))) + `(dirvish-free-space ((,class (:foreground ,green)))) + `(dired-broken-symlink ((,class (:inherit dired-symlink :foreground ,orange)))) `(dired-header ((,class (:foreground ,green)))) `(dired-async-mode-message ((,class (:foreground ,red)))) `(dired-async-message ((,class (:foreground ,yellow)))) diff --git a/lisp/my-base16-light-theme.el b/lisp/my-base16-light-theme.el index 26fdc8e..7dca05b 100644 --- a/lisp/my-base16-light-theme.el +++ b/lisp/my-base16-light-theme.el @@ -51,10 +51,14 @@ `(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)))) + `(line-number ((,class (:foreground ,base01 :weight light)))) + `(button ((,class (:foreground ,yellow :underline t)))) `(dashboard-footer-face ((,class (:foreground ,blue)))) `(dashboard-text-banner ((,class (:foreground ,green)))) `(dashboard-heading ((,class (:foreground ,green :weight bold)))) `(dirvish-file-time ((,class (:foreground ,base01)))) + `(dirvish-free-space ((,class (:foreground ,green)))) + `(dired-broken-symlink ((,class (:inherit dired-symlink :foreground ,orange)))) `(dired-header ((,class (:foreground ,green)))) `(dired-async-mode-message ((,class (:foreground ,red)))) `(dired-async-message ((,class (:foreground ,yellow))))