aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/icomplete.el58
1 files changed, 31 insertions, 27 deletions
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index cb83665cf20..0e1b902cc75 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -657,19 +657,18 @@ If it's on, just add the vertical display."
657(define-minor-mode icomplete-in-buffer-mode 657(define-minor-mode icomplete-in-buffer-mode
658 "If non-nil, use Icomplete for `completion-in-region'." 658 "If non-nil, use Icomplete for `completion-in-region'."
659 :global t :group 'icomplete 659 :global t :group 'icomplete
660 (remove-hook 'completion-in-region-mode-hook #'icomplete--in-region-setup) 660 (remove-hook 'completion-in-region-mode-hook #'icomplete--in-buffer-setup)
661 (remove-function completion-in-region-function #'icomplete--in-region) 661 (remove-function completion-in-region-function #'icomplete--in-buffer)
662 (when icomplete-in-buffer-mode 662 (when icomplete-in-buffer-mode
663 (add-function :override completion-in-region-function #'icomplete--in-region) 663 (add-function :override completion-in-region-function #'icomplete--in-buffer)
664 (add-hook 'completion-in-region-mode-hook #'icomplete--in-region-setup))) 664 (add-hook 'completion-in-region-mode-hook #'icomplete--in-buffer-setup)))
665 665
666(defun icomplete--in-region (start end collection &optional predicate) 666(defun icomplete--in-buffer (start end collection &optional predicate)
667 "An Icomplete overrride for `completion-in-region-function'." 667 "An Icomplete overrride for `completion-in-region-function'."
668 (let ((minibuffer-completion-table collection) 668 (let ((minibuffer-completion-table collection)
669 (minibuffer-completion-predicate predicate) 669 (minibuffer-completion-predicate predicate)
670 (completion-in-region-mode-map 670 (completion-in-region-mode-map
671 (let ((map (make-sparse-keymap))) 671 (let ((map (make-sparse-keymap)))
672 (define-key map (kbd "C-M-i") 'icomplete-in-region-complete)
673 (define-key map (kbd "RET") 'icomplete-in-region-complete) 672 (define-key map (kbd "RET") 'icomplete-in-region-complete)
674 (define-key map (kbd "cm") 'icomplete-in-region-complete) 673 (define-key map (kbd "cm") 'icomplete-in-region-complete)
675 (define-key map (kbd "C-s") 'icomplete-forward-completions) 674 (define-key map (kbd "C-s") 'icomplete-forward-completions)
@@ -693,6 +692,8 @@ If it's on, just add the vertical display."
693 completion-all-sorted-completions nil) 692 completion-all-sorted-completions nil)
694 (completion-in-region-mode 1)))) 693 (completion-in-region-mode 1))))
695 694
695(defvar icomplete--in-buffer-exit-message nil)
696
696(defun icomplete-in-region-complete () 697(defun icomplete-in-region-complete ()
697 "Insert currently selected completion into the buffer." 698 "Insert currently selected completion into the buffer."
698 (interactive) 699 (interactive)
@@ -740,36 +741,39 @@ Alist of (VAR . SAVED-VALUE")
740 (cl-loop for (sym . value) in icomplete--saved-vars 741 (cl-loop for (sym . value) in icomplete--saved-vars
741 do (set sym value))) 742 do (set sym value)))
742 743
743(defun icomplete--in-region-setup () 744(defun icomplete--in-buffer-setup ()
744 "Setup or teardown Icomplete-specific stuff. 745 "Setup or teardown Icomplete-specific stuff.
745Suitable for `completion-in-region-mode-hook'" 746Suitable for `completion-in-region-mode-hook'"
746 (cond ((and completion-in-region-mode icomplete-in-buffer-mode) 747 (cond ((and completion-in-region-mode icomplete-in-buffer-mode)
747 (icomplete--setup-vars) 748 (icomplete--setup-vars)
748 (add-hook 'post-command-hook #'icomplete--in-region-update nil t)) 749 (add-hook 'post-command-hook #'icomplete--in-buffer-update nil t))
749 (t 750 (t
750 (icomplete--restore-vars) 751 (icomplete--restore-vars)
751 (remove-hook 'post-command-hook #'icomplete--in-region-update t)))) 752 (remove-hook 'post-command-hook #'icomplete--in-buffer-update t)
753 (message nil))))
752 754
753(defun icomplete--in-region-update () 755(defun icomplete--in-buffer-update ()
754 "Post command hook while in Icomplete's `completion-in-region-mode'." 756 "Post command hook while in Icomplete's `completion-in-region-mode'."
755 ;; Use this to debug: 757 ;; Use this to debug:
756 ;; (condition-case-unless-debug err 758 (condition-case err
757 ;; ... 759 (when completion-in-region-mode
758 ;; ;; Let the debugger run 760 (let* ((str (icomplete--field-string))
759 ;; ((debug error) (signal (car err) (cdr err)))) 761 (text
760 (let* ((str (icomplete--field-string)) 762 (icomplete-completions
761 (text 763 str
762 (icomplete-completions 764 (icomplete--completion-table)
763 str 765 (icomplete--completion-predicate)
764 (icomplete--completion-table) 766 nil))
765 (icomplete--completion-predicate) 767 (summary (icomplete--matches-summary))
766 nil)) 768 (prompt (concat summary (format "Complete `%s' in region:" str)))
767 (summary (icomplete--matches-summary)) 769 (message-log-max nil))
768 (prompt (concat summary (format "Complete `%s' in region:" str))) 770 (message "%s"
769 (message-log-max nil)) 771 (string-trim (concat
770 (message (string-trim (concat 772 (propertize prompt 'face 'minibuffer-prompt)
771 (propertize prompt 'face 'minibuffer-prompt) 773 text)))))
772 text))))) 774 ;; Let the debugger run
775 ((debug error) (signal (car err) (cdr err))))
776 )
773 777
774 778
775 779