我正在编写一个脚本来自动安装一些elisp。我想找到user-emacs-directory
的值,以便我可以将文件复制到正确的目录中。有没有办法从shell中做到这一点?
我希望它可以运行:
$ emacs --batch --eval="(print user-emacs-directory)"
Symbol's value as variable is void: user-emacs-directory
但是你可以看到这并不富有成效。然后我尝试首先加载.emacs
文件:
$ emacs --batch -l ~/.emacs --eval="(print user-emacs-directory)"
Loading /Users/noah/dotfiles/emacs/init.el (source)...
Symbol's function definition is void: global-visual-line-mode
但那也会窒息。谷歌搜索还没有让我得到答案。有什么想法吗?
编辑:具体问题是我使用的是旧版本的Emacs(22.1.1)。运行Emacs 24.4.1有效:
$ emacs -l ~/.emacs --batch --eval="(print user-emacs-directory)" 2>/dev/null
"~/dotfiles/emacs"
(这是我在自己的~/.emacs
文件中设置的自定义值)
请注意,我正在将stderr重定向到/dev/null
以取消某些加载消息。
答案 0 :(得分:2)
在Ubuntu附带的vanilla GNU Emacs 24.5.1
上为我工作:
$ emacs -Q --batch --eval="(princ user-emacs-directory)"
~/.emacs.d/
注意princ
而不是print
,以避免额外的空格和引号。
答案 1 :(得分:0)
--batch
隐含-q
,这意味着 没有user-emacs-directory
编辑:呃。不,-q
并不意味着这一点。正如sds指出的那样,建议的代码应该可行。这将教会我得出结论。我会删除这个答案,但由于某种原因,原来的方法显然不适用于Noah,我会留在这里,以防万一它仍有帮助...
通常你只想要$HOME/.emacs.d/
有关详情,请参阅 C-h i g (emacs) Find Init
RET 。