Моя проблема в том, что я открываю буфер с помощью (set-buffer (find-tag-noselect (current-word)))
, а затем пытаюсь скопировать некоторый текст из этого буфера. Текст, который я получаю, имеет только свойства (fontified nil)
. find-tag-noselect
автоматически открывает буфер, найденный в файле TAGS, но, похоже, он не запускает режим блокировки шрифтов над ним. Когда я вручную переключаюсь на этот буфер после того, как он был открыт, а затем снова запускаю функцию, когда он копирует текст, к нему присоединяются все правильные свойства текста. Итак, что мне нужно сделать, чтобы этот буфер был полностью инициализирован, чтобы в него была скопирована правильная подсветка синтаксиса?
(defvar newline-string "
")
(defun get-initial-indent-regexp-python()
"Gets the initial amount of spaces for the function we are looking at, does not account for tabs"
(concat "^" (get-current-indent-string) (concat "[^ #" newline-string "]")))
(defun get-end-of-function-python(spaces-regex)
"Gets the point at the end of a python block"
(save-excursion
(forward-line 1)
(while (and (not (looking-at spaces-regex)) (equal (forward-line 1) 0)))
(point)))
(defun get-point-at-end-of-function ()
"This might be better served checking the major mode."
(setq extension (file-name-extension (buffer-file-name)))
(if (equal extension "py")
(get-end-of-function-python (get-initial-indent-regexp-python))))
(defun inline-function ()
"Must change to overlays, be able to toggle visibility"
(interactive)
(let (text indent-string)
; clean all overlays without attached buffer
(save-excursion
(set-buffer (find-tag-noselect (current-word)))
(setq text (buffer-substring (point) (get-point-at-end-of-function))))
(setq text (concat newline-string text))
(save-excursion
(move-end-of-line nil)
(let (overlay)
(setq overlay (make-overlay (point) (+ (point) 1) (current-buffer)))
(overlay-put overlay 'display text)
(setq inline-func-overlays (cons overlay inline-func-overlays))))))