我想在命令行上将参数传递给Emacs lisp函数。我试过了
emacs --no-splash --eval '(setq my-test-var "hello")' -l init.el t.txt
其中init.el
是
(message my-test-var)
但未显示任何消息。我在Ubuntu 14.04上使用Emacs版本24.3。
答案 0 :(得分:3)
变量command-line-args
和command-line-args-left
将允许您访问从命令行传递的参数(请参阅this manual page)。
command-line-args
的文档字符串:
Args通过shell传递给Emacs,作为字符串列表。 在处理它们时,许多参数将从列表中删除。
command-line-args-left
的文档字符串:
尚未处理的命令行参数列表。
答案 1 :(得分:1)
通过--eval
参数传递的命令似乎只在初始化Emacs后执行,所以你可以在init.el文件中执行此操作:
(defvar testvar t)
(defun test-function(arg)
(setq testvar arg)
(message testvar))
使用emacs --eval '(test-function "hello")'
答案 2 :(得分:1)
您想要使用--eval
吗?
如果只想在评估--eval表达式之后执行初始化文件处理,那么我认为这个问题需要重新措辞。
然而,假设情况确实如此,我认为emacs-startup-hook
与任何答案一样好。
正如Jesse所指出的那样,在处理完init文件(以及after-init-hook
)之后处理了--eval表达式。
emacs-startup-hook
在处理命令行参数后运行。