从文档中我可以看到我可以访问命令行参数(命令行参数).我想添加自己的论点,但Emacs在启动时抱怨它不能识别它们.
例如
emacs -my_argument
Run Code Online (Sandbox Code Playgroud)
我明白了:
command-line-1: Unknown option `-my_argument'
什么是定义我的自定义参数并向我的Emacs会话提供信息的正确方法?有没有办法从命令行弹出参数?
Sea*_*ght 29
加入这样的事情你的~/.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))
Run Code Online (Sandbox Code Playgroud)
然后你可以执行emacs -my_argument它应该打印i was passed -my_argument到迷你缓冲区.您可以在GNU elisp参考中找到更多信息.
如另一篇文章所述,您可以添加自定义开关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))
Run Code Online (Sandbox Code Playgroud)
这样可以改变你的.emacs评价:
(unless my-switch-found
(message "Didn't find inhibit switch, loading some config.")
...)
Run Code Online (Sandbox Code Playgroud)
你可以把它构建成一个步骤:
;; 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...")
...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |