update packages

This commit is contained in:
2022-01-03 21:18:11 +01:00
parent a3155953d6
commit 4c740d6f8d
89 changed files with 5691 additions and 1653 deletions

View File

@@ -1,6 +1,6 @@
;;; colir.el --- Color blending library -*- lexical-binding: t -*-
;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
;; Author: Oleh Krehel <ohwoeowho@gmail.com>

View File

@@ -1,6 +1,6 @@
;;; ivy-faces.el --- Faces for Ivy -*- lexical-binding: t -*-
;; Copyright (C) 2020 Free Software Foundation, Inc.
;; Copyright (C) 2020-2021 Free Software Foundation, Inc.
;; Author: Oleh Krehel <ohwoeowho@gmail.com>
;; Keywords: convenience

View File

@@ -1,6 +1,6 @@
;;; ivy-overlay.el --- Overlay display functions for Ivy -*- lexical-binding: t -*-
;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
;; Author: Oleh Krehel <ohwoeowho@gmail.com>
;; Keywords: convenience

View File

@@ -1,6 +1,6 @@
(define-package "ivy" "20210105.2002" "Incremental Vertical completYon"
(define-package "ivy" "20211231.1730" "Incremental Vertical completYon"
'((emacs "24.5"))
:commit "71c59aecf669142ebe264fac8ff7b440c0c71712" :authors
:commit "c97ea72285f2428ed61b519269274d27f2b695f9" :authors
'(("Oleh Krehel" . "ohwoeowho@gmail.com"))
:maintainer
'("Oleh Krehel" . "ohwoeowho@gmail.com")

View File

@@ -1,10 +1,10 @@
;;; ivy.el --- Incremental Vertical completYon -*- lexical-binding: t -*-
;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
;; Author: Oleh Krehel <ohwoeowho@gmail.com>
;; URL: https://github.com/abo-abo/swiper
;; Version: 0.13.0
;; Version: 0.13.4
;; Package-Requires: ((emacs "24.5"))
;; Keywords: matching
@@ -99,7 +99,8 @@ a behavior similar to `swiper'."
The usual reason for `ivy-backward-delete-char' to fail is when
there is no text left to delete, i.e., when it is called at the
beginning of the minibuffer.
The default setting provides a quick exit from completion."
The default setting provides a quick exit from completion.
Another common option is `ignore', which does nothing."
:type '(choice
(const :tag "Exit completion" abort-recursive-edit)
(const :tag "Do nothing" ignore)
@@ -695,29 +696,33 @@ candidate, not the prompt."
(if (ivy--prompt-selected-p)
(ivy-immediate-done)
(setq ivy-current-prefix-arg current-prefix-arg)
(delete-minibuffer-contents)
(cond ((and (= ivy--length 0)
(eq this-command 'ivy-dispatching-done))
(ivy--done ivy-text))
((or (> ivy--length 0)
;; the action from `ivy-dispatching-done' may not need a
;; candidate at all
(eq this-command 'ivy-dispatching-done))
(ivy--done (ivy-state-current ivy-last)))
((and (memq (ivy-state-collection ivy-last)
'(read-file-name-internal internal-complete-buffer))
(eq confirm-nonexistent-file-or-buffer t)
(not (string= " (confirm)" ivy--prompt-extra)))
(setq ivy--prompt-extra " (confirm)")
(insert ivy-text)
(ivy--exhibit))
((memq (ivy-state-require-match ivy-last)
'(nil confirm confirm-after-completion))
(ivy--done ivy-text))
(t
(setq ivy--prompt-extra " (match required)")
(insert ivy-text)
(ivy--exhibit)))))
(let ((require-match (ivy-state-require-match ivy-last))
(input (ivy--input)))
(delete-minibuffer-contents)
(cond ((and (= ivy--length 0)
(eq this-command 'ivy-dispatching-done))
(ivy--done ivy-text))
((or (> ivy--length 0)
;; the action from `ivy-dispatching-done' may not need a
;; candidate at all
(eq this-command 'ivy-dispatching-done))
(ivy--done (ivy-state-current ivy-last)))
((string= " (confirm)" ivy--prompt-extra)
(ivy--done ivy-text))
((or (and (memq (ivy-state-collection ivy-last)
'(read-file-name-internal internal-complete-buffer))
(eq confirm-nonexistent-file-or-buffer t))
(and (functionp require-match)
(setq require-match (funcall require-match))))
(setq ivy--prompt-extra " (confirm)")
(insert input)
(ivy--exhibit))
((memq require-match '(nil confirm confirm-after-completion))
(ivy--done ivy-text))
(t
(setq ivy--prompt-extra " (match required)")
(insert ivy-text)
(ivy--exhibit))))))
(defvar ivy-mouse-1-tooltip
"Exit the minibuffer with the selected candidate."
@@ -783,10 +788,11 @@ key (a string), cmd and doc (a string)."
"\n")))
(defun ivy-read-action-format-columns (actions)
"Create a docstring from ACTIONS, using several columns if needed to preserve `ivy-height'.
"Create a potentially multi-column docstring from ACTIONS.
Several columns are used as needed to preserve `ivy-height'.
ACTIONS is a list. Each list item is a list of 3 items: key (a
string), cmd and doc (a string)."
ACTIONS is a list with elements of the form (KEY COMMAND DOC),
where KEY and DOC are strings."
(let ((length (length actions))
(i 0)
(max-rows (- ivy-height 1))
@@ -854,7 +860,8 @@ selection, non-nil otherwise."
(cdr actions)))
(not (string= key (car (nth action-idx (cdr actions))))))
(setq key (concat key (key-description (vector (read-key hint))))))
(ivy-shrink-after-dispatching)
;; Ignore resize errors with minibuffer-only frames (#2726).
(ignore-errors (ivy-shrink-after-dispatching))
(cond ((member key '("ESC" "C-g" "M-o"))
nil)
((null action-idx)
@@ -932,10 +939,10 @@ Is is a cons cell, related to `tramp-get-completion-function'."
:type '(alist :key-type symbol :value-type function))
(defun ivy--completing-fname-p ()
(eq 'file (cdr (assoc
'category
(ignore-errors
(funcall (ivy-state-collection ivy-last) ivy-text nil 'metadata))))))
(let ((meta (ignore-errors
(funcall (ivy-state-collection ivy-last) ivy-text nil 'metadata))))
(and (consp meta)
(eq 'file (cdr (assoc 'category meta))))))
(defun ivy-alt-done (&optional arg)
"Exit the minibuffer with the selected candidate.
@@ -1117,34 +1124,45 @@ If the text hasn't changed as a result, forward to `ivy-alt-done'."
(defun ivy-partial ()
"Complete the minibuffer text as much as possible."
(interactive)
(let* ((parts (or (ivy--split-spaces ivy-text) (list "")))
(tail (last parts))
(postfix (car tail))
(case-fold-search (ivy--case-fold-p ivy-text))
(completion-ignore-case case-fold-search)
(new (try-completion (string-remove-prefix "^" postfix)
(if (ivy-state-dynamic-collection ivy-last)
ivy--all-candidates
(if (ivy-state-dynamic-collection ivy-last)
(let* ((bnd
(ignore-errors
(funcall
(ivy-state-collection ivy-last)
ivy-text nil (cons 'boundaries (buffer-substring (point) (line-end-position))))))
(beg (+ (minibuffer-prompt-end)
(if bnd (cadr bnd) 0))))
(delete-region beg (point-max))
(insert
(ivy-state-current ivy-last))
t)
(let* ((parts (or (ivy--split-spaces ivy-text) (list "")))
(tail (last parts))
(postfix (car tail))
(case-fold-search (ivy--case-fold-p ivy-text))
(completion-ignore-case case-fold-search)
(new (try-completion (string-remove-prefix "^" postfix)
(mapcar (lambda (str)
(let ((i (string-match-p postfix str)))
(and i (substring str i))))
ivy--old-cands)))))
(cond ((eq new t) nil)
((string= new ivy-text) nil)
((string= (car tail) (car (ivy--split-spaces new))) nil)
(new
(delete-region (minibuffer-prompt-end) (point-max))
(setcar tail
(if (= (string-to-char postfix) ?^)
(concat "^" new)
new))
(ivy-set-text
(concat
(mapconcat #'identity parts " ")
(and ivy-tab-space (not (= (length ivy--old-cands) 1)) " ")))
(insert ivy-text)
(ivy--partial-cd-for-single-directory)
t))))
ivy--old-cands))))
(cond
((eq new t) nil)
((string= new ivy-text) nil)
((string= (car tail) (car (ivy--split-spaces new))) nil)
(new
(delete-region (minibuffer-prompt-end) (point-max))
(setcar tail
(if (= (string-to-char postfix) ?^)
(concat "^" new)
new))
(ivy-set-text
(concat
(mapconcat #'identity parts " ")
(and ivy-tab-space (not (= (length ivy--old-cands) 1)) " ")))
(insert ivy-text)
(ivy--partial-cd-for-single-directory)
t)))))
(defvar ivy-completion-beg nil
"Completion bounds start.")
@@ -1658,7 +1676,9 @@ minibuffer."
"Forward to `kill-line'."
(interactive)
(if (eolp)
(kill-region (minibuffer-prompt-end) (point))
(progn
(kill-region (minibuffer-prompt-end) (point))
(setq ivy--old-text (current-kill 0 t)))
(kill-line)))
(defun ivy-kill-whole-line ()
@@ -1703,6 +1723,8 @@ This string is inserted into the minibuffer."
(const :tag "Default" ivy-format-function-default)
(const :tag "Arrow prefix" ivy-format-function-arrow)
(const :tag "Full line" ivy-format-function-line)
(const :tag "Arrow prefix + full line"
ivy-format-function-arrow-line)
(function :tag "Custom function"))))
(defun ivy-sort-file-function-default (x y)
@@ -1769,7 +1791,8 @@ specified for the current collection in
`ivy-sort-functions-alist'."
(interactive)
(let ((cell (or (assq (ivy-state-collection ivy-last) ivy-sort-functions-alist)
(assq (ivy-state-caller ivy-last) ivy-sort-functions-alist))))
(assq (ivy-state-caller ivy-last) ivy-sort-functions-alist)
(assq t ivy-sort-functions-alist))))
(when (consp (cdr cell))
(setcdr cell (nconc (cddr cell) (list (cadr cell))))
(ivy--reset-state ivy-last))))
@@ -1892,6 +1915,7 @@ The child caller inherits and can override the settings of the parent.")
unwind-fn
index-fn
sort-fn
sort-matches-fn
format-fn
display-fn
display-transformer-fn
@@ -1919,6 +1943,8 @@ The child caller inherits and can override the settings of the parent.")
(ivy--alist-set 'ivy-index-functions-alist caller index-fn))
(when sort-fn
(ivy--alist-set 'ivy-sort-functions-alist caller sort-fn))
(when sort-matches-fn
(ivy--alist-set 'ivy-sort-matches-functions-alist caller sort-matches-fn))
(when format-fn
(ivy--alist-set 'ivy-format-functions-alist caller format-fn))
(when display-fn
@@ -2032,7 +2058,7 @@ PREDICATE is applied to filter out the COLLECTION immediately.
This argument is for compatibility with `completing-read'.
When REQUIRE-MATCH is non-nil, only members of COLLECTION can be
selected.
selected. In can also be a lambda.
If INITIAL-INPUT is non-nil, then insert that input in the
minibuffer initially.
@@ -2212,10 +2238,21 @@ customizations apply to the current completion session."
(defvar Info-complete-menu-buffer)
(defun ivy--alist-to-cands (alist)
"Transform ALIST to a list of strings."
(let ((i -1))
(mapcar (lambda (x)
(propertize x 'idx (cl-incf i)))
(all-completions "" alist))))
(defvar ivy--minibuffer-metadata nil
"Store `completion-metadata'.")
(defun ivy--reset-state (state)
"Reset the ivy to STATE.
This is useful for recursive `ivy-read'."
(setq ivy-marked-candidates nil)
(setq ivy--minibuffer-metadata nil)
(unless (equal (selected-frame) (ivy-state-frame state))
(select-window (active-minibuffer-window)))
(let* ((prompt (or (ivy-state-prompt state) ""))
@@ -2324,6 +2361,12 @@ This is useful for recursive `ivy-read'."
counsel-switch-buffer)))
predicate)))
(dynamic-collection
(setq ivy--minibuffer-metadata
(ignore-errors
(completion-metadata
""
(ivy-state-collection ivy-last)
(ivy-state-predicate ivy-last))))
(setq coll (if (and (eq this-command 'ivy-resume) (not (buffer-modified-p)))
ivy--all-candidates
(ivy--dynamic-collection-cands (or initial-input "")))))
@@ -2333,10 +2376,7 @@ This is useful for recursive `ivy-read'."
(setq collection (sort (copy-sequence collection) sort-fn))
(setq sort nil))
(setf (ivy-state-collection ivy-last) collection)
(setq coll (let ((i -1))
(mapcar (lambda (x)
(propertize x 'idx (cl-incf i)))
(all-completions "" collection)))))
(setq coll (ivy--alist-to-cands collection)))
((or (functionp collection)
(byte-code-function-p collection)
(vectorp collection)
@@ -2503,6 +2543,12 @@ behavior."
(declare-function mc/all-fake-cursors "ext:multiple-cursors-core")
;; Kludge: Try to retain original minibuffer completion data.
(defvar ivy--minibuffer-table)
(defvar ivy--minibuffer-pred)
(defvar ivy--minibuffer-try nil
"Store original `try-completion' result for sole completions.")
(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'."
@@ -2518,7 +2564,15 @@ The previous string is between `ivy-completion-beg' and `ivy-completion-end'."
(delete-region beg end))
(setq ivy-completion-beg (point))
(insert (substring-no-properties str))
(completion--done str 'exact)
(let ((minibuffer-completion-table (if (boundp 'ivy--minibuffer-table)
ivy--minibuffer-table
(ivy-state-collection ivy-last)))
(minibuffer-completion-predicate (if (boundp 'ivy--minibuffer-pred)
ivy--minibuffer-pred
(ivy-state-predicate ivy-last))))
(completion--done str (cond ((eq ivy--minibuffer-try t) 'finished)
((eq ivy-exit 'done) 'unknown)
('exact))))
(setq ivy-completion-end (point))
(save-excursion
(dolist (cursor fake-cursors)
@@ -2558,8 +2612,12 @@ See `completion-in-region' for further information."
(let* ((enable-recursive-minibuffers t)
(str (buffer-substring-no-properties start end))
(completion-ignore-case (ivy--case-fold-p str))
(comps
(completion-all-completions str collection predicate (- end start))))
(md (completion-metadata str collection predicate))
(reg (- end start))
(comps (completion-all-completions str collection predicate reg md))
(try (completion-try-completion str collection predicate reg md))
(ivy--minibuffer-table collection)
(ivy--minibuffer-pred predicate))
(cond ((null comps)
(message "No matches"))
((progn
@@ -2586,8 +2644,9 @@ See `completion-in-region' for further information."
(progn
(unless (minibuffer-window-active-p (selected-window))
(setf (ivy-state-window ivy-last) (selected-window)))
(ivy-completion-in-region-action
(substring-no-properties (car comps))))
(let ((ivy--minibuffer-try try))
(ivy-completion-in-region-action
(substring-no-properties (car comps)))))
(dolist (s comps)
;; Remove face `completions-first-difference'.
(ivy--remove-props s 'face))
@@ -2958,8 +3017,11 @@ tries to ensure that it does not change depending on the number of candidates."
(defun ivy--minibuffer-setup ()
"Setup ivy completion in the minibuffer."
(setq-local mwheel-scroll-up-function 'ivy-next-line)
(setq-local mwheel-scroll-down-function 'ivy-previous-line)
;; Guard for --without-x builds where `mwheel' is not preloaded.
(when (boundp 'mwheel-scroll-up-function)
(setq-local mwheel-scroll-up-function 'ivy-next-line))
(when (boundp 'mwheel-scroll-down-function)
(setq-local mwheel-scroll-down-function 'ivy-previous-line))
(setq-local completion-show-inline-help nil)
(setq-local line-spacing nil)
(setq-local minibuffer-default-add-function
@@ -3040,6 +3102,26 @@ parts beyond their respective faces `ivy-confirm-face' and
(funcall fn (ivy-state-prompt ivy-last))))
ivy--prompt)))
(defun ivy--break-lines (str width)
"Break each line in STR with newlines to fit into WIDTH columns."
(if (<= width 0)
str
(let (lines)
(dolist (line (split-string str "\n"))
(while (and line (> (string-width line) width))
(let ((prefix "") (extra 0))
(while (string-empty-p prefix)
;; Grow `width' until it fits at least one char from `line'.
(setq prefix (truncate-string-to-width line (+ width extra)))
(setq extra (1+ extra)))
;; Avoid introducing spurious newline if `prefix' and `line' are
;; equal, i.e., if `line' couldn't be truncated to `width'.
(setq line (and (> (length line) (length prefix))
(substring line (length prefix))))
(push prefix lines)))
(when line (push line lines)))
(string-join (nreverse lines) "\n"))))
(defun ivy--insert-prompt ()
"Update the prompt according to `ivy--prompt'."
(when (setq ivy--prompt (ivy-prompt))
@@ -3080,13 +3162,13 @@ parts beyond their respective faces `ivy-confirm-face' and
(save-excursion
(goto-char (point-min))
(delete-region (point-min) (minibuffer-prompt-end))
(let ((len-n (length n-str))
(len-d (length d-str))
(let ((wid-n (string-width n-str))
(wid-d (string-width d-str))
(ww (window-width)))
(setq n-str
(cond ((> (+ len-n len-d) ww)
(cond ((> (+ wid-n wid-d) ww)
(concat n-str "\n" d-str "\n"))
((> (+ len-n len-d (length ivy-text)) ww)
((> (+ wid-n wid-d (string-width ivy-text)) ww)
(concat n-str d-str "\n"))
(t
(concat n-str d-str)))))
@@ -3094,11 +3176,7 @@ parts beyond their respective faces `ivy-confirm-face' and
(setq n-str (concat (funcall ivy-pre-prompt-function) n-str)))
(when ivy-add-newline-after-prompt
(setq n-str (concat n-str "\n")))
(let ((regex (format "\\([^\n]\\{%d\\}\\)[^\n]" (window-width))))
(while (string-match regex n-str)
(setq n-str (replace-match
(concat (match-string 1 n-str) "\n")
nil t n-str 1))))
(setq n-str (ivy--break-lines n-str (window-width)))
(set-text-properties 0 (length n-str)
`(face minibuffer-prompt ,@std-props)
n-str)
@@ -3284,14 +3362,10 @@ The function was added in Emacs 26.1.")
"~"
home)))))
(defvar ivy--minibuffer-metadata nil)
(defun ivy-update-candidates (cands)
(let ((ivy--minibuffer-metadata
(completion-metadata "" minibuffer-completion-table minibuffer-completion-predicate)))
(ivy--insert-minibuffer
(ivy--format
(setq ivy--all-candidates cands)))))
(ivy--insert-minibuffer
(ivy--format
(setq ivy--all-candidates cands))))
(defun ivy--exhibit ()
"Insert Ivy completions display.
@@ -3306,7 +3380,10 @@ Should be run via minibuffer `post-command-hook'."
t))
(defun ivy--dynamic-collection-cands (input)
(let ((coll (funcall (ivy-state-collection ivy-last) input)))
(let ((coll (condition-case nil
(funcall (ivy-state-collection ivy-last) input)
(error
(funcall (ivy-state-collection ivy-last) input nil nil)))))
(if (listp coll)
(mapcar (lambda (x) (if (consp x) (car x) x)) coll)
coll)))
@@ -3922,7 +3999,8 @@ and SEPARATOR is used to join them."
separator)))
(defun ivy-format-function-default (cands)
"Transform CANDS into a string for minibuffer."
"Transform CANDS into a multiline string for the minibuffer.
Add the face `ivy-current-match' to the selected candidate."
(ivy--format-function-generic
(lambda (str)
(ivy--add-face str 'ivy-current-match))
@@ -3931,7 +4009,9 @@ and SEPARATOR is used to join them."
"\n"))
(defun ivy-format-function-arrow (cands)
"Transform CANDS into a string for minibuffer."
"Transform CANDS into a multiline string for the minibuffer.
Like `ivy-format-function-default', but also prefix the selected
candidate with an arrow \">\"."
(ivy--format-function-generic
(lambda (str)
(concat "> " (ivy--add-face str 'ivy-current-match)))
@@ -3941,9 +4021,13 @@ and SEPARATOR is used to join them."
"\n"))
(defun ivy-format-function-line (cands)
"Transform CANDS into a string for minibuffer.
Note that since Emacs 27, `ivy-current-match' needs to have :extend t attribute.
It has it by default, but the current theme also needs to set it."
"Transform CANDS into a multiline string for the minibuffer.
Like `ivy-format-function-default', but extend highlighting of
the selected candidate to the window edge.
Note that since Emacs 27, `ivy-current-match' needs to have a
non-nil :extend attribute. This is the case by default, but it
also needs to be preserved by the current theme."
(ivy--format-function-generic
(lambda (str)
(ivy--add-face (concat str "\n") 'ivy-current-match))
@@ -3952,6 +4036,18 @@ It has it by default, but the current theme also needs to set it."
cands
""))
(defun ivy-format-function-arrow-line (cands)
"Transform CANDS into a multiline string for the minibuffer.
This combines the \">\" prefix of `ivy-format-function-arrow'
with the extended highlighting of `ivy-format-function-line'."
(ivy--format-function-generic
(lambda (str)
(concat "> " (ivy--add-face (concat str "\n") 'ivy-current-match)))
(lambda (str)
(concat " " str "\n"))
cands
""))
(defun ivy--highlight-ignore-order (str)
"Highlight STR, using the ignore-order method."
(when (consp ivy--old-re)
@@ -3984,12 +4080,10 @@ in this case."
(defun ivy--highlight-default (str)
"Highlight STR, using the default method."
(unless ivy--old-re
(setq ivy--old-re ivy-regex))
(let ((regexps
(if (listp ivy--old-re)
(mapcar #'car (cl-remove-if-not #'cdr ivy--old-re))
(list ivy--old-re)))
(if (listp ivy-regex)
(mapcar #'car (cl-remove-if-not #'cdr ivy-regex))
(list ivy-regex)))
start)
(dolist (re regexps)
(ignore-errors
@@ -4020,7 +4114,7 @@ in this case."
(cl-incf i)))))))
str)
(defun ivy--format-minibuffer-line (str)
(defun ivy--format-minibuffer-line (str annot)
"Format line STR for use in minibuffer."
(let* ((str (ivy-cleanup-string (copy-sequence str)))
(str (if (eq ivy-display-style 'fancy)
@@ -4033,9 +4127,7 @@ in this case."
(concat file (funcall ivy--highlight-function match)))
(funcall ivy--highlight-function str))
str))
(olen (length str))
(annot (or (completion-metadata-get ivy--minibuffer-metadata 'annotation-function)
(plist-get completion-extra-properties :annotation-function))))
(olen (length str)))
(add-text-properties
0 olen
'(mouse-face
@@ -4050,7 +4142,7 @@ in this case."
(when annot
(setq str (concat str (funcall annot str)))
(add-face-text-property
olen (length str) 'ivy-completions-annotations nil str))
olen (length str) 'ivy-completions-annotations t str))
str))
(defun ivy-read-file-transformer (str)
@@ -4082,7 +4174,7 @@ CANDS is a list of candidates that :display-transformer can turn into strings."
(let* ((bnd (ivy--minibuffer-index-bounds
ivy--index ivy--length ivy-height))
(wnd-cands (cl-subseq cands (car bnd) (cadr bnd)))
(case-fold-search (ivy--case-fold-p ivy-text))
(case-fold-search (ivy--case-fold-p (ivy-re-to-str ivy-regex)))
transformer-fn)
(setq ivy--window-index (nth 2 bnd))
(when (setq transformer-fn (ivy-state-display-transformer-fn ivy-last))
@@ -4092,13 +4184,18 @@ CANDS is a list of candidates that :display-transformer can turn into strings."
(ivy--wnd-cands-to-str wnd-cands))))
(defun ivy--wnd-cands-to-str (wnd-cands)
(let ((str (concat "\n"
(funcall (ivy-alist-setting ivy-format-functions-alist)
(condition-case nil
(mapcar
#'ivy--format-minibuffer-line
wnd-cands)
(error wnd-cands))))))
(let* ((metadata (unless (ivy-state-dynamic-collection ivy-last)
(completion-metadata "" minibuffer-completion-table
minibuffer-completion-predicate)))
(annot (or (completion-metadata-get metadata 'annotation-function)
(plist-get completion-extra-properties :annotation-function)))
(str (concat "\n"
(funcall (ivy-alist-setting ivy-format-functions-alist)
(condition-case nil
(mapcar
(lambda (cand) (ivy--format-minibuffer-line cand annot))
wnd-cands)
(error wnd-cands))))))
(put-text-property 0 (length str) 'read-only nil str)
str))
@@ -4428,7 +4525,8 @@ BUFFER may be a string or nil."
(defun ivy--kill-current-candidate-buffer ()
(setf (ivy-state-preselect ivy-last) ivy--index)
(setq ivy--old-re nil)
(setq ivy--all-candidates (ivy--buffer-list "" ivy-use-virtual-buffers nil))
(setq ivy--all-candidates (ivy--buffer-list "" ivy-use-virtual-buffers
(ivy-state-predicate ivy-last)))
(let ((ivy--recompute-index-inhibit t))
(ivy--exhibit)))
@@ -4833,9 +4931,16 @@ You can also delete an element from history with \\[ivy-reverse-i-search-kill]."
(delete-minibuffer-contents)
(if (ivy-state-dynamic-collection ivy-last)
(progn
(setf (ivy-state-dynamic-collection ivy-last) nil)
(setf (ivy-state-collection ivy-last)
(setq ivy--all-candidates ivy--old-cands)))
;; By disabling `ivy-state-dynamic-collection', we lose the ability
;; to clearly differentiate between ternary programmed completion
;; functions and Ivy's unary dynamic collections (short of using
;; `func-arity' or otherwise redesigning things). So we must also
;; update the dynamic binding of `minibuffer-completion-table' to no
;; longer hold a dynamic collection.
(setq minibuffer-completion-table ivy--old-cands)
(setq ivy--all-candidates ivy--old-cands)
(setf (ivy-state-collection ivy-last) ivy--old-cands)
(setf (ivy-state-dynamic-collection ivy-last) nil))
(setq ivy--all-candidates
(ivy--filter ivy-text ivy--all-candidates))))
@@ -5029,7 +5134,10 @@ There is no limit on the number of *ivy-occur* buffers."
"")
ivy-text))))
(with-current-buffer buffer
(funcall occur-fn ivy--old-cands)
(funcall occur-fn
(if (ivy-state-dynamic-collection ivy-last)
(funcall (ivy-state-collection ivy-last) ivy-text)
ivy--old-cands))
(setf (ivy-state-text ivy-last) ivy-text)
(setq ivy-occur-last ivy-last))
(ivy-exit-with-action
@@ -5051,10 +5159,15 @@ updated original buffer."
(let ((caller (ivy-state-caller ivy-occur-last))
(ivy-last ivy-occur-last))
(let ((inhibit-read-only t)
(line (line-number-at-pos)))
(line (line-number-at-pos))
(text (ivy-state-text ivy-last)))
(erase-buffer)
(ivy-set-text text)
(funcall (or (plist-get ivy--occurs-list caller)
#'ivy--occur-default) nil)
#'ivy--occur-default)
(and (ivy-state-dynamic-collection ivy-last)
(funcall (ivy-state-collection ivy-last)
text)))
(goto-char (point-min))
(forward-line (1- line)))
(setq ivy-occur-last ivy-last)))
@@ -5187,11 +5300,16 @@ EVENT gives the mouse position."
(delete cand ivy-marked-candidates)))
(defun ivy--mark (cand)
(let ((marked-cand (concat ivy-mark-prefix cand)))
(let ((marked-cand (copy-sequence (concat ivy-mark-prefix cand))))
;; Primarily for preserving `idx'. FIXME: the mark
;; prefix shouldn't become part of the candidate!
(add-text-properties 0 (length ivy-mark-prefix)
(text-properties-at 0 cand)
marked-cand)
(setcar (member cand ivy--all-candidates)
(setcar (member cand ivy--old-cands) marked-cand))
(setq ivy-marked-candidates
(append ivy-marked-candidates (list marked-cand)))))
(nconc ivy-marked-candidates (list marked-cand)))))
(defun ivy-mark ()
"Mark the selected candidate and move to the next one.

View File

@@ -1,6 +1,6 @@
This is ivy.info, produced by makeinfo version 6.5 from ivy.texi.
This is ivy.info, produced by makeinfo version 6.7 from ivy.texi.
Ivy manual, version 0.13.0
Ivy manual, version 0.13.4
Ivy is an interactive interface for completion in Emacs. Emacs uses
completion mechanism in a variety of contexts: code, menus, commands,
@@ -11,7 +11,7 @@ available choices while previewing in the minibuffer. Selecting the
final candidate is either through simple keyboard character inputs or
through powerful regular expressions.
Copyright (C) 2015-2019 Free Software Foundation, Inc.
Copyright (C) 20152021 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
@@ -19,6 +19,7 @@ through powerful regular expressions.
Foundation; with no Invariant Sections, no Front-Cover Texts, and
no Back-Cover Texts. A copy of the license is included in the
section entitled "GNU Free Documentation License".
INFO-DIR-SECTION Emacs
START-INFO-DIR-ENTRY
* Ivy: (ivy). Using Ivy for completion.
@@ -203,21 +204,22 @@ File: ivy.info, Node: Installing from Emacs Package Manager, Next: Installing
M-x package-install RET counsel RET
Ivy is installed as part of the counsel package, which is available
from two different package archives, GNU ELPA and MELPA. For the latest
stable version, use the GNU ELPA archives. For current hourly builds,
use the MELPA archives.
Ivy is installed alongside the counsel package, which is available
from two different package archives, GNU ELPA and MELPA. For the latest
stable version, use the GNU ELPA archive. For the latest development
snaphshot, use the GNU-devel ELPA archive.
Ivy is split into three packages: ivy, swiper and counsel; by
installing counsel, the other two are brought in as dependencies. If
you are not interested in the extra functionality provided by swiper
and counsel, you can install only ivy.
See the code below for adding MELPA to the list of package archives:
See the code below for adding GNU-devel ELPA to your list of package
archives:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
'("gnu-devel" . "https://elpa.gnu.org/devel/"))
After this do M-x package-refresh-contents RET, followed by
M-x package-install RET counsel RET.
@@ -233,7 +235,7 @@ File: ivy.info, Node: Installing from the Git repository, Prev: Installing fro
Why install from Git?
.....................
• No need to wait for MELPAs hourly builds
• No need to wait for GNU ELPA / MELPA builds
• Easy to revert to previous versions
• Contribute to Ivys development; send patches; pull requests
@@ -457,11 +459,11 @@ extends usability of lists in Emacs.
(should
(equal (ivy-with
'(progn
(ivy-read "Test: " '("can do" "can't, sorry" "other"))
ivy-text)
"c <tab>")
"can"))
'(progn
(ivy-read "Test: " '("can do" "can't, sorry" "other"))
ivy-text)
"c <tab>")
"can"))
C-M-j (ivy-immediate-done)
..............................
@@ -494,6 +496,9 @@ keeps the minibuffer open for applying subsequent actions.
Adding an extra meta key to the normal key chord invokes the special
version of the regular commands that enables applying multiple actions.
Note that these operations are supported only by completion sessions
that use the ivy-read API, rather than the built-in completing-read.
C-M-m (ivy-call)
....................
@@ -560,7 +565,7 @@ File: ivy.info, Node: Key bindings that alter the minibuffer input, Next: Othe
M-p (ivy-previous-history-element)
......................................
Cycles forward through the Ivy command history.
Cycles backwards through the Ivy command history.
M-i (ivy-insert-current)
............................
@@ -647,7 +652,7 @@ jjjj in Hydra.
Toggle calling the action after each candidate change. It modifies
j to jg, k to kg etc.
m (ivy-rotate-preferred-builders)
M (ivy-rotate-preferred-builders)
.....................................
Rotate the current regexp matcher.
@@ -779,7 +784,7 @@ completion:
(setq ivy-re-builders-alist
'((read-file-name-internal . ivy--regex-fuzzy)
(t . ivy--regex-plus)))
(t . ivy--regex-plus)))
Here, read-file-name-internal is a function that is passed as the
second argument to completing-read for file name completion.
@@ -1010,6 +1015,8 @@ File: ivy.info, Node: Defcustoms, Next: Actions, Prev: Faces, Up: Customizat
The default behavior is to quit the completion after DEL a
handy key to invoke after mistakenly triggering a completion.
Another common option is ignore, which does nothing.

File: ivy.info, Node: Actions, Next: Packages, Prev: Defcustoms, Up: Customization
@@ -1149,10 +1156,10 @@ File: ivy.info, Node: Example - define a new command with several actions, Pre
(defun my-command-with-3-actions ()
(interactive)
(ivy-read "test: " '("foo" "bar" "baz")
:action '(1
("o" my-action-1 "action 1")
("j" my-action-2 "action 2")
("k" my-action-3 "action 3"))))
:action '(1
("o" my-action-1 "action 1")
("j" my-action-2 "action 2")
("k" my-action-3 "action 3"))))
The number 1 above is the index of the default action. Each action
has its own string description for easy selection.
@@ -1564,20 +1571,20 @@ argument.
"Forward to `describe-function'."
(interactive)
(ivy-read "Describe function: "
(let (cands)
(mapatoms
(lambda (x)
(when (fboundp x)
(push (symbol-name x) cands))))
cands)
:keymap counsel-describe-map
:preselect (ivy-thing-at-point)
:history 'counsel-describe-symbol-history
:require-match t
:action (lambda (x)
(describe-function
(intern x)))
:caller 'counsel-describe-function))
(let (cands)
(mapatoms
(lambda (x)
(when (fboundp x)
(push (symbol-name x) cands))))
cands)
:keymap counsel-describe-map
:preselect (ivy-thing-at-point)
:history 'counsel-describe-symbol-history
:require-match t
:action (lambda (x)
(describe-function
(intern x)))
:caller 'counsel-describe-function))
Here are the interesting features of the above function, in the order
that they appear:
@@ -1634,9 +1641,9 @@ narrowing) or select a candidate from the visible collection.
(progn
(counsel--async-command
(format "locate %s '%s'"
(mapconcat #'identity counsel-locate-options " ")
(counsel--elisp-to-pcre
(ivy--regex str))))
(mapconcat #'identity counsel-locate-options " ")
(counsel--elisp-to-pcre
(ivy--regex str))))
'("" "working..."))))
;;;###autoload
@@ -1645,15 +1652,15 @@ narrowing) or select a candidate from the visible collection.
INITIAL-INPUT can be given as the initial minibuffer input."
(interactive)
(ivy-read "Locate: " #'counsel-locate-function
:initial-input initial-input
:dynamic-collection t
:history 'counsel-locate-history
:action (lambda (file)
(with-ivy-window
(when file
(find-file file))))
:unwind #'counsel-delete-process
:caller 'counsel-locate))
:initial-input initial-input
:dynamic-collection t
:history 'counsel-locate-history
:action (lambda (file)
(with-ivy-window
(when file
(find-file file))))
:unwind #'counsel-delete-process
:caller 'counsel-locate))
Here are the interesting features of the above functions, in the
order that they appear:
@@ -1694,18 +1701,18 @@ each displayed strings.
(defun find-candidates-function (str pred _)
(let ((props '(1 2))
(strs '("foo" "foo2")))
(strs '("foo" "foo2")))
(cl-mapcar (lambda (s p) (propertize s 'property p))
strs
props)))
strs
props)))
(defun find-candidates ()
(interactive)
(ivy-read "Find symbols: "
#'find-candidates-function
:action (lambda (x)
(message "Value: %s" (get-text-property 0 'property x)
))))
#'find-candidates-function
:action (lambda (x)
(message "Value: %s"
(get-text-property 0 'property x)))))
Here are the interesting features of the above function:
@@ -1719,8 +1726,8 @@ each displayed strings.

File: ivy.info, Node: Variable Index, Next: Keystroke Index, Prev: API, Up: Top
Variable Index
**************
9 Variable Index
****************
[index]
* Menu:
@@ -1732,12 +1739,12 @@ Variable Index
(line 64)
* ivy-backward-delete-char: File Name Completion. (line 19)
* ivy-call: Key bindings for multiple selections and actions keep minibuffer open.
(line 16)
(line 19)
* ivy-confirm-face: Faces. (line 34)
* ivy-count-format: Defcustoms. (line 6)
* ivy-current-match: Faces. (line 9)
* ivy-dispatching-call: Key bindings for multiple selections and actions keep minibuffer open.
(line 26)
(line 29)
* ivy-dispatching-done: Key bindings for single selection action then exit minibuffer.
(line 24)
* ivy-display-style: Defcustoms. (line 24)
@@ -1770,7 +1777,7 @@ Variable Index
* ivy-next-history-element: Key bindings that alter the minibuffer input.
(line 9)
* ivy-next-line-and-call: Key bindings for multiple selections and actions keep minibuffer open.
(line 36)
(line 39)
* ivy-occur: Saving the current completion session to a buffer.
(line 9)
* ivy-occur-click: Saving the current completion session to a buffer.
@@ -1789,14 +1796,14 @@ Variable Index
* ivy-previous-history-element: Key bindings that alter the minibuffer input.
(line 18)
* ivy-previous-line-and-call: Key bindings for multiple selections and actions keep minibuffer open.
(line 47)
(line 50)
* ivy-read-action: Hydra in the minibuffer.
(line 65)
* ivy-remote: Faces. (line 71)
* ivy-restrict-to-matches: Key bindings that alter the minibuffer input.
(line 40)
* ivy-resume: Key bindings for multiple selections and actions keep minibuffer open.
(line 55)
(line 58)
* ivy-reverse-i-search: Key bindings that alter the minibuffer input.
(line 48)
* ivy-rotate-preferred-builders: Hydra in the minibuffer.
@@ -1818,8 +1825,8 @@ Variable Index

File: ivy.info, Node: Keystroke Index, Prev: Variable Index, Up: Top
Keystroke Index
***************
10 Keystroke Index
******************
[index]
* Menu:
@@ -1855,13 +1862,13 @@ Keystroke Index
* C-M-j: Key bindings for single selection action then exit minibuffer.
(line 53)
* C-M-m: Key bindings for multiple selections and actions keep minibuffer open.
(line 16)
(line 19)
* C-M-n: Key bindings for multiple selections and actions keep minibuffer open.
(line 36)
(line 39)
* C-M-o: Key bindings for multiple selections and actions keep minibuffer open.
(line 26)
(line 29)
* C-M-p: Key bindings for multiple selections and actions keep minibuffer open.
(line 47)
(line 50)
* C-M-y: File Name Completion. (line 41)
* C-o: Hydra in the minibuffer.
(line 9)
@@ -1874,7 +1881,7 @@ Keystroke Index
(line 26)
* k: Saving the current completion session to a buffer.
(line 31)
* m: Hydra in the minibuffer.
* M: Hydra in the minibuffer.
(line 40)
* M-i: Key bindings that alter the minibuffer input.
(line 23)
@@ -1910,53 +1917,53 @@ Keystroke Index

Tag Table:
Node: Top1189
Node: Introduction3100
Node: Installation5623
Node: Installing from Emacs Package Manager6073
Node: Installing from the Git repository7282
Node: Getting started8102
Node: Basic customization8409
Node: Key bindings9004
Node: Global key bindings9196
Node: Minibuffer key bindings11670
Node: Key bindings for navigation12902
Node: Key bindings for single selection action then exit minibuffer14109
Node: Key bindings for multiple selections and actions keep minibuffer open16756
Node: Key bindings that alter the minibuffer input19223
Node: Other key bindings21168
Node: Hydra in the minibuffer21546
Node: Saving the current completion session to a buffer23964
Node: Completion Styles25376
Node: ivy--regex-plus27127
Node: ivy--regex-ignore-order28613
Node: ivy--regex-fuzzy28981
Node: Customization29478
Node: Faces29664
Node: Defcustoms32093
Node: Actions33387
Node: What are actions?33713
Node: How can different actions be called?34531
Node: How to modify the actions list?35102
Node: Example - add two actions to each command35762
Node: How to undo adding the two actions36721
Node: How to add actions to a specific command37173
Node: Example - define a new command with several actions37589
Node: Test the above function with ivy-occur38477
Node: Packages39319
Node: Commands40284
Node: File Name Completion40469
Node: Using TRAMP42426
Node: Buffer Name Completion43928
Node: Counsel commands44543
Node: API45190
Node: Required arguments for ivy-read45788
Node: Optional arguments for ivy-read46307
Node: Example - counsel-describe-function49733
Node: Example - counsel-locate52591
Node: Example - ivy-read-with-extra-properties56341
Node: Variable Index57549
Node: Keystroke Index64669
Node: Top1192
Node: Introduction3103
Node: Installation5626
Node: Installing from Emacs Package Manager6076
Node: Installing from the Git repository7324
Node: Getting started8144
Node: Basic customization8451
Node: Key bindings9046
Node: Global key bindings9238
Node: Minibuffer key bindings11712
Node: Key bindings for navigation12944
Node: Key bindings for single selection action then exit minibuffer14151
Node: Key bindings for multiple selections and actions keep minibuffer open16835
Node: Key bindings that alter the minibuffer input19456
Node: Other key bindings21403
Node: Hydra in the minibuffer21781
Node: Saving the current completion session to a buffer24199
Node: Completion Styles25611
Node: ivy--regex-plus27369
Node: ivy--regex-ignore-order28855
Node: ivy--regex-fuzzy29223
Node: Customization29720
Node: Faces29906
Node: Defcustoms32335
Node: Actions33694
Node: What are actions?34020
Node: How can different actions be called?34838
Node: How to modify the actions list?35409
Node: Example - add two actions to each command36069
Node: How to undo adding the two actions37028
Node: How to add actions to a specific command37480
Node: Example - define a new command with several actions37896
Node: Test the above function with ivy-occur38833
Node: Packages39675
Node: Commands40640
Node: File Name Completion40825
Node: Using TRAMP42782
Node: Buffer Name Completion44284
Node: Counsel commands44899
Node: API45546
Node: Required arguments for ivy-read46144
Node: Optional arguments for ivy-read46663
Node: Example - counsel-describe-function50089
Node: Example - counsel-locate53073
Node: Example - ivy-read-with-extra-properties56942
Node: Variable Index58220
Node: Keystroke Index65344

End Tag Table