[英]Emacs custom command line argument
從文檔中我可以看到我可以訪問命令行 arguments (command-line-args)。 我想添加我自己的 arguments 但 Emacs 在啟動時抱怨它無法識別它們。
例如
emacs -my_argument
我得到:
command-line-1: Unknown option `-my_argument'
定義我的自定義 arguments 並向我的 Emacs session 提供信息的正確方法是什么? 有沒有辦法從命令行彈出參數?
將這樣的內容添加到~/.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參考中找到更多信息。
如另一篇文章所述,您可以將自定義開關添加到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...")
...)
對於那些有興趣的人,這里有一個代碼片段來展示如何在 Emacs lisp 中處理自定義 arguments。 在這種情況下,我正在處理參數--suffix
/ -S
到變量_suffix
。
我從BSD-Lite 腳本Emacs 腳本中提取了這個想法。
(setq _suffix nil)
;; Process cli args
(while command-line-args-left
(setq k (car command-line-args-left))
(setq command-line-args-left (cdr command-line-args-left))
(setq command-line-args (delete k command-line-args))
(cond
(or (string-equal k "--cs-suffix")
(string-equal k "-S"))
(setq _suffix (intern (car command-line-args-left)))
(setq command-line-args-left (cdr command-line-args-left))
(setq command-line-args (delete _suffix command-line-args))
)))
這將通過command-line-args-left
滾動並將它們全部從command-line-args
中刪除,這將防止Emacs
抱怨。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.