Я пытаюсь исправить проблему в пакете web-beautify.Emacs lisp: сохранить позицию курсора при замене содержимого буфера
Функция elisp использует внешний инструмент для переформатирования содержимого буфера. Затем он делает следующее, чтобы попытаться сохранить позицию курсора:
(let ((p (point)))
(save-excursion
(with-current-buffer (current-buffer)
(erase-buffer)
(insert-buffer-substring outputbuf)))
(goto-char p)
...
Если строка добавляется до момента, (goto-char p)
может вызвать буфер для прокрутки хаотично.
this, я попробовал заменить p
на (create-marker (point) t)
; Кажется, что лучше обрабатывать текст, добавленный в начале буфера, в общем; однако в этом случае он вообще не работает (по-видимому, потому, что содержимое буфера полностью заменяется.)
Как бы вы напали на это?
Если инструмент только добавляет/удаляет пробелы, вы можете подсчитать количество небелых символов между началом буфера и точки и затем переместить в него несколько ненулевых символов после замены содержимого. – legoscia
Вы имеете в виду подсчет небелых пробелов в буфере * перед заменой? – phtrivier
Да, это единственный способ, которым я могу думать о том, чтобы сохранить позицию точки таким образом, который имеет смысл для пользователя. – legoscia