簡體   English   中英

Emacs 自定義命令行參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM