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)
Другие вопросы по тегам