В Emacs как сделать локальную переменную безопасным для установки в файле для всех возможных значений

В Elisp я внедрил для специального настраиваемого режима переменную типа:

(defvar leo-special-var "")
(make-variable-buffer-local 'leo-special-var)

Теперь я устанавливаю эту переменную в файлах я с строками (в файле для редактирования):

# Local Variables:
# leo-special-var: "-d http://www.google.com.au"
# End:

И я хочу рассматривать эту переменную как "безопасную для всех своих значений, поэтому safe-local-variable-values не помогает. Вместо этого я попытался (в коде lisp):

# setting the symbol property of the variable
(put 'leo-special-var 'safe-local-variable 'booleanp)

но без успеха. Я делаю что-то неправильно при настройке свойства символа? Или есть другой способ?

Ответы

Ответ 1

Если вы действительно хотите указать, что он безопасен для значений all, то используйте это:

(put 'leo-special-var 'safe-local-variable (lambda (xx) t))

Функция проверки безопасности здесь возвращает не nil для любого значения.

(Отредактировано, чтобы удалить дополнительную скобку.)

Ответ 2

Вы хотите использовать

(put 'leo-special-var 'safe-local-variable #'stringp)

чтобы сказать, что это безопасно, пока это строка.

Ответ 3

В руководстве: (elisp) File Local Variables

   You can specify safe values for a variable with a
`safe-local-variable' property.  The property has to be a function of
one argument; any value is safe if the function returns non-`nil' given
that value.  Many commonly-encountered file variables have
`safe-local-variable' properties; these include `fill-column',
`fill-prefix', and `indent-tabs-mode'.  For boolean-valued variables
that are safe, use `booleanp' as the property value.  Lambda
expressions should be quoted so that `describe-variable' can display
the predicate.

   When defining a user option using `defcustom', you can set its
`safe-local-variable' property by adding the arguments `:safe FUNCTION'
to `defcustom' (*note Variable Definitions::).