[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
minibuffer.el completion bug with markers
From: |
Jorgen Schaefer |
Subject: |
minibuffer.el completion bug with markers |
Date: |
Sat, 21 Sep 2013 21:34:21 +0200 |
Hello!
The recent changes to minibuffer.el broke completion functions when
they use markers to define where the completed text starts and ends.
Reproduction:
(with-temp-buffer
(cl-flet ((test/completion-at-point ()
(list (copy-marker (point-min))
(copy-marker (point))
'test/completion-table))
(test/completion-table (string pred action)
(if (eq action 'lambda)
nil
"test: ")))
(let ((completion-at-point-functions '(test/completion-at-point)))
(insert "TEST")
(completion-at-point)
(assert (equal (buffer-string)
"test: ")))))
This errors out in `completion--replace' because the call to
`delete-region' calculates the end point to delete based on (- end
beg), where end can have moved at this point due to the insertion of
text using `insert-and-inherit'. Simple fix:
--- lisp/minibuffer.el 2013-09-16 19:09:24 +0000
+++ lisp/minibuffer.el 2013-09-21 19:26:47 +0000
@@ -873,8 +873,9 @@
(setq end (- end suffix-len))
(setq newtext (substring newtext 0 (- suffix-len))))
(goto-char beg)
- (insert-and-inherit newtext)
- (delete-region (point) (+ (point) (- end beg)))
+ (let ((length (- end beg)))
+ (insert-and-inherit newtext)
+ (delete-region (point) (+ (point) length)))
(forward-char suffix-len)))
(defcustom completion-cycle-threshold nil
Regards,
Jorgen
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- minibuffer.el completion bug with markers,
Jorgen Schaefer <=