Я запутался, почему использование remove-text-properties
для удаления свойства текста display
не меняет отображение в буфере.Вместо этого кажется, что я должен полностью удалить все свойства текста, используя set-text-properties
до nil
.Например, почему remove-text-properties
не работает вместо set-text-properties
здесь:
(defvar my-regex "#\\([[:alnum:]]+\\) \\([0-9]+\\)")
(defvar-local my--fontified-p nil)
(defun my-remove-display ()
"Remove the display, eg. '#blah<2020>' -> '#blah 2020."
(save-excursion
(goto-char (point-min))
(while (re-search-forward my-regex nil 'move)
;; why can't I use remove-text-properties here to get rid of 'display?
(set-text-properties (match-beginning 0) (match-end 0) nil))))
(defun my-toggle-display ()
"Toggle font-locking and display of '#blah 2020'."
(interactive)
(if (setq my--fontified-p (not my--fontified-p))
(progn
(font-lock-add-keywords
nil
`((,my-regex
(0 (prog1 nil
(put-text-property
(1+ (match-beginning 0)) (match-end 0)
'display
(format "%s<%s>"
(match-string-no-properties 1)
(match-string-no-properties 2)))))
(0 'font-lock-constant-face t))))
(font-lock-flush)
(font-lock-ensure))
(my-remove-display)
(font-lock-refresh-defaults)))
;;; Example that gets fontified
;; #blah 2020