我将我的Emacs init.el
文件存储在Dropbox中,以及颜色主题等相关文件。假设我有一个目录~/Dropbox/emacs
,其内容类似于:
.
├── init.el
└── themes
└── zenburn-theme.el
然后在我的Linux机器上,我只需要一个从~/emacs.d/init.el
到~/Dropbox/emacs/init.el
的符号链接,效果很好。但是,在我的init.el
中,我希望能够使用相对于init.el
文件本身的路径加载主题。即我喜欢做类似的事情:
(add-to-list 'custom-theme-load-path "./themes/")
(load-theme 'zenburn t)
我使用"./themes/"
作为相对于init.el
的路径似乎无法按预期工作。我可以将其更改为:
(add-to-list 'custom-theme-load-path "~/Dropbox/emacs/themes/")
(load-theme 'zenburn t)
它会起作用。但是,我更喜欢与init.el
文件相关的符号。这样,如果我在以后决定将所有init.el
文件和其他相关文件放在除Dropbox之外的某个地方,我只需复制整个目录并重新连接单个init.el符号链接而不必更改所有对~/Dropbox
的引用。
所以,
init.el
文件的目录?答案 0 :(得分:1)
您要找的是load-file-name
,它包含当前正在加载的文件的完整路径,对于您的示例,它将类似于"/home/username/emacs.d/init.el"
。
然后,您可以使用file-name-directory
删除文件名本身并仅保留目录路径,然后将其添加到expand-file-name
前。
(add-to-list 'load-path (expand-file-name "themes/" (file-name-directory load-file-name)))
请注意,不遵循符号链接:您将获得最初打开的路径,而不是符号链接指向的路径。对于您的示例,您需要确保在~/Dropbox/emacs/themes
的符号链接所在的文件夹中还有~/Dropbox/emacs/init.el
的符号链接。
答案 1 :(得分:0)
我在评论中提到,如果您改为使用符号链接目录而不是仅仅符号链接init.el文件,则可以避免此问题。
然而,我突然想到用这种方法警告你一些陷阱可能是个好主意。我习惯这样做,但后来发现它可能会产生一些问题。
如果您在不同的计算机上最终遇到多个emacs会话,则可能会发生奇怪的冲突。例如,我最初这样做是因为我在家和工作中使用emacs,我只想维护一个配置设置。但是,我有时会注意到“奇怪的”#39;由于与某些emacs的冲突导致的行为。管家文件,自动保存文件,会话恢复文件等。我有一些问题,当我有一个系统没有在线一段时间,然后它确实上线,有问题解决如何同步文件用Dropbox等。
我现在使用git repo为我在github上托管的emacs配置。它不需要花费任何成本,我只需要将配置只是git co到.emacs.d。工作得更好,没有冲突。
Dropbox非常适合共享文件,但如果文件代表经常修改的应用数据,则效果不佳。
关于您的原始问题,如果您不想对整个目录树进行符号链接,则另一个选项是添加其他目录,例如您的主题是否在您的init中的加载路径中.el文件,然后不用担心必须做任何默认路径的东西