我又双叒叕来问强迫症问题了……
定义custom-file肯定放在所有东西之前
那么custom-file到底该放到什么时间加载?
是该放到所有文件加载之后,还是放到基础配置(elpa啊,gui啊等等)之后,还是直接定义完就加载?
第一种
(setq custom-file (expand-file-name "mxcu.el" user-emacs-directory))
(require 'init-elpa)
(require 'init-utils)
(require 'init-gui)
;;其他配置
(when (file-exists-p custom-file)
(load custom-file))
(provide 'init)
;; end of file
第二种
(setq custom-file (expand-file-name "mxcu.el" user-emacs-directory))
;; 其他配置
(require 'init-elpa)
(require 'init-utils)
(require 'init-gui)
(when (file-exists-p custom-file)
(load custom-file))
;; 其他配置
(provide 'init)
;; end of file
第三种
(setq custom-file (expand-file-name "mxcu.el" user-emacs-directory))
(when (file-exists-p custom-file)
(load custom-file))
;; 其他配置
(require 'init-elpa)
(require 'init-utils)
(require 'init-gui)
;; 其他配置
(provide 'init)
;;end of file
在用户不知道你做了什么配置的时候,他们自定义的配置能正确覆盖你的配置。不然就有一堆人问:
为什么我的 custom 配置不会生效?
你需要考虑到你的用户可能对 Emacs 没有任何了解,看了不知道哪里来的教程就做各种实验,然后觉得不对就找你是问了。
2 个赞
你说的有道理……
另外还有个问题,如果我放的太前面的话,那么一旦有人在customize里配错了东西,这个错误的配置就会立刻报错,导致没办法往下加载(可恶的从上往下执行…… )……
不过实际上,“用户”……就我一个
顺便再问你个事情,我应该完全依赖custom-file和M-x customize,还是应该给手写的custom留个余地?
熟练的用户都是手写 自定义部分的 。配置界面主要用来参考 要怎么写。
1 个赞
感觉应该是
-
(setq custom-file ...)
放到最前面,因为 package-install
之类的可能会用到它;
-
(load custom-file ...)
放到最后面,因为它里面的内容有可能会依赖前面的设置。
我的目前大概像这样:
;;; init.el --- 我的 Emacs 配置 -*- lexical-binding: t; -*-
;;; Code:
(package-initialize)
(setq custom-file (locate-user-emacs-file "custom.el"))
(use-package magit)
(use-package org)
(load custom-file :no-error :no-message)
;;; init.el ends here
不过即使你不是这么写的,也没关系,你完全可以等到遇到问题时再做相应的调整。
我个人的总结和你一样……
set应该在所有文件之前(但是没必要在第一行,尤其是你有设置版本判断和垃圾回收阈值的状况),这样可以让需要写custom-file的package写到正确的地方。
但是load应该在所有文件之后,以避免依赖问题和因为custom-file导致的加载中断。