Inherit text props in Completion Preview insertion commands

When completing with Completion Preview mode commands,
inherit text properties from surrounding text similarly to
other completion commands, such as 'completion-at-point'.

* lisp/completion-preview.el (completion-preview-insert)
(completion-preview-partial-insert)
(completion-preview-complete): Use 'insert-and-inherit'
instead of 'insert' to insert text for completion.
* test/lisp/completion-preview-tests.el
(completion-preview-insert-inherits-text-properties): New
test.
This commit is contained in:
Eshel Yaron 2024-06-29 11:51:10 +02:00
parent 3088b06759
commit 2119cd52cd
No known key found for this signature in database
GPG key ID: EF3EE9CA35D78618
2 changed files with 16 additions and 3 deletions

View file

@ -491,7 +491,7 @@ point, otherwise hide it."
(str (concat pre com (nth ind all))))
(completion-preview-active-mode -1)
(goto-char end)
(insert (substring-no-properties aft))
(insert-and-inherit (substring-no-properties aft))
(when (functionp efn) (funcall efn str 'finished))))
(defun completion-preview-partial-insert (fun &rest args)
@ -516,7 +516,7 @@ Beyond moving point, FUN should not modify the current buffer."
(save-excursion
(goto-char end)
;; Temporarily insert the full completion candidate.
(insert (substring-no-properties aft)))
(insert-and-inherit (substring-no-properties aft)))
;; Set point to the end of the prefix that we want to keep.
(apply fun args)
(unless (< end (point))
@ -616,7 +616,7 @@ completions list."
(completion-preview--inhibit-update)
(completion-at-point))
;; Otherwise, insert the common prefix and update the preview.
(insert ins)
(insert-and-inherit ins)
(let ((suf (nth cur all))
(pos (point)))
(if (or (string-empty-p suf) (null suf))

View file

@ -432,4 +432,17 @@ instead."
(should-not exit-fn-called)
(should-not exit-fn-args))))
(ert-deftest completion-preview-insert-inherits-text-properties ()
"Test that `completion-preview-insert' inherits text properties."
(with-temp-buffer
(setq-local completion-at-point-functions
(list (completion-preview-tests--capf '("foobar" "foobaz"))))
(insert (propertize "foo" 'prop 'val))
(let ((this-command 'self-insert-command))
(completion-preview--post-command))
(completion-preview-tests--check-preview "bar" 'completion-preview-common)
(completion-preview-insert)
(should (string= (buffer-string) "foobar"))
(should (eq (get-text-property 6 'prop) 'val))))
;;; completion-preview-tests.el ends here