diff options
author | Juri Linkov <juri@linkov.net> | 2023-02-27 20:32:53 +0200 |
---|---|---|
committer | Juri Linkov <juri@linkov.net> | 2023-03-01 19:52:35 +0200 |
commit | ef72e99e867e76135644de6ba29c8d423c5a00ae (patch) | |
tree | fd14c3de5f64521a3fcd389672f3ec34007b0dd9 | |
parent | 07f3236133b01cb65806eb1a6bf2ebaecbdd2d81 (diff) | |
download | emacs-ef72e99e867e76135644de6ba29c8d423c5a00ae.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).
Backport:
(cherry picked from commit a7a984c0ebebb891e2052d8416544f0bd7002007)
-rw-r--r-- | lisp/icomplete.el | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 014f38b2024..fd6a09e8702 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. |