Emacs - пропускайте пробелы
Я пытаюсь сделать так, чтобы список уничтожений по существу игнорировал только пробельные записи (табуляции, новые строки, просто пробелы и т. Д.), Я довольно новичок в elisp, и я почти уверен, что сделать это можно с помощью defadvice, но у меня есть Несколько вопросов.
- Было бы лучше вообще предотвратить попадание пробельных записей в список уничтожений или пропустить их на янки? Я предположил последнее.
В этом случае я полностью теряюсь в отношении того, какую функцию мне следует посоветовать, например, между current-kill, yank и insert-for-yank - но я не совсем уверен, что мне следует манипулировать, чтобы не вырывать пробелы из списка уничтожений.
Спасибо!
РЕДАКТИРОВАТЬ: Я почти уверен, что способ сделать это состоит в том, чтобы манипулировать `current-kill ', чтобы продолжать вызывать себя, пока он не достигнет записи без пробелов? (или конец кольца, в зависимости от того, что наступит раньше)
3 ответа
Из комментариев кажется, что у вас есть проблемы с пробелами в вашем kill-ring, так как вы убиваете пустые строки. Мое решение состоит в том, чтобы избежать уничтожения пробельных строк и использовать функцию delete-blank-line
(Cx Co) вместо. Это уменьшает группу пустых строк (включая пробелы и табуляции) до одной пустой строки.
Я написал пакет clean-kill-ring.el , который обеспечивает функциональность для управления тем, что разрешено в кольце уничтожений.
По умолчанию включение
clean-kill-ring-mode
предотвращает попадание пустых строк в список уничтожений, но возможна и дальнейшая настройка.
Следующий совет не позволяет добавлять пробелы в список уничтожений в первую очередь:
(defun night/h-kill-skip-whitespace (orig-fn string &optional rest)
(let* (
(string-raw (substring-no-properties string))
(space-p (not (string-match-p "[^ \t\n\r]" string-raw))))
(cond
((not space-p)
(apply orig-fn string rest))
(t
(message "skipped whitespace kill")
))))
(advice-add 'kill-new :around #'night/h-kill-skip-whitespace)