diff options
| -rw-r--r-- | lisp/icomplete.el | 58 |
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. |
| 745 | Suitable for `completion-in-region-mode-hook'" | 746 | Suitable 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 | ||