Manateelazycat 的 Emacs 启动文件 site-start.el 研究: Difference between revisions
Jump to navigation
Jump to search
Created page with "manateelazycat 的 Emacs 启动文件 [https://github.com/manateelazycat/lazycat-emacs/blob/master/site-start.el site-start.el] 写得很妙,值得研究。" |
No edit summary |
||
| Line 1: | Line 1: | ||
manateelazycat 的 Emacs 启动文件 [https://github.com/manateelazycat/lazycat-emacs/blob/master/site-start.el site-start.el] 写得很妙,值得研究。 | manateelazycat 的 Emacs 启动文件 [https://github.com/manateelazycat/lazycat-emacs/blob/master/site-start.el site-start.el] 写得很妙,值得研究。 | ||
<syntaxhighlight lang="bash" line> | |||
(require 'cl-lib) | |||
(tool-bar-mode -1) ;禁用工具栏 | |||
(menu-bar-mode -1) ;禁用菜单栏 | |||
(scroll-bar-mode -1) ;禁用滚动条 | |||
(defun add-subdirs-to-load-path (search-dir) | |||
(interactive) | |||
(let* ((dir (file-name-as-directory search-dir))) | |||
(dolist (subdir | |||
;; 过滤出不必要的目录,提升Emacs启动速度 | |||
(cl-remove-if | |||
#'(lambda (subdir) | |||
(or | |||
;; 不是目录的文件都移除 | |||
(not (file-directory-p (concat dir subdir))) | |||
;; 父目录、 语言相关和版本控制目录都移除 | |||
(member subdir '("." ".." | |||
"dist" "node_modules" "__pycache__" | |||
"RCS" "CVS" "rcs" "cvs" ".git" ".github")))) | |||
(directory-files dir))) | |||
(let ((subdir-path (concat dir (file-name-as-directory subdir)))) | |||
;; 目录下有 .el .so .dll 文件的路径才添加到 `load-path' 中,提升Emacs启动速度 | |||
(when (cl-some #'(lambda (subdir-file) | |||
(and (file-regular-p (concat subdir-path subdir-file)) | |||
;; .so .dll 文件指非Elisp语言编写的Emacs动态库 | |||
(member (file-name-extension subdir-file) '("el" "so" "dll")))) | |||
(directory-files subdir-path)) | |||
;; 注意:`add-to-list' 函数的第三个参数必须为 t ,表示加到列表末尾 | |||
;; 这样Emacs会从父目录到子目录的顺序搜索Elisp插件,顺序反过来会导致Emacs无法正常启动 | |||
(add-to-list 'load-path subdir-path t)) | |||
;; 继续递归搜索子目录 | |||
(add-subdirs-to-load-path subdir-path))))) | |||
(add-subdirs-to-load-path "/usr/share/emacs/lazycat") | |||
(require 'init) | |||
<</syntaxhighlight> | |||
# (require 'cl-lib) 为要用到的 cl 做铺势 | |||
# -1 的三个选项很简单,不用谈 | |||
# 自定义了一个函数,叫 add-subdirs-to-load-path,它的变量是 search-dir | |||
# | |||
Revision as of 08:42, 8 July 2026
manateelazycat 的 Emacs 启动文件 site-start.el 写得很妙,值得研究。
(require 'cl-lib)
(tool-bar-mode -1) ;禁用工具栏
(menu-bar-mode -1) ;禁用菜单栏
(scroll-bar-mode -1) ;禁用滚动条
(defun add-subdirs-to-load-path (search-dir)
(interactive)
(let* ((dir (file-name-as-directory search-dir)))
(dolist (subdir
;; 过滤出不必要的目录,提升Emacs启动速度
(cl-remove-if
#'(lambda (subdir)
(or
;; 不是目录的文件都移除
(not (file-directory-p (concat dir subdir)))
;; 父目录、 语言相关和版本控制目录都移除
(member subdir '("." ".."
"dist" "node_modules" "__pycache__"
"RCS" "CVS" "rcs" "cvs" ".git" ".github"))))
(directory-files dir)))
(let ((subdir-path (concat dir (file-name-as-directory subdir))))
;; 目录下有 .el .so .dll 文件的路径才添加到 `load-path' 中,提升Emacs启动速度
(when (cl-some #'(lambda (subdir-file)
(and (file-regular-p (concat subdir-path subdir-file))
;; .so .dll 文件指非Elisp语言编写的Emacs动态库
(member (file-name-extension subdir-file) '("el" "so" "dll"))))
(directory-files subdir-path))
;; 注意:`add-to-list' 函数的第三个参数必须为 t ,表示加到列表末尾
;; 这样Emacs会从父目录到子目录的顺序搜索Elisp插件,顺序反过来会导致Emacs无法正常启动
(add-to-list 'load-path subdir-path t))
;; 继续递归搜索子目录
(add-subdirs-to-load-path subdir-path)))))
(add-subdirs-to-load-path "/usr/share/emacs/lazycat")
(require 'init)
<
- (require 'cl-lib) 为要用到的 cl 做铺势
- -1 的三个选项很简单,不用谈
- 自定义了一个函数,叫 add-subdirs-to-load-path,它的变量是 search-dir