Я хотел бы иметь глобальную комбинацию клавиш, которая показывает значение переменной. Однако значение переменной может измениться в соответствии с текущим основным режимом в текущем буфере.Локальные переменные режима в Emacs
Я попытался добавить следующее к моей ~/.emacs
:
(defun my-elisp-mode-setup()
(defvar-local *current-mode-var* "elisp-mode")
)
(defun my-sh-mode-setup()
(defvar-local *current-mode-var* "sh-mode")
)
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-setup)
(add-hook 'sh-mode-hook 'my-sh-mode-setup)
Если я теперь начать Emacs с emacs test.sh
и затем введите M-x describe-variable *current-mode-var*
в test.sh
буфере, я получаю
*current-mode-var*'s value is "elisp-mode"
Automatically becomes buffer-local when set.
Documentation:
Not documented as a variable.
в то время как я ожидал get *current-mode-var*'s value is "sh-mode"
Спасибо! Если я использую 'setq', как тогда переменная станет локальной? –
Это буфер локальный после объявления. Это что-то вроде объявления типа и назначения в C: назначение не меняет тип. Поэтому 'defvar-local', за которым следует' setq', будет * not * изменять переменную на нелокальную. –
Хорошо. Означает ли это, что вам нужно добавить '(defvar-local * current-mode-var * nil)' в '~/.emacs', а затем использовать' setq' в режимах? –