diff --git a/init.el b/init.el index a89c2d2..b4644b0 100644 --- a/init.el +++ b/init.el @@ -17,6 +17,7 @@ (require 'init-startup) (require 'init-elpa) (require 'init-package) +(require 'init-emms) (require 'init-org) (require 'init-org-refile) (require 'init-completion) diff --git a/lisp/init-completion.el b/lisp/init-completion.el index 611e9d6..312971c 100644 --- a/lisp/init-completion.el +++ b/lisp/init-completion.el @@ -44,7 +44,6 @@ (corfu-popupinfo-mode) (corfu-history-mode) :config - (add-hook 'after-init-hook #'global-corfu-mode) ;;Quit completion before saving (add-hook 'before-save-hook #'corfu-quit) (advice-add #'persistent-scratch-save :before #'corfu-quit) @@ -103,8 +102,6 @@ ;; (add-to-list 'completion-at-point-functions #'cape-abbrev) ;; Make these capfs composable. - (advice-add 'lsp-completion-at-point :around #'cape-wrap-noninterruptible) - (advice-add 'lsp-completion-at-point :around #'cape-wrap-nonexclusive) (advice-add 'comint-completion-at-point :around #'cape-wrap-nonexclusive) (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) (advice-add 'eglot-completion-at-point :around #'cape-wrap-nonexclusive) diff --git a/lisp/init-emms.el b/lisp/init-emms.el new file mode 100644 index 0000000..078e87b --- /dev/null +++ b/lisp/init-emms.el @@ -0,0 +1,161 @@ +;;; init-emms.el --- emms -*- lexical-binding: t -*- + +;;; Commentary: + +;;; Code: + +(use-package emms + :init + ;; 设置音乐文件默认目录 + (when *is-windows* + (setq emms-source-file-default-directory "F:/luping26-1-11/")) + + :config + ;; --- 基础设置 --- + (require 'emms-setup) + (emms-all) ; 加载所有稳定功能 + + ;; 使用简单模式的 mpv 播放器 + ;; 移除默认的 emms-player-mpv + (require 'emms-player-simple) + + ;; 定义简单的 mpv 播放器 + (define-emms-simple-player mpv-simple '(file url streamlist playlist) + (concat "\\.\\(" + (mapconcat 'identity + '("mp3" "mp4" "avi" "mkv" "flv" "mov" "wmv" "webm" + "ogg" "ogv" "oga" "ogx" + "flac" "wav" "aac" "m4a" "wma" + "mpg" "mpeg" "mpe" "mpv" + "3gp" "3g2" + "m3u" "pls") + "\\|") + "\\)\\'\\|http[s]?://") + "mpv" + "--force-window=immediate" + "--keep-open=yes" + "--fs=no" + "--quiet") + + ;; 设置播放器列表 + (setq emms-player-list '(emms-player-mpv-simple + emms-player-vlc + emms-player-mplayer)) + + (setq emms-playlist-default-playlist-name "*EMMS Playlist*") + (setq emms-playlist-buffer-name "*EMMS Playlist*") + + ;; 使用更快的文件查找方法(windows上需要使用internal) + ;; (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find) + (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-internal) + + ;; 使用原生 Elisp 元数据读取器 + (setq emms-info-functions '(emms-info-native)) + + ;; 异步读取元数据 + (setq emms-info-asynchronously t) + + ;; 使用更详细的曲目描述 + (setq emms-track-description-function #'emms-info-track-description) + + ;; 模式行设置 + (require 'emms-mode-line) + (emms-mode-line-mode 1) + (emms-mode-line-blank) ; 初始为空 + + ;; 自定义模式行格式 + (setq emms-mode-line-format " [%s] ") + (setq emms-mode-line-length-limit 60) + + ;; 播放时间显示 + (require 'emms-playing-time) + (emms-playing-time-mode 1) + + ;; 歌词设置 + (require 'emms-lyrics) + (setq emms-lyrics-display-on-modeline t) ; 在模式行显示歌词 + (setq emms-lyrics-display-on-minibuffer nil) ; 不在 minibuffer 显示 + (setq emms-lyrics-display-buffer nil) ; 不使用专用缓冲区 + (setq emms-lyrics-scroll-p t) ; 启用歌词滚动 + (setq emms-lyrics-scroll-timer-interval 0.4) ; 滚动间隔 + (setq emms-lyrics-dir "~/Music/lyrics") ; 歌词文件目录 + (setq emms-lyrics-display-format " %s ") ; 歌词显示格式 + (emms-lyrics 1) ; 启用歌词显示 + + ;; 浏览器设置 + (require 'emms-browser) + (setq emms-browser-default-browse-type 'artist) + (setq emms-browser-covers nil) ; 禁用封面 + + ;; 浏览器显示格式 + (setq emms-browser-info-title-format "%i%n") + (setq emms-browser-playlist-info-title-format "%i%n") + + ;; 添加浏览器快捷键 + (define-key emms-browser-mode-map (kbd "SPC") 'emms-browser-add-tracks-and-play) + + ;; 缓存设置 + (require 'emms-cache) + (emms-cache 1) ; 启用缓存 + + ;; 历史记录 + (require 'emms-history) + (add-hook 'emms-player-started-hook #'emms-last-played-update-current) + + ;; 音量控制 + (require 'emms-volume) + ;; 在播放列表中使用 +/- 控制音量 + (define-key emms-playlist-mode-map (kbd "+") #'emms-volume-raise) + (define-key emms-playlist-mode-map (kbd "-") #'emms-volume-lower) + + ;; 添加(playlist中的)快捷键 + (define-key emms-playlist-mode-map (kbd "SPC") 'emms-pause) + (define-key emms-playlist-mode-map (kbd "N") 'emms-next) + (define-key emms-playlist-mode-map (kbd "P") 'emms-previous) + (define-key emms-playlist-mode-map (kbd "R") 'emms-random) + (define-key emms-playlist-mode-map (kbd "/") 'emms-playlist-limit) + + ;; 启用标记功能 + (require 'emms-mark) + + ;; 启用播放列表排序 + (require 'emms-playlist-sort) + (define-key emms-playlist-mode-map (kbd "S s") 'emms-playlist-sort-map) + + ;; 启用播放列表限制/过滤 + (require 'emms-playlist-limit) + + ;; 启用标签编辑器 + (require 'emms-tag-editor) + + ;; 启用评分系统 + (require 'emms-score) + (emms-score 1) + + ;; 启动后自动恢复播放列表 + ;; (add-hook 'after-init-hook 'emms-history-load) + + ;; 显示加载完成消息 + (message "EMMS loaded") + + ;; 关闭自动连播 + (add-hook 'emms-playlist-mode-hook + (lambda () + (setq emms-single-track t)))) + +;; 提供 EMMS 快捷启动函数 +(defun my-emms-start-browser () + "Open emms browser." + (interactive) + (emms-browser) + (message "EMMS browser loaded")) + +(defun my-emms-play-directory (dir) + "Play all files in directory.." + (interactive "Dchoose a directory: ") + (emms-play-directory-tree dir) + (message "playing: %s" dir)) + +(provide 'init-emms) + +;;; init-emms.el ends here diff --git a/lisp/init-gptel.el b/lisp/init-gptel.el index 628dd97..ac565fa 100644 --- a/lisp/init-gptel.el +++ b/lisp/init-gptel.el @@ -5,10 +5,10 @@ ;;; Code: (use-package gptel + :hook (gptel-mode-hook . visual-line-mode) :config (setq gptel-default-mode 'org-mode) - (defun my/org-auto-gptel () (when (derived-mode-p 'org-mode) (save-excursion @@ -86,12 +86,77 @@ (setq gptel-model 'kimi-for-coding gptel-backend (gptel-get-backend "Kimi-Code")) + (defun my-gptel--sanitize-filename (name) + "Clean NAME into a safe kebab-case filename string." + (let ((clean (downcase name))) + (setq clean (replace-regexp-in-string "[^a-z0-9_-]" "-" clean)) + (setq clean (replace-regexp-in-string "^-+\\|[-]+$" "" clean)) + (setq clean (replace-regexp-in-string "-[-]+" "-" clean)) + (string-trim clean))) + + (defun my-gptel-save-session () + "Save current gptel session to ~/gptel/ with AI-generated filename. +The filename is prefixed with a YYYYMMDD-HHmmss timestamp and generated +from the last 1500 characters of the buffer." + (interactive) + (unless gptel-mode + (user-error "Not a gptel session buffer")) + (let* ((buf (current-buffer)) + (content (with-current-buffer buf + (buffer-substring-no-properties (point-min) (point-max)))) + (tail (substring content (max 0 (- (length content) 1500)))) + (prompt-text (format "Based on the following conversation, generate a short kebab-case filename (3 to 5 lowercase English words, hyphen-separated, no file extension). Output ONLY the filename, nothing else.\n\n%s" + tail))) + (message "Generating filename with AI...") + (let ((fsm (gptel-request prompt-text + :system "You are a filename generator. Output ONLY a short kebab-case filename (3-5 lowercase English words separated by hyphens). No explanations, no quotes, no punctuation, no file extension." + :stream nil + :callback + (lambda (response info) + (condition-case err + (cond + ((null response) + (message "Failed to generate filename: %s" + (or (plist-get info :status) "unknown error"))) + ((not (stringp response)) + (message "Unexpected response type: %S" response)) + (t + (let* ((generated (my-gptel--sanitize-filename (string-trim response))) + (generated (if (string-empty-p generated) + "gptel-session" + generated)) + (timestamp (format-time-string "%Y%m%d-%H%M%S")) + (dir (expand-file-name "~/gptel/")) + (base (concat timestamp "-" generated)) + (file (expand-file-name (concat base ".org") dir))) + ;; handle name collision + (when (file-exists-p file) + (setq base (concat timestamp "-" generated "-" (format-time-string "%S"))) + (setq file (expand-file-name (concat base ".org") dir))) + (unless (file-directory-p dir) + (make-directory dir t)) + ;; write-file triggers gptel--save-state to preserve metadata + (with-current-buffer buf + (write-file file)) + (if (file-exists-p file) + (progn + (pop-to-buffer (find-file-noselect file)) + (message "Saved gptel session to %s" file)) + (message "ERROR: File was not created: %s" file))))) + (error (message "gptel save-session error: %S" err))))))) + (unless (plist-get (gptel-fsm-info fsm) :callback) + (message "WARNING: gptel-request did not register callback!"))))) + (with-eval-after-load 'gptel + (define-key gptel-mode-map (kbd "C-c C-s") #'my-gptel-save-session) (setf gptel--system-message "You are a large language model living in Emacs and a helpful assistant. Respond concisely. - NEVER use unescaped org-mode headings. Lines MUST NOT begin with `* `, `** `, `*** `, etc. If you must start a line with asterisks, use the standard org escape format `,*` (e.g. `,* Heading`, `,** Sub-heading`)."))) (use-package gptel-agent + :init + (with-eval-after-load 'gptel + (require 'gptel-agent)) :config (add-to-list 'gptel-agent-dirs "~/.emacs.d/lisp/" t) (gptel-agent-update)) diff --git a/lisp/init-kbd.el b/lisp/init-kbd.el index 033722a..f909f02 100644 --- a/lisp/init-kbd.el +++ b/lisp/init-kbd.el @@ -4,11 +4,15 @@ ;;; Code: +;; 好像是ivy-posframe里的函数,后面要用 +(defun childframe-completion-workable-p () + "Check if childframe completion is workable." + (and (display-graphic-p) + (not (eq system-type 'windows-nt)) + (>= emacs-major-version 26))) + (use-package hydra - :defines (consult-imenu-config posframe-border-width) - :functions childframe-completion-workable-p - :hook ((emacs-lisp-mode . hydra-add-imenu) - ((after-init after-load-theme server-after-make-frame) . hydra-set-posframe)) + :defines (consult-imenu-config) :init (with-eval-after-load 'consult-imenu (setq consult-imenu-config @@ -18,28 +22,11 @@ (?m "Macros" font-lock-function-name-face) (?p "Packages" font-lock-constant-face) (?t "Types" font-lock-type-face) - (?v "Variables" font-lock-variable-name-face)))))) - - (defun hydra-set-posframe () - "Set display type and appearance of hydra." - ;; Display type - (if (childframe-completion-workable-p) - (setq hydra-hint-display-type 'posframe) - (setq hydra-hint-display-type 'lv)) - ;; Appearance - (setq hydra-posframe-show-params - `(:left-fringe 8 - :right-fringe 8 - :internal-border-width ,posframe-border-width - :internal-border-color ,(face-background 'posframe-border nil t) - :background-color ,(face-background 'tooltip nil t) - :foreground-color ,(face-foreground 'tooltip nil t) - :lines-truncate t - :poshandler posframe-poshandler-frame-center-near-bottom)))) + (?v "Variables" font-lock-variable-name-face))))))) ;; multiple-cursors (defhydra hydra-multiple-cursors () - " + " ^Mark^ ^Unmark^ ^Other^ ------------------------------------------------------------------ _p_ : prev line _P_ : previous _c_ : edit lines @@ -49,17 +36,17 @@ _b_ : prev symbol _s_ : in region _a_ : all dwim " - ("p" mc/mark-previous-like-this) - ("n" mc/mark-next-like-this) - ("b" mc/mark-previous-like-this-symbol) - ("f" mc/mark-next-like-this-symbol) - ("P" mc/unmark-previous-like-this) - ("N" mc/unmark-next-like-this) - ("a" mc/mark-all-dwim) - ("s" mc/mark-all-in-region) - ("c" mc/edit-lines) - ("." mc/mark-pop) - ("q" nil)) + ("p" mc/mark-previous-like-this) + ("n" mc/mark-next-like-this) + ("b" mc/mark-previous-like-this-symbol) + ("f" mc/mark-next-like-this-symbol) + ("P" mc/unmark-previous-like-this) + ("N" mc/unmark-next-like-this) + ("a" mc/mark-all-dwim) + ("s" mc/mark-all-in-region) + ("c" mc/edit-lines) + ("." mc/mark-pop) + ("q" nil)) (global-set-key (kbd "C-c c") 'hydra-multiple-cursors/body) @@ -84,7 +71,7 @@ _a_ : all dwim (defun restart-emacs () "Restart emacs (for Windows)" (interactive) - (save-some-buffers) + (save-some-buffers) (w32-shell-execute "open" "runemacs.exe") (kill-emacs)) (global-set-key (kbd "C-c r") 'restart-emacs)) @@ -207,7 +194,7 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog ;; 使用快速切换到scratch buffer (if *is-mac* - (global-set-key (kbd "C-C ") 'scratch-buffer) + (global-set-key (kbd "C-c ") 'scratch-buffer) (global-set-key (kbd "C-c ") 'scratch-buffer)) ;; 调整window @@ -310,7 +297,7 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog (fboundp 'w32-shell-execute)) (shell-command-to-string (encode-coding-string (replace-regexp-in-string "/" "\\\\" (format "explorer.exe %s" (file-name-directory (expand-file-name file)))) - 'gbk)) + 'gbk)) (call-process (pcase system-type ('darwin "open") ('cygwin "cygstart") @@ -406,17 +393,17 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog (define-key embark-file-map (kbd "p") 'emms-play-dired)) (add-hook 'dired-mode-hook - (lambda () - (local-unset-key (kbd "")) - (local-set-key (kbd "") 'emms-play-dired) - (local-set-key (kbd "C-c m a") 'emms-add-dired))) + (lambda () + (local-unset-key (kbd "")) + (local-set-key (kbd "") 'emms-play-dired) + (local-set-key (kbd "C-c m a") 'emms-add-dired))) (add-hook 'emms-playlist-mode-hook - (lambda () - (local-unset-key (kbd "")) - (local-unset-key (kbd "")) - (local-set-key (kbd "") 'emms-previous) - (local-set-key (kbd "") 'emms-next))) + (lambda () + (local-unset-key (kbd "")) + (local-unset-key (kbd "")) + (local-set-key (kbd "") 'emms-previous) + (local-set-key (kbd "") 'emms-next))) (defun switch-to-emms-playlist() "Switch to emms playlist." @@ -452,7 +439,9 @@ Disable jinx-mode if it's enable and global-jinx-mode is disable , otherwise tog "o" 'gptel "m" 'gptel-menu "s" 'gptel-send - "a" 'gptel-agent) + "a" 'gptel-agent + "t" 'gptel-tools + "g" 'gptel-mode) (provide 'init-kbd) diff --git a/lisp/init-org.el b/lisp/init-org.el index 21b0dce..ecb36a1 100644 --- a/lisp/init-org.el +++ b/lisp/init-org.el @@ -278,7 +278,6 @@ #+title: %(symbol-value 'my-org-capture-temp-title) #+date: %U #+category: %^{Category|none|project|book|article|note|wisdom|fun|data} -#+STARTUP: content * %(symbol-value 'my-org-capture-temp-title) :root%^g :PROPERTIES: diff --git a/lisp/init-package.el b/lisp/init-package.el index c507e44..5170d21 100644 --- a/lisp/init-package.el +++ b/lisp/init-package.el @@ -8,7 +8,7 @@ ;; 安装gcmh用于管理内存回收 (use-package gcmh - ;; :demand t + :demand t :init (setq gcmh-idle-delay 'auto gcmh-auto-idle-delay-factor 10 @@ -187,7 +187,7 @@ targets." #'consult-preview-at-point-mode)))) ;; nerd-icon -(use-package nerd-icons) +;; (use-package nerd-icons) ;; 启用savehist,保存命令顺序 (use-package savehist @@ -291,159 +291,6 @@ targets." :bind (:map markdown-mode-map ("C-c C-e" . markdown-do))) -;; 安装emms -(use-package emms - :init - ;; 设置音乐文件默认目录 - (when *is-windows* - (setq emms-source-file-default-directory "F:/luping26-1-11/")) - - :config - ;; --- 基础设置 --- - (require 'emms-setup) - (emms-all) ; 加载所有稳定功能 - - ;; 使用简单模式的 mpv 播放器 - ;; 移除默认的 emms-player-mpv - (require 'emms-player-simple) - - ;; 定义简单的 mpv 播放器 - (define-emms-simple-player mpv-simple '(file url streamlist playlist) - (concat "\\.\\(" - (mapconcat 'identity - '("mp3" "mp4" "avi" "mkv" "flv" "mov" "wmv" "webm" - "ogg" "ogv" "oga" "ogx" - "flac" "wav" "aac" "m4a" "wma" - "mpg" "mpeg" "mpe" "mpv" - "3gp" "3g2" - "m3u" "pls") - "\\|") - "\\)\\'\\|http[s]?://") - "mpv" - "--force-window=immediate" - "--keep-open=yes" - "--fs=no" - "--quiet") - - ;; 设置播放器列表 - (setq emms-player-list '(emms-player-mpv-simple - emms-player-vlc - emms-player-mplayer)) - - (setq emms-playlist-default-playlist-name "*EMMS Playlist*") - (setq emms-playlist-buffer-name "*EMMS Playlist*") - - ;; 使用更快的文件查找方法(windows上需要使用internal) - ;; (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find) - (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-internal) - - ;; 使用原生 Elisp 元数据读取器 - (setq emms-info-functions '(emms-info-native)) - - ;; 异步读取元数据 - (setq emms-info-asynchronously t) - - ;; 使用更详细的曲目描述 - (setq emms-track-description-function #'emms-info-track-description) - - ;; 模式行设置 - (require 'emms-mode-line) - (emms-mode-line-mode 1) - (emms-mode-line-blank) ; 初始为空 - - ;; 自定义模式行格式 - (setq emms-mode-line-format " [%s] ") - (setq emms-mode-line-length-limit 60) - - ;; 播放时间显示 - (require 'emms-playing-time) - (emms-playing-time-mode 1) - - ;; 歌词设置 - (require 'emms-lyrics) - (setq emms-lyrics-display-on-modeline t) ; 在模式行显示歌词 - (setq emms-lyrics-display-on-minibuffer nil) ; 不在 minibuffer 显示 - (setq emms-lyrics-display-buffer nil) ; 不使用专用缓冲区 - (setq emms-lyrics-scroll-p t) ; 启用歌词滚动 - (setq emms-lyrics-scroll-timer-interval 0.4) ; 滚动间隔 - (setq emms-lyrics-dir "~/Music/lyrics") ; 歌词文件目录 - (setq emms-lyrics-display-format " %s ") ; 歌词显示格式 - (emms-lyrics 1) ; 启用歌词显示 - - ;; 浏览器设置 - (require 'emms-browser) - (setq emms-browser-default-browse-type 'artist) - (setq emms-browser-covers nil) ; 禁用封面 - - ;; 浏览器显示格式 - (setq emms-browser-info-title-format "%i%n") - (setq emms-browser-playlist-info-title-format "%i%n") - - ;; 添加浏览器快捷键 - (define-key emms-browser-mode-map (kbd "SPC") 'emms-browser-add-tracks-and-play) - - ;; 缓存设置 - (require 'emms-cache) - (emms-cache 1) ; 启用缓存 - - ;; 历史记录 - (require 'emms-history) - (add-hook 'emms-player-started-hook #'emms-last-played-update-current) - - ;; 音量控制 - (require 'emms-volume) - ;; 在播放列表中使用 +/- 控制音量 - (define-key emms-playlist-mode-map (kbd "+") #'emms-volume-raise) - (define-key emms-playlist-mode-map (kbd "-") #'emms-volume-lower) - - ;; 添加(playlist中的)快捷键 - (define-key emms-playlist-mode-map (kbd "SPC") 'emms-pause) - (define-key emms-playlist-mode-map (kbd "N") 'emms-next) - (define-key emms-playlist-mode-map (kbd "P") 'emms-previous) - (define-key emms-playlist-mode-map (kbd "R") 'emms-random) - (define-key emms-playlist-mode-map (kbd "/") 'emms-playlist-limit) - - ;; 启用标记功能 - (require 'emms-mark) - - ;; 启用播放列表排序 - (require 'emms-playlist-sort) - (define-key emms-playlist-mode-map (kbd "S s") 'emms-playlist-sort-map) - - ;; 启用播放列表限制/过滤 - (require 'emms-playlist-limit) - - ;; 启用标签编辑器 - (require 'emms-tag-editor) - - ;; 启用评分系统 - (require 'emms-score) - (emms-score 1) - - ;; 启动后自动恢复播放列表 - ;; (add-hook 'after-init-hook 'emms-history-load) - - ;; 显示加载完成消息 - (message "EMMS loaded") - - ;; 关闭自动连播 - (add-hook 'emms-playlist-mode-hook - (lambda () - (setq emms-single-track t)))) - -;; 提供 EMMS 快捷启动函数 -(defun my-emms-start-browser () - "Open emms browser." - (interactive) - (emms-browser) - (message "EMMS browser loaded")) - -(defun my-emms-play-directory (dir) - "Play all files in directory.." - (interactive "Dchoose a directory: ") - (emms-play-directory-tree dir) - (message "playing: %s" dir)) - ;; vterm (unless *is-windows* (use-package vterm)) diff --git a/lisp/init-startup.el b/lisp/init-startup.el index 2f5af84..b9ae063 100644 --- a/lisp/init-startup.el +++ b/lisp/init-startup.el @@ -85,8 +85,8 @@ (setq visible-bell t inhibit-compacting-font-caches t ; Don’t compact font caches during GC delete-by-moving-to-trash t ; Deleting files go to OS's trash folder - make-backup-files nil ; Forbide to make backup files - auto-save-default nil ; Disable auto save + ;; make-backup-files nil ; Forbide to make backup files + ;; auto-save-default nil ; Disable auto save uniquify-buffer-name-style 'post-forward-angle-brackets ; Show path if names are same adaptive-fill-regexp "[ t]+|[ t]*([0-9]+.|*+)[ t]*" diff --git a/lisp/init-ui.el b/lisp/init-ui.el index 05c1da4..9cfbe38 100644 --- a/lisp/init-ui.el +++ b/lisp/init-ui.el @@ -38,6 +38,9 @@ ;; rainbow mode (use-package rainbow-mode) +;; rainbow-delimiters +(use-package rainbow-delimiters) + ;; 自定义主题路径 (add-to-list 'custom-theme-load-path "~/.emacs.d/lisp/") @@ -60,7 +63,7 @@ ;; (use-package color-theme-modern) (use-package naysayer-theme) -;; 安装smart-mode-line +;; modeline ;; (use-package smart-mode-line ;; :config ;; (setq sml/no-confirm-load-theme t) @@ -181,9 +184,9 @@ ;; 安装cnfonts脚本,用于修复中英文对齐 (use-package cnfonts - :defer 0 - :config + :init (cnfonts-mode 1) + :config (cnfonts--select-profile "profile1")) ;; 主题修复脚本