Как мне запустить ловушку Emacs при изменении буфера?

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

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

11.12.2008 17:41:23
Кажется, что лучшее регулярное выражение решит вашу проблему.
Trey Jackson 12.12.2008 20:20:06
4 ОТВЕТА

Вот что я добавил в свой файл 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)
1
11.12.2008 18:36:03
Как я сказал в вопросе, я не хочу что-то подобное, потому что у меня часто загружаются десятки файлов, когда запускается emacs, и он проходит через них и удаляет их, даже если они мне не нужны. Когда я закрываю emacs, все буферы грязные, и мне нужно их сохранить. Спасибо хоть.
user45425 12.12.2008 16:28:36

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

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

(add-hook 'before-change-functions 
          (lambda (&rest args) 
            (if (not (buffer-modified-p))
                (untabify (point-min) (point-max)))))
4
11.12.2008 18:41:43

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

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

0
11.12.2008 18:58:42
Спасибо, это интересное решение. Я думаю, что я бы предпочел разметить грани файла, чтобы я мог видеть, когда строки длинные, без необходимости позиционировать курсор. Тем не менее, это вроде аккуратно. Я могу использовать это для других вещей. :)
user45425 12.12.2008 16:30:31

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

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

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

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

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

0
11.12.2008 19:12:22