2010-01-21 115 views
16

從文檔中我可以看到我可以訪問命令行參數(命令行參數)。 我想添加自己的參數,但Emacs在啓動時抱怨它無法識別它們。Emacs自定義命令行參數

E.g.

emacs -my_argument 

我得到:

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

什麼來定義我的自定義參數,並以我的Emacs會話提供信息的正確方法? 有沒有辦法從命令行彈出一個參數?

回答

26

添加這樣的事情你~/.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中找到更多信息。

8

正如另一篇文章中所述,您可以將您的自定義開關添加到command-switch-alist,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...") 
    ...) 
+0

測試的代碼標記爲 「未經過測試」。它的工作原理與上述相同。 –