Как мне запустить ловушку Emacs при изменении буфера? - PullRequest
4 голосов
/ 11 декабря 2008

Опираясь на Чтобы Emacs не загружал файлы при сохранении определенных типов файлов (и только файлов этих типов) , я хотел бы запустить ловушку для удаления файлов C ++, когда я начинаю изменять буфер. Я попытался добавить перехватчики, чтобы разгрузить буфер при загрузке, но затем он удалил все мои доступные для записи файлы, которые автоматически загружаются при запуске emacs.

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

Ответы [ 4 ]

4 голосов
/ 11 декабря 2008

Посмотрите на переменную "before-change-functions".

Возможно, что-то в этом духе (предупреждение: код не проверен):

(add-hook 'before-change-functions 
          (lambda (&rest args) 
            (if (not (buffer-modified-p))
                (untabify (point-min) (point-max)))))
1 голос
/ 11 декабря 2008

Вот что я добавил в свой файл emacs, чтобы отключить его при загрузке:

(defun untabify-buffer ()
  "Untabify current buffer"
  (interactive)
  (untabify (point-min) (point-max)))

(defun untabify-hook ()
  (untabify-buffer))

; Add the untabify hook to any modes you want untabified on load
(add-hook 'nxml-mode-hook 'untabify-hook)
0 голосов
/ 11 декабря 2008

И другой, тангенциальный ответ.

Вы упомянули, что ваше регулярное выражение не было достаточно хорошим, чтобы сказать, когда был достигнут предел в 132 символа. Возможно, лучшее регулярное выражение ...

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

"^\\(?: \\|[^   \n]\\{4\\}\\)\\{33\\}\\(.+\\)$"

Последнее заключенное в скобки выражение - это набор символов, превышающий ограничение. Первое выражение в скобках: застенчивый .

0 голосов
/ 11 декабря 2008

Этот ответ является косвенным, но может быть полезным.

Пакет wide-column.el текст ссылки меняет цвет курсора, когда курсор находится за заданным столбцом, и фактически цвета курсора могут варьироваться в зависимости от настроек. Это звучит как менее навязчивое решение, чем ваш код регулярного выражения, но может не соответствовать вашим потребностям.

...