Подтвердить что ты не робот

Аргумент командной строки Emacs

Из документации, которую я вижу, я могу получить доступ к аргументам командной строки (command-line-args). Я хотел бы добавить свои собственные аргументы, но Emacs жалуется при запуске, что он их не распознает.

например.

emacs -my_argument

Я получаю:

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

Какой правильный способ определить мои собственные аргументы и предоставить информацию на мой сеанс Emacs? Есть ли способ вывести аргумент из командной строки?

4b9b3361

Ответ 1

Добавьте что-то подобное в ваш файл ~/.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.

Ответ 2

Как указано в другом сообщении, вы можете добавить свои настраиваемые ключи в 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...")
  ...)