Установка значения новой глобальной переменной в emacs - PullRequest
3 голосов
/ 11 августа 2011

У меня есть эта строка в функции:

(let (v1) (v2)
    ... more code here ...
    (setq matchAgainstDirectory (
      read-directory-name "Set directory to match against:")))))))

matchAgainstDirectory отсутствует в списке значений, объявленных let, поэтому я предполагаю, что он установит глобальное значение.

В какой-то момент я хочу установить значение nil, но если я нажму M-x RET set-variable RET, matchAgainstDirectory не появится в качестве допустимого имени переменной. Почему это?

Я знаю, что могу сделать M-x ielm и написать туда (setq matchAgainstDirectory ()), но я ищу более короткий способ сделать это. Существует ли такая вещь?

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Чтобы переменная отображалась, когда вы делаете Mx set-variable , она должна быть определена через defvar, потому что (как говорят в документах) :

Mx set-variable ограничена переменными пользовательских опций, но вы можете установить любую переменную с помощью выражения Lisp, используя функцию setq.

Итак, определите еев качестве переменной с:

(defvar matchAgainstDirectory nil "some comment") 

или

(defvar matchAgainstDirectory) ; value and comment are optional

Итак, поместите это в ваш код где-то на верхнем уровне (не в вашем выражении let).

setq не создает переменную пользовательской опции, он просто создает переменную lisp emacs, которую пользователь не должен устанавливать вручную с помощью Mx set-variable .

2 голосов
/ 11 августа 2011

Вы также можете использовать M -: (setq matchAgainstDirectory nil) RET , что немного короче, чем вызов ielm.

...