Передача аргументов в сценарий elisp. Снова - PullRequest
3 голосов
/ 20 июля 2011

Как передать аргументы -q -d -Q -t -L -fg -bg --color и т. Д.?

Выполнение чего-то вроде emacs --script -Q <scriptname> <arguments> определенно не передаст аргументы, которые используются в emacs. Так как это сделать?

Ответы [ 4 ]

4 голосов
/ 24 июля 2011

Исходя из вашего комментария к ответу Рафаэля Ибраима, я добавляю второй ответ, так как я думаю, что мой первый ответ также неверно истолковывает ваш вопрос (и если да, вы можете отредактироватьвопрос для пояснения).

Вы можете запретить Emacs обрабатывать аргументы командной строки, используя обычный подход 'пустого' аргумента: --

Так что если вы запустите это:

emacs --script (filename) -- -Q

Emacs не будет использовать аргумент -Q (или фактически --), и он будет доступен вашему сценарию.Вы можете легко проверить это с помощью следующего скрипта:

(print argv)
2 голосов
/ 14 октября 2011

Если вы запускаете emacs в режиме сценария, я бы порекомендовал сбросить переменную "argv" в nil в конце вашего сценария, иначе emacs попытается интерпретировать "argv" после завершения сценария.

Предположим, у вас есть файл с именем «test-emacs-script.el» со ​​следующим содержимым:

#!/usr/bin/emacs --script
(print argv)
(setq argv nil)

Попробуйте запустить этот скрипт как "./test-emacs-script.el -a". Если вы запустите этот скрипт без сброса «argv» (последняя строка в скрипте), то результат будет:

("-a")
Unknown option `-a'

Сброс «argv» избавляет от сообщения об ошибке «unknown option»

1 голос
/ 24 июля 2011

Если вы вводите команду вручную в оболочке, проблем не должно быть (за исключением того, что в вашем примере имя вашего скрипта равно -Q), поэтому я предполагаю, что вы пытаетесь создать исполняемый скрипт с помощью emacs как команда Шебанга?

Это лучшее решение, которое я видел для создания переносимых исполняемых сценариев elisp, которые содержат дополнительные аргументы:

Сценарии оболочки Emacs - как добавить в скрипт начальные опции?

1 голос
/ 20 июля 2011

Я думаю, что у вас есть два варианта здесь:

  • Создайте свой собственный аргумент, как объяснено здесь .
  • Используйте переменную command-line-args.Единственная проблема заключается в том, что эта переменная, вероятно, не выполняет то, что вам нужно (из руководства ):

Most options specify how to initialize Emacs, or set parameters for the Emacs session. We call them initial options. A few options specify things to do, such as loading libraries or calling Lisp functions. These are called action options. These and file names together are called action arguments. The action arguments are stored as a list of strings in the variable command-line-args. (Actually, when Emacs starts up, command-line-args contains all the arguments passed from the command line; during initialization, the initial arguments are removed from this list when they are processed, leaving only the action arguments.)

Другими словами,в command-line-args будут доступны только аргументы действий, которые вам особо не помогут.

...