emacs: перехват режима отключается, когда режим переключается вручную - PullRequest
0 голосов
/ 01 апреля 2020

В моем .emacs есть следующие ловушки режима:

(defun my-html-mode-hook ()
  (interactive)
  (setq tab-width 4
        ;; this will make sure TABs are used instead of spaces
        indent-tabs-mode t)
  )

(defun my-javascript-mode-hook ()
  (interactive)
  (setq tab-width 4
        ;; this will make sure TABs are used instead of spaces
        indent-tabs-mode t)
  )


(add-hook 'javascript-mode-hook 'my-javascript-mode-hook)
(add-hook 'html-mode-hook 'my-html-mode-hook)

Теперь, когда я открываю .html, он работает как положено, то же самое для открытия .js.

Однако при открытии .html и последующем переключении на JavaScript с помощью M-x javascript-mode вручную my-javascript-mode-hook - это , а не бег (по крайней мере, ширина вкладки переключается на 8). Как заставить этот крюк работать, когда я переключаю режим вручную?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Нет javascript-mode-hook, боюсь. Конечно, не по умолчанию.

javascript-mode - это псевдоним для js-mode, что означает, что определен только js-mode-hook. Однако псевдонимы переменных также важны - я предлагаю вам M-x report-emacs-bug и спрашиваю, может ли javascript-mode-hook быть определен как псевдоним переменной для js-mode-hook. Пока этот defvaralias был автоматически загружен (вместе с псевдонимом режима и, следовательно, до того, как вы его использовали), я считаю, что он будет работать как нужно.

Как таковой, и, как я и ожидал, я невозможно воспроизвести / подтвердить ваше утверждение о том, что javascript-mode-hook «работает как положено» в случае открытия файла .js. Ваш код не ведет себя так в Emacs 26.3 или 27.0.90.

0 голосов
/ 02 апреля 2020

Кажется, что в именовании существует страшная двусмысленность, а именно, javascript-mode-hook и js-mode-hook распознаются и запускаются при запуске, когда файл JavaScript открыт.

Однако при переключении на JavaScript вручную, только js-mode-hook запускается. Оба режима js-mode и javascript-mode запускают режим JavaScript (по крайней мере, они отображаются как (JavaScript) в строке состояния), поэтому кто-то устал набирать буквы "avacript" и выгнать их из "javascript "но забыл навести порядок ...

...