Как мне автоматически получить paredit в сеансе emacs nrepl?

У меня есть следующая строка в моем файле инициализации emacs.

(setq auto-mode-alist (cons `("\*nrepl\*" . paredit-mode) auto-mode-alist))

Я проверяю, работает ли это, создавая новый буфер с именем *nrepl* Ctrl-x-f *nrepl*. Да, буфер *nrepl* имеет активный Paredit, режим paredit был включен.

Я закрываю буфер *nrepl*, не сохраняя его.

Я запускаю сеанс nrepl, набрав M-x nrepl-jack-in. Сервер nrepl запускается, и я вижу файл nrepl repl. nrepl repl также называется *nrepl*, однако Paredit не включен.

Что я делаю не так?


person Stephen Cagle    schedule 21.10.2012    source источник


Ответы (3)


Вы путаете буферы и файлы: auto-mode-alist сопоставляет имена файлов с регулярными выражениями, чтобы решить, какой режим использовать при редактировании этих файлов. Но *nrepl* — это буфер, который не содержит файла, поэтому auto-mode-alist для него не действует. Вместо этого вы, вероятно, захотите выяснить, какой основной режим использует *nrepl*, а затем использовать (add-hook '<the-major-mode>-hook 'paredit-mode).

person Stefan    schedule 21.10.2012
comment
‹major-mode› nrepl-connected, кажется, делает свое дело. Всего: (add-hook 'nrepl-connected-hook' paredit-mode) - person Stephen Cagle; 22.10.2012

Проще говоря - вам нужен следующий код:

(add-hook 'nrepl-mode-hook 'paredit-mode) ; for nrepl.el <= 0.1.8
(add-hook 'nrepl-repl-mode-hook 'paredit-mode) ; for nrepl.el > 0.1.8

Что эквивалентно более длинной форме:

(add-hook 'nrepl-mode-hook (lambda () (paredit-mode +1)))
person Bozhidar Batsov    schedule 22.10.2012

(add-hook 'nrepl-mode-hook 'paredit-mode)

это то, что они предлагают на странице nrepl github

person Cam Saul    schedule 28.02.2013