Хук режима сценария оболочки Emacs - PullRequest
5 голосов
/ 17 января 2012

По какой-то причине мои перехватчики режима сценария оболочки не выполняются.Пример в моем .emacs:

(add-hook 'shell-script-mode-hook (lambda () (rainbow-delimiters-mode 1)))

приводит к установке переменных, но режим не загружается для открытых файлов сценариев.Как правильно зацепить здесь?

Я использую режим сценария оболочки по умолчанию (modeline говорит, например, Shell-script[bash]).Нужно ли подключать каждый тип оболочки отдельно (sh, bash, zsh)?Если да, скажите, пожалуйста, как?

Большое спасибо!

РЕДАКТИРОВАТЬ3:

Оказалось, что произошел конфликт режима textmate со скелетом.пара-вставка в режиме sh (я попытался избежать конфликта, отключив textmate в режиме sh-mode, который затем оставил аппарат sh-mood-hook в руинах. Я полностью удалил режим textmate и теперь использую стандартный скелет-парный подход глобально.

Я приму ответ филса - без него я, вероятно, не смог бы отладить это самостоятельно.

РЕДАКТИРОВАТЬ 2:

Спасибо филсуЯ думаю, его комментарий приближает нас к решению. Хотя это не проблема с разделителями-радугами. Я удалил все sh-mode-hook, кроме вашего первого сообщения приветствия, и перезапустил Emacs. Когда я открываю файл .sh, я получаю следующее:

Настройка отступа для типа оболочки bash Настройка отступа Теперь переменные отступа являются локальными. Настройка отступа для типа оболочки bash Ошибка спецификации режима файла: (void-function nil)

Примечание no "hello"сообщение.Значение sh-mode-hook: (nil (lambda nil (message "hello")))

Я думаю, что проблема заключается в этом первом значении nil - хотя я не вижу, чтобы оно было где-либо установлено.

Если яОцените это:

(setq sh-mode-hook t) (add-hook 'sh-mode-hook (lambda () (message "hello")))

Я вижу приветственное сообщение, хотя после перезапуска (я поместил эти строки в .emacs) оно снова исчезает (ноль снова на вершинехук).

Есть идеи, что делать, чтобы активная ловушка была при настройке?

EDIT1: я пробовал также:

(add-hook 'sh-mode-hook (lambda () (rainbow-delimiters-mode 1)))

с тем же отрицательным результатом - не уверен, что это уместно, хотя ...

Ответы [ 2 ]

10 голосов
/ 17 января 2012

shell-script-mode - псевдоним для sh-mode. Я не проверял, но я подозреваю, что оценивается только переменная ловушки для «реального» имени функции, поэтому я думаю, что sh-mode-hook будет использовать.

Как бы то ни было, в вашем синтаксисе ничего не нарушено, поэтому может быть что-то не так с использованием (rainbow-delimiters-mode 1). Например, вы должны заметить, что правильно работает следующее:

(add-hook 'sh-mode-hook (lambda () (message "hello")))

FWIW, для ловушек я рекомендую вообще не использовать анонимные функции, просто потому что намного проще обновить функцию ловушек, если она названа (удаление старого лямбда-выражения из переменной перед добавлением обновленного) просто раздражает в моих книгах).

0 голосов
/ 17 января 2012

Попробуйте удалить ':

(add-hook 'shell-script-mode-hook (lambda () (rainbow-delimiters-mode 1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...