从文档中我可以看到我可以访问命令行参数(命令行参数)。 我想添加自己的论点,但Emacs在启动时抱怨它不能识别它们。
E.g。
emacs -my_argument
我明白了:
command-line-1: Unknown option `-my_argument'
定义自定义参数并向我的Emacs会话提供信息的正确方法是什么? 有没有办法从命令行弹出参数?
答案 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...")
...)