Запретить расширение Abbrev после определенных символов в Emacs - PullRequest
3 голосов
/ 09 августа 2011

Есть ли способ предотвратить автоматическое расширение аббревиатуры во встроенном abbrev-mode после определенных символов?Например, я хочу, чтобы моя аббревиатура расширялась после пробела, новой строки, запятой и т. Д., Но не после тире или подчеркивания.

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

В руководстве есть несколько сокращений, но так как я абсолютный новичок в Elisp, я неувидеть очевидное решение ...

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

Ответы [ 2 ]

1 голос
/ 03 октября 2014

Сделать подчеркивание символом, составляющим слово для текущего режима.В руководстве Emacs узел Expanding Abbrevs:

[A] любой символ, не являющийся составной частью слова, расширяет аббревиатуру, и любой символ, составляющий слово, можетбыть частью аббревиатуры.

Используйте функцию modify-syntax-entry для изменения синтаксического класса _, чтобы сделать его составным словом:

(modify-syntax-entry ?_ "w")

Thisрешение полезно только в том случае, если в противном случае _ не является утомительным для словосочетания.Вы хотите, чтобы _ действовал так, как будто это часть слова или нет?Это первый вопрос.

0 голосов
/ 17 августа 2011

ОК, так что намек на решение уже был в самом вопросе.Вот что работает для меня:

(defun protect-underscore ()
 (interactive)
 (insert "_"))

(defun protect-dash ()
 (interactive)
 (insert "-"))

(defun protect-equal ()
 (interactive)
 (insert "="))

(global-set-key (kbd "_") 'protect-underscore)
(global-set-key (kbd "-") 'protect-dash)
(global-set-key (kbd "=") 'protect-equal)

Я уверен, что должно быть более элегантное решение ... спасибо Магнару.

...