Ну, я вижу пару проблем с вашим кодом. Во-первых, вы выскакиваете из своего основного списка режимов каждый раз, когда вы всплываете из своего основного списка режимов. Во-вторых, вы цитируете свои (pop)
вызовы, что означает, что вы не передаете нужные значения в (add-hook)
.
Цикл while не выполняет свое тело, когда значение цикла равно nil, поэтому ваш второй блок кода не выдает nil
через ваш (message)
, потому что он не заходит так далеко. nil - это просто конечное значение, полученное в этом (progn)
, являющееся возможным возвращаемым значением цикла while, когда он встречает nil.
Возможно, вы захотите проверить поддержку интерактивной отладки в Emacs, чтобы вы могли выяснить, что на самом деле происходит, если ваш код работает не так, как вы ожидали. См:
M -: (info "(elisp) debugging")
RET
Однако я бы предложил использовать решение lhui, а не исправлять то, что у вас есть.
Для альтернативного синтаксиса я использую этот подход:
(defun my-coding-config ()
(whitespace-mode 1)
(yas/minor-mode 1))
(mapc
(lambda (language-mode-hook)
(add-hook language-mode-hook 'my-coding-config))
'(lisp-mode-hook
rst-mode-hook
python-mode-hook
emacs-lisp-mode-hook
text-mode-hook
tcl-mode-hook
c-mode-hook
fortran-mode-hook))
Определение именованной функции, такой как my-coding-config
, упрощает вещи, если вы решите включить некоторые новые функции позже (например, включить другой второстепенный режим), поскольку вы можете сделать это изменение незамедлительным, просто переоценив эту функцию, а не удаление / добавление элементов ко всем этим переменным хуков.