Фрагмент, который у вас есть, будет работать для любого текстового файла.В этом нет ничего специфического для Java, кроме того, что он называется java-mode-untabify
.Единственное, что вам нужно сделать, это продублировать вызов add-hook
и изменить имя перехвата на espresso-mode-hook
, или любой другой правильный перехват для режима эспрессо.Хотя я мог бы предложить вам изменить имя функции на что-то, что отражает тот факт, что она не специфична для Java.Что-то вроде cleanup-whitespace-in-buffer
или что угодно.
(defun cleanup-whitespace-in-buffer () ; <- more appropriate name
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
(if (search-forward "\t" nil t)
(untabify (1- (point)) (point-max))))
nil)
(add-hook 'espresso-mode-hook ; <- you can actually add this to any hook
(lambda ()
(add-hook 'write-contents-hooks 'cleanup-whitespace-in-buffer nil 'local)))
CAVEAT:
Я только что изменил опубликованный вами фрагмент.Я сейчас не на машине с Emacs, так что я не проверял ничего из этого.
Функция cleanup-whitespace-in-buffer
просто удаляет любые пробелы в каждой строке в файле, а затем преобразует непоследовательныевкладки в пробелы.Вызов add-hook
создает анонимную функцию (лямбду), которая будет вызываться при каждом запуске ловушки.Эта анонимная функция обеспечивает запуск cleanup-whitespace-in-buffer
в буфере до его сохранения.
Мне действительно нравится ответ Алекса Отта намного лучше, поскольку он намного более гибок.Он устанавливает функцию, которая запускается всякий раз, когда ЛЮБОЙ буфер сохраняется.Он проверяет, есть ли в сохраняемом буфере режим, который находится в списке указанных режимов, и, если это так, удаляет буфер из памяти перед сохранением.Он не удаляет конечные пробелы, но вы можете легко изменить вызов (untabify (point-min) (point-max))
на (cleanup-whitespace-in-buffer)
, если хотите такое поведение.Это позволяет вам легко добавлять другие режимы, которые будут предварительно обрабатывать свои файлы перед сохранением.Это даже работает, если по какой-то причине ваш режим не связан с ним.Его метод лучше, чем я предложил.Я просто опубликовал этот ответ, чтобы разъяснить, как работает ваш фрагмент, поскольку вы сказали, что чувствуете себя недолго в Emacs Lisp.