将参数从命令行传递给Emacs lisp函数

时间:2014-08-08 11:21:47

标签: emacs elisp

我想在命令行上将参数传递给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。

3 个答案:

答案 0 :(得分:3)

变量command-line-argscommand-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")'

初始化Emacs

答案 2 :(得分:1)

想要使用--eval吗?

如果只想在评估--eval表达式之后执行初始化文件处理,那么我认为这个问题需要重新措辞。

然而,假设情况确实如此,我认为emacs-startup-hook与任何答案一样好。

正如Jesse所指出的那样,在处理完init文件(以及after-init-hook)之后处理了--eval表达式。

emacs-startup-hook在处理命令行参数后运行。