summaryrefslogtreecommitdiff
path: root/lisp/icomplete.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2023-02-27 20:32:53 +0200
committerJuri Linkov <juri@linkov.net>2023-02-27 20:32:53 +0200
commita7a984c0ebebb891e2052d8416544f0bd7002007 (patch)
treebf1b714951bf92ad586bff15436052e00d1fb60f /lisp/icomplete.el
parent1767d18c91a3c823d6ab6d69b2666fc5bc2f7d22 (diff)
downloademacs-a7a984c0ebebb891e2052d8416544f0bd7002007.tar.gz
* lisp/icomplete.el: Fix in-buffer completion.
(icomplete-force-complete-and-exit, icomplete-force-complete): Use 'icomplete--field-beg/end' when not in the minibuffer to not erase the current buffer. Also disable 'completion-in-region-mode' instead of calling 'exit-minibuffer' (bug#45764, bug#51575, bug#61479).
Diffstat (limited to 'lisp/icomplete.el')
-rw-r--r--lisp/icomplete.el20
1 files changed, 17 insertions, 3 deletions
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index f7a91599f3b..fd47d82920f 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -215,15 +215,29 @@ the default otherwise."
;; calculated, This causes the first cached completion to
;; be taken (i.e. the one that the user sees highlighted)
completion-all-sorted-completions)
- (minibuffer-force-complete-and-exit)
+ (if (window-minibuffer-p)
+ (minibuffer-force-complete-and-exit)
+ (minibuffer-force-complete (icomplete--field-beg)
+ (icomplete--field-end)
+ 'dont-cycle)
+ (completion-in-region-mode -1))
;; Otherwise take the faster route...
- (minibuffer-complete-and-exit)))
+ (if (window-minibuffer-p)
+ (minibuffer-complete-and-exit)
+ (completion-complete-and-exit
+ (icomplete--field-beg)
+ (icomplete--field-end)
+ (lambda () (completion-in-region-mode -1))))))
(defun icomplete-force-complete ()
"Complete the icomplete minibuffer."
(interactive)
;; We're not at all interested in cycling here (bug#34077).
- (minibuffer-force-complete nil nil 'dont-cycle))
+ (if (window-minibuffer-p)
+ (minibuffer-force-complete nil nil 'dont-cycle)
+ (minibuffer-force-complete (icomplete--field-beg)
+ (icomplete--field-end)
+ 'dont-cycle)))
;; Apropos `icomplete-scroll', we implement "scrolling icomplete"
;; within classic icomplete, which is "rotating", by contrast.