Аргумент командной строки Emacs
Из документации, которую я вижу, я могу получить доступ к аргументам командной строки (command-line-args).
Я хотел бы добавить свои собственные аргументы, но Emacs жалуется при запуске, что он их не распознает.
например.
emacs -my_argument
Я получаю:
command-line-1: Unknown option `-my_argument'
Какой правильный способ определить мои собственные аргументы и предоставить информацию на мой сеанс Emacs?
Есть ли способ вывести аргумент из командной строки?
Ответы
Ответ 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...")
...)