Emacs自定义命令行参数

时间:2010-01-21 19:36:51

标签: emacs elisp

从文档中我可以看到我可以访问命令行参数(命令行参数)。 我想添加自己的论点,但Emacs在启动时抱怨它不能识别它们。

E.g。

emacs -my_argument

我明白了:

command-line-1: Unknown option `-my_argument'

定义自定义参数并向我的Emacs会话提供信息的正确方法是什么? 有没有办法从命令行弹出参数?

2 个答案:

答案 0 :(得分:28)

~/.emacs~/.emacs.el~/.emacs.d/init.el文件中添加以下内容:

(defun my-argument-fn (switch)
  (message "i was passed -my_argument"))

(add-to-list 'command-switch-alist '("-my_argument" . my-argument-fn))

然后您可以执行emacs -my_argument并将i was passed -my_argument打印到迷你缓冲区。您可以在GNU elisp reference

中找到更多信息

答案 1 :(得分:8)

如另一篇文章所述,您可以将自定义开关添加到command-switch-alist,emacs将为命令行传入的任何匹配开关调用处理函数。但是,此操作是在评估.emacs文件后完成的。这适用于大多数情况,但您可能希望使用命令行参数来更改.emacs评估的执行路径或行为;我经常这样做来启用/禁用配置块(主要用于调试)。

要实现此目的,您可以阅读command-line-args并手动检查您的交换机,然后将其从列表中删除,这将阻止emacs抱怨未知参数。

(setq my-switch-found (member "-myswitch" command-line-args))
(setq command-line-args (delete "-myswitch" command-line-args))

这可能会改变您的.emacs评估:

(unless my-switch-found
  (message "Didn't find inhibit switch, loading some config.") 
  ...)

你可以把它构建成一个步骤:

;; This was written in SO text-box, not been tested.
(defun found-custom-arg (switch)
  (let ((found-switch (member switch command-line-args)))
    (setq command-line-args (delete switch command-line-args))
    found-switch))

(unless (found-custom-arg "-myswitch")
  (message "Loading config...")
  ...)