branch: master commit b3cd0d5ccbb98eb06c5b6638d9e08e59b2189b99 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
ivy.el (ivy-mode): Set completing-read-function * ivy.el (ivy-completion-beg): Rename from `counsel-completion-beg'. (ivy-completion-end): Rename from `counsel-completion-end'. (ivy-completion-in-region-action): Rename from `counsel--el-action'. (ivy-completion-in-region): New defun. (ivy-mode): Set `completing-read-function' to 'ivy-completion-in-region. * counsel.el: Update due to renames. Fixes #331 --- counsel.el | 84 +++++++++++++++++++++++------------------------------------- ivy.el | 43 +++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 54 deletions(-) diff --git a/counsel.el b/counsel.el index 69b43a7..227ad7f 100644 --- a/counsel.el +++ b/counsel.el @@ -35,12 +35,6 @@ (require 'swiper) (require 'etags) -(defvar counsel-completion-beg nil - "Completion bounds start.") - -(defvar counsel-completion-end nil - "Completion bounds end.") - ;;;###autoload (defun counsel-el () "Elisp completion at point." @@ -59,12 +53,12 @@ symbol-names) (if bnd (progn - (setq counsel-completion-beg + (setq ivy-completion-beg (move-marker (make-marker) (car bnd))) - (setq counsel-completion-end + (setq ivy-completion-end (move-marker (make-marker) (cdr bnd)))) - (setq counsel-completion-beg nil) - (setq counsel-completion-end nil)) + (setq ivy-completion-beg nil) + (setq ivy-completion-end nil)) (if (string= str "") (mapatoms (lambda (x) @@ -80,7 +74,7 @@ (ivy-read "Symbol name: " symbol-names :predicate (and funp #'functionp) :initial-input str - :action #'counsel--el-action))) + :action #'ivy-completion-in-region-action))) (declare-function slime-symbol-start-pos "ext:slime") (declare-function slime-symbol-end-pos "ext:slime") @@ -90,27 +84,13 @@ (defun counsel-cl () "Common Lisp completion at point." (interactive) - (setq counsel-completion-beg (slime-symbol-start-pos)) - (setq counsel-completion-end (slime-symbol-end-pos)) + (setq ivy-completion-beg (slime-symbol-start-pos)) + (setq ivy-completion-end (slime-symbol-end-pos)) (ivy-read "Symbol name: " (car (slime-contextual-completions - counsel-completion-beg - counsel-completion-end)) - :action #'counsel--el-action)) - -(defun counsel--el-action (symbol) - "Insert SYMBOL, erasing the previous one." - (when (stringp symbol) - (with-ivy-window - (when counsel-completion-beg - (delete-region - counsel-completion-beg - counsel-completion-end)) - (setq counsel-completion-beg - (move-marker (make-marker) (point))) - (insert symbol) - (setq counsel-completion-end - (move-marker (make-marker) (point)))))) + ivy-completion-beg + ivy-completion-end)) + :action #'ivy-completion-in-region-action)) (declare-function deferred:sync! "ext:deferred") (declare-function jedi:complete-request "ext:jedi-core") @@ -122,10 +102,10 @@ (let ((bnd (bounds-of-thing-at-point 'symbol))) (if bnd (progn - (setq counsel-completion-beg (car bnd)) - (setq counsel-completion-end (cdr bnd))) - (setq counsel-completion-beg nil) - (setq counsel-completion-end nil))) + (setq ivy-completion-beg (car bnd)) + (setq ivy-completion-end (cdr bnd))) + (setq ivy-completion-beg nil) + (setq ivy-completion-end nil))) (deferred:sync! (jedi:complete-request)) (ivy-read "Symbol name: " (jedi:ac-direct-matches) @@ -135,18 +115,18 @@ "Insert SYMBOL, erasing the previous one." (when (stringp symbol) (with-ivy-window - (when counsel-completion-beg + (when ivy-completion-beg (delete-region - counsel-completion-beg - counsel-completion-end)) - (setq counsel-completion-beg + ivy-completion-beg + ivy-completion-end)) + (setq ivy-completion-beg (move-marker (make-marker) (point))) (insert symbol) - (setq counsel-completion-end + (setq ivy-completion-end (move-marker (make-marker) (point))) (when (equal (get-text-property 0 'symbol symbol) "f") (insert "()") - (setq counsel-completion-end + (setq ivy-completion-end (move-marker (make-marker) (point))) (backward-char 1))))) @@ -304,8 +284,8 @@ "Insert a Unicode character at point." (interactive) (let ((minibuffer-allow-text-properties t)) - (setq counsel-completion-beg (point)) - (setq counsel-completion-end (point)) + (setq ivy-completion-beg (point)) + (setq ivy-completion-end (point)) (ivy-read "Unicode name: " (mapcar (lambda (x) (propertize @@ -314,10 +294,10 @@ (ucs-names)) :action (lambda (char) (with-ivy-window - (delete-region counsel-completion-beg counsel-completion-end) - (setq counsel-completion-beg (point)) + (delete-region ivy-completion-beg ivy-completion-end) + (setq ivy-completion-beg (point)) (insert-char (get-text-property 0 'result char)) - (setq counsel-completion-end (point)))) + (setq ivy-completion-end (point)))) :history 'counsel-unicode-char-history))) (declare-function cider-sync-request:complete "ext:cider-client") @@ -1273,13 +1253,13 @@ INITIAL-INPUT can be given as the initial minibuffer input." (interactive) (if (eq last-command 'yank) (progn - (setq counsel-completion-end (point)) - (setq counsel-completion-beg + (setq ivy-completion-end (point)) + (setq ivy-completion-beg (save-excursion (search-backward (car kill-ring)) (point)))) - (setq counsel-completion-beg (point)) - (setq counsel-completion-end (point))) + (setq ivy-completion-beg (point)) + (setq ivy-completion-end (point))) (let ((candidates (cl-remove-if (lambda (s) (or (< (length s) 3) @@ -1306,10 +1286,10 @@ INITIAL-INPUT can be given as the initial minibuffer input." (defun counsel-yank-pop-action (s) "Insert S into the buffer, overwriting the previous yank." (with-ivy-window - (delete-region counsel-completion-beg - counsel-completion-end) + (delete-region ivy-completion-beg + ivy-completion-end) (insert (substring-no-properties s)) - (setq counsel-completion-end (point)))) + (setq ivy-completion-end (point)))) (defvar imenu-auto-rescan) (declare-function imenu--subalist-p "imenu") diff --git a/ivy.el b/ivy.el index 704a71c..feff8d9 100644 --- a/ivy.el +++ b/ivy.el @@ -1356,6 +1356,42 @@ INHERIT-INPUT-METHOD is currently ignored." (cdr sort) t))))) +(defvar ivy-completion-beg nil + "Completion bounds start.") + +(defvar ivy-completion-end nil + "Completion bounds end.") + +(defun ivy-completion-in-region-action (str) + "Insert STR, erasing the previous one. +The previous string is between `ivy-completion-beg' and `ivy-completion-end'." + (when (stringp str) + (with-ivy-window + (when ivy-completion-beg + (delete-region + ivy-completion-beg + ivy-completion-end)) + (setq ivy-completion-beg + (move-marker (make-marker) (point))) + (insert str) + (setq ivy-completion-end + (move-marker (make-marker) (point)))))) + +(defun ivy-completion-in-region (start end collection &optional predicate) + "An Ivy function suitable for `completion-in-region-function'." + (let* ((str (buffer-substring-no-properties start end)) + (comps (all-completions str collection predicate))) + (if (null comps) + (message "No matches") + (setq ivy-completion-beg start) + (setq ivy-completion-end end) + (and + (ivy-read (format "(%s): " str) comps + :predicate predicate + :action #'ivy-completion-in-region-action + :require-match t) + t)))) + ;;;###autoload (define-minor-mode ivy-mode "Toggle Ivy mode on or off. @@ -1373,8 +1409,11 @@ Minibuffer bindings: :keymap ivy-mode-map :lighter " ivy" (if ivy-mode - (setq completing-read-function 'ivy-completing-read) - (setq completing-read-function 'completing-read-default))) + (progn + (setq completing-read-function 'ivy-completing-read) + (setq completion-in-region-function 'ivy-completion-in-region)) + (setq completing-read-function 'completing-read-default) + (setq completion-in-region-function 'completion--in-region))) (defun ivy--preselect-index (preselect candidates) "Return the index of PRESELECT in CANDIDATES."