Table of Contents

0.6.0


Fixes

swiper-avy should use only the current window

Not all windows. See #117.


fix wrap-around for ivy-next-line

See #118.


swiper-avy should do nothing for empty input

See #50.


ivy-alt-done should require TRAMP if necessary

See #145.


swiper-query-replace shouldn't miss the first occurrence

See #144.


swiper should not deactivate mark

ivy-mode should not switch to TRAMP for certain input

See #145.


counsel-find-file should work better with TRAMP

"/ssh:foo" should not be cut off See #145.


counsel-find-file supports Windows drive letters

See #155.


counsel-file-file should work better with files that contain "~"

See #157.


counsel-M-x should respect ivy-format-function

See #150.


counsel-git-grep should position better on exit

See #153.


ivy-mode should re-scale text to minibuffer height

See #151.


counsel-unicode-char should use action-style call

See #160.


ivy-read should allow % in prompt string

See #171.


ivy-call should execute in proper window

See #176.

New Features

ivy-mode

Open an Info file on the file system

When in Info-mode, press g and select either "(./)" or "(../)" to switch to file name completion. That file will be opened with Info.


Account for minibuffer-depth-indication-mode

If you have minibuffer-depth-indication-mode on, the minibuffer prompt will indicate the current depth. See #134.


Add fuzzy matching function

To enable fuzzy matching, set your ivy-re-builders-alist accordingly:

(setq ivy-re-builders-alist
      '((t . ivy--regex-fuzzy)))

See #136.

See also #142 for toggling fuzzy matching with C-o m.


case-fold-search optimization

Bind case-fold-search to t when the input is all lower-case:

  • input "the" matches both "the" and "The".
  • input "The" matches only "The".

See #166.


Allow to see the candidate index a la anzu via ivy-count-format

To have this feature, use something like this:

(setq ivy-count-format "(%d/%d) ")

See #167.

You can also set this to "", if you don't want any count, see #188.


Allow to add additional exit points for any command

Example for ivy-switch-to-buffer:

(ivy-set-actions
 'ivy-switch-buffer
 '(("k"
    (lambda (x)
      (kill-buffer x)
      (ivy--reset-state ivy-last))
    "kill")
   ("j"
    ivy--switch-buffer-other-window-action
    "other")))

After this:

  • use M-o k to kill a buffer
  • use M-o j to switch to a buffer in other window

You can always use M-o o to access the default action. When there is only one action, M-o does the same as C-m.

See #164.


counsel-describe-function and counsel-decribe-variable

Add a binding to look up the symbol in info

Press C-, to look up the symbol in info, instead of the default describe action. See #121.


Handle symbol-at-point better in non-Elisp buffers

See #126.


ivy-switch-buffer

New face ivy-virtual

See #129.


Deal better with invisible buffers

See #135.


Add custom keymap

You can customize ivy-switch-buffer-map.

See #164.


Add extra actions

Add a kill-buffer action, and switch-to-buffer-other-window action.


counsel-git-grep

Add Async

Make it fully async: the process git grep will be killed and restarted on new input. This results in almost no keyboard delay.


Own history variable

swiper

Own history variable

Having own history variable allows to get more use of M-p, M-n and C-r.


counsel-el

Switch to action-style call

This allows to make use of C-M-n and C-M-p.


counsel-locate

Add Async
Add extra actions

In addition to the default action of opening a file add:

  • xdg-open action
  • dired action

Press M-o or C-o to access these actions.


Add own history

API

Add :matcher

A matcher is a function that accepts a regexp and a list of candidates and returns the filtered list of candidates.

The default matcher is basically cl-remove-if-not + string-match. If you'd like to customize this, pass your own matcher.

See counsel-git-grep-matcher for an example.


Allow to customize the initial input for all commands

Customize ivy-initial-inputs-alist for this. See #140.


ivy-sort-functions-alist should also examine this-command
:dynamic-collection is now a boolean

Pass the collection function as the second var instead.

New Commands

ivy-call

Execute the current action for the current candidate without exiting the minibuffer. Bound to C-M-m or M-RET or C-o g.


counsel-find-file

Forward to find-file with Ivy completion.

ivy-next-line-and-call as well as ivy-resume should work for this command.

The variable counsel-find-file-ignore-regexp allows to ignore certain files, like dot files. Input a leading dot to see all files.

The variable counsel-find-file-at-point allows to automatically use ffap. You also can do it manually with M-n when the point is on a file name.

The variable counsel-find-file-map allows to customize the minibuffer key bindings for this command.

Recommended binding:

(global-set-key (kbd "C-x C-f") 'counsel-find-file)

You can peek at files with C-M-n and C-M-p.

See #122 and #123.

See #152 about M-n, M-p and M-i switching directories when necessary.


ivy-recentf

Find a file on recentf-list.

Note that if your set ivy-use-virtual-buffers, recentf-list is merged into candidates list for ivy-switch-buffer. But if you want it separately, you can use this command.

See #124.


ivy-yank-word

Add word at point to minibuffer input.

This is similar to what C-w does for isearch. However it's bound to M-j instead of C-w, since C-w is bound to kill-region - a useful command.

See #125.


counsel-M-x

Forward to execute-extended-command with Ivy completion. The candidate list will also display the key binding for each bound command.

This command will piggyback on smex for sorting, if smex is installed.

Use counsel-M-x-initial-input to customize the initial input for this command. By default, it's "^" - the regex character that indicates beginning of string. This results in much faster matching, since you usually type the command name from the start.

See #136 and #138.


hydra-ivy

Press C-o to toggle the Hydra for Ivy. It gives access to shorter bindings and many customizable options.

Use C-o > to grow the minibuffer. Use C-o < to shrink the minibuffer.

See #151.


ivy-toggle-calling

Toggle executing the current action each time a new candidate is selected.

This command is bound to C-o c.

To explain how this is useful: C-M-m C-M-f C-M-f C-M-f is equivalent to C-o cjjj.


ivy-insert-current

Inserts the current candidate into the minibuffer.

Press M-i if you want something close to the current candidate. You can follow up with an edit and select.

I find this very useful when creating new files with a similar name to the existing file: C-x C-f M-i + a bit of editing is very fast.

See #141.


counsel-load-theme

Forward to load-theme with Ivy completion. Allows to rapidly try themes (e.g. with C-M-n).


counsel-rhythmbox

ivy-dispatching-done

Select an action for the current candidate and execute it. Bound to M-o.

Some commands that support M-o:

  • counsel-rhythmbox
  • counsel-describe-function
  • counsel-describe-variable
  • ivy-switch-buffer
  • counsel-locate

counsel-org-tag

Forward to org-set-tags with Ivy completion.

Selecting any tag each time will toggle it on/off. The current list of selected tags will be displayed in the prompt.

See #177 and #91.


counsel-org-tag-agenda

Forward to org-agenda-set-tags with Ivy completion. See #177.


counsel-ag

Interactively ag using Ivy completion.


counsel-recoll

Use recoll with Ivy completion. See Using Recoll desktop search database with Emacs.

Install recoll with sudo apt-get install recoll.


swiper-from-isearch

Start swiper from the current isearch input.


ivy-immediate-done

Use this command to exit the minibuffer choosing not the current candidate, but the current text. Bound to C-M-j or C-u C-j.

See #183.


0.7.0


Fixes

Fix :dynamic-collection not being sorted

When :initial-input contains a plus, escape it

See #195.


Set line-spacing to 0 in the minibuffer

See #198.


Enlarge the minibuffer window if the candidate list doesn't fit

See #198 and #161 and #220.


Fix minibuffer collapsing to one line

See #237, #229 and #77.


Use minibuffer-allow-text-properties

Allows ivy-read to return a propertized string.


Improve C-g out of a long-running async process

Use counsel-delete-process as :unwind.


Don't regexp-quote :preselect

See #245.


Fix ivy-partial for fuzzy completion

See #266.


ivy-resume should pass :caller

See #245.


Fix the regression in perfect match logic

See #270.


Fix pasting file paths on Windows

C-j should no stop completion for a pasted file path

C-M-j should use ivy--directory

When completing file names, expand the file name properly. See #275.


Use a specific blend method for dark themes

See #278.


Fix one-off bug in ivy-scroll-up-command and ivy-scroll-down-command

M-o shouldn't set the action permanently

So now it's possible to e.g. counsel-describe-function -> M-o d -> ivy-resume -> M-o o -> ivy-resume -> M-o i.


Fix swiper preselect issue with similar or identical lines

See #290.


Make ivy-completing-read handle history as cons

See #295.


Perform string-match in the original buffer

The syntax for whitespace, separators etc. is different for modes. See #298.

New Features

swiper

Make line numbers into display properties

Each candidate is now a single space plus the original string. The display property of the single space holds the line number. This means that it's no longer possible to match line numbers in queries, which is a good thing if you're searching for numbers.


Extend swiper-font-lock-ensure

Add mu4e-view-mode, mu4e-headers-mode, help-mode, elfeed-show-mode, emms-stream-mode, debbugs-gnu-mode, occur-mode, occur-edit-mode, bongo-mode, eww-mode, vc-dir-mode.


Add support for evil-jumper/backward

See #268.


Make compatible with visual-line-mode

swiper will split the lines when visual-line-mode is on. This is convenient for small buffers. For large buffers, it can be very slow, since visual-line-mode is slow. See #227.


Add swiper-toggle-face-matching

Bound to C-c C-f. At each start of swiper, the face at point will be stored. Use this command to toggle matching only the candidates with that face. See #288.


push-mark only if exited the minibuffer

C-M-n and C-M-p will no longer push mark and annoy with messages.


ivy-resume should restore the buffer for swiper

See #302.


Enable recursive swiper calls

While you swiper buffer-1, you can switch out of the minibuffer into buffer-2 and call swiper again. Exiting the second minibuffer will restore the first minibuffer.

To use this, you need to enable recursive minibuffers.

(setq enable-recursive-minibuffers t)

It's also useful to indicate the current depth:

(minibuffer-depth-indicate-mode 1)

See #309.


Fix for twittering-mode

The field text property is now removed before inserting text into the minibuffer. This fixes the swiper problems with twittering-mode. See #310.


ivy

Add manual

In the current state, the manual covers the most basic topics, like the minibuffer key bindings and the regexp builders.


Make <left> and <right> behave as in fundamental-mode
Truncate minibuffer prompts longer than window-width

See #240.


C-M-n should not leave the minibuffer

Make sure that the minibuffer window remains selected as long as the completion hasn't finished. For example, <f1> f to call counsel-describe-function, input "forward" and spam C-M-n to read the doc for each function that starts with "forward". The *Help* window popup would move the window focus, but this change moves it back to the minibuffer.


Add flx sorting

See #207. Since flx is costly, move the caching to an earlier point. This means immediate return for when the input hasn't changed, i.e. for C-n or C-p. When flx is installed, and (eq ivy--regex-function 'ivy--regex-fuzzy) for current function (through ivy-re-builders-alist), then sort the final candidates with ivy--flx-sort.

In the worst case, when some error pops up, return the same list. In the best case sort the cands that all match name by closeness to name.

How to use:

  1. Have flx installed - (require 'flx) should succeed.
  2. Configure ivy-re-builders-alist appropriately to use ivy--regex-fuzzy.

For example:

(setq ivy-re-builders-alist
      '((t . ivy--regex-fuzzy)))

Support hash tables

Since all-completions also works for hash tables, no reason not to support them.


Improve documentation of ivy-count-format

Now possible to set it with Customize.


Add ivy-index-functions-alist

Customize this to decide how the index, i.e. the currently selected candidate, is updated with new input. For example, one strategy is not reset it to 0 after each change.

Another strategy, used for swiper, is to try to select the first appropriate candidate after (inclusive) the first previously selected candidate. This way, if you're typing something that matches what is currently selected, the selection won't change.

See #253.


Add ivy-virtual-abbreviate

The mode of abbreviation for virtual buffer names.


Add ivy-case-fold-search

Used to override case-fold-search. See #259.


Add feedback for long-running async processes

Each time 0.5s pass after the last input, if the external process hasn't finished yet, update minibuffer with the amount of candidates collected so far. This is useful to see that long running commands like counsel-locate or counsel-ag (when in a very large directory) aren't stuck.


Promote ivy-extra-directories to defcustom
Promote ivy-sort-function-alist to defcustom
M-n should prefer url at point to symbol at point
C-x C-f M-n calls ffap-url-fetcher when at URL
Highlight modified file buffers with ivy-modified-buffer face

This new face is blank by default, but you can use e.g.:

(custom-set-faces
 '(ivy-modified-buffer ((t (:background "#ff7777")))))

Work with enable-recursive-minibuffers

Store the old ivy-last in case ivy-read is called while inside the minibuffer. Restore it after ivy-call.


Allow user-specified matched candidate sorting

New defcustom ivy-sort-matches-functions-alist. See #269 #265 #213.

By default, Ivy doesn't sort the matched candidates, they remain in the same order as in the original collection. This option is the default, since it's fast and simple.

A small problem with this approach is that we usually want prefix matches to be displayed first. One solution to this is to input "^" to see only the prefix matches.

Now, another solution is to can set:

(setq ivy-sort-matches-functions-alist
      '((t . ivy--prefix-sort)))

Here's another example of using this defcustom:

(add-to-list
     'ivy-sort-matches-functions-alist
     '(read-file-name-internal . ivy--sort-files-by-date))

After this, during file name completion, most recently changed files will be ahead.


ivy-display-style

Adds fancy highlighting to the minibuffer. See #212, #217, .


ivy-hydra

Bind t to toggle-truncate-lines

See #214.


Bind a to ivy-read-action

ivy-switch-buffer

Make M-o r rename the buffer instead of switching.

See #233.


counsel-locate

Allow customizing locate options

See counsel-locate-options. The current setting is:

(setq counsel-locate-options '("-i" "--regex"))

Support OSX

Use open instead of xdg-open. Modify counsel-locate-options for OSX, since there locate doesn't support --regex.


Use single quotes for the regex

See #194.


Add initial-input argument

See #289.


counsel-org-tag

Now works in agenda

See #200.


counsel-unicode-char

Add own history

counsel-M-x

Add "definition" action

Use M-o d to jump to definition.


Show current-prefix-arg in the prompt

See #287.


counsel-find-file

Input '/sudo::' goes to current directory instead of root's home

See #283.


Fix directory validity check

See #283 #284.


Improve TRAMP support

Selecting items after // now works properly.


counsel-git-grep

Use prefix arg to specify the shell command.

Remember to use M-i to insert the current candidate into the minibuffer.

See #244.


Allow counsel-git-grep -> ivy-occur -> wgrep

Using C-c C-o (ivy-occur) while in counsel-git-grep will produce a wgrep-compatible buffer.


ivy-occur gives full candidates

This means that the " | head -n 200" speed-up isn't used and full candidates are returned.


counsel--find-symbol

Allow to jump back with pop-tag-mark

Using C-. in:

  • counsel-describe-function
  • counsel-describe-variable
  • counsel-load-library

will change the current buffer. The buffer and point can be restored with M-* (pop-tag-mark).

I also recommend this binding:

(global-set-key (kbd "M-,") 'pop-tag-mark)

Resolve the name clash better

When the symbol is both bound and fbound, prefer the fbound one, unless the :caller is counsel-describe-variable.


counsel-ag

Add initial-directory

Support alternative initial directory which helps other packages call this function with their unique starting directory.


Fix on Windows

Using the "–vimgrep" argument improves things.

New Commands

ivy-occur

Bound to C-c C-o. Store the current completion session to its own buffer. You can have an unlimited amount of these buffers.


ivy-avy

Bound to C-'.

Speeds up selecting a candidate that's currently visible in the minibuffer.


ivy-kill-ring-save

Bound to M-w.

When the region is active, call kill-ring-save. Otherwise, store all selected candidates to the kill ring.


ivy-dispatching-call

Bound to C-M-o.

This is a non-exiting version of M-o (ivy-dispatching-done).


ivy-read-action

Bound to C-M-a. Select the current action. Don't call it yet.


swiper-multi

Use swiper in multiple buffers. See #182.

Basic usage tips for selecting multiple buffers:

  • Use C-M-m (ivy-call) to add or remove one more buffer without exiting.
  • Use C-m (ivy-done) to add one last buffer.
  • Or use C-M-j (ivy-immediate-done) to finish without adding more buffers.
  • Hold C-M-n (ivy-next-line-and-call) to add a lot of buffers at once.

swiper-mc

Open multiple cursors at all selected candidates.


swiper-all

New command to launch swiper for all open file buffers. Note that this can be excruciatingly slow if you don't clean up your buffer list often.


counsel-grep

This is essentially swiper for huge files. It's not as smooth as swiper for small files, but has a faster startup and faster matching for files that measure in megabytes.


counsel-git-grep-query-replace

Bound to M-q. Perform query-replace on all matches in all buffers.


counsel-jedi

Complete Python symbols using Jedi.


counsel-cl

Complete Common Lisp symbols using SLIME.


counsel-yank-pop

Give completion for inserting from the kill ring. See counsel-yank-pop-truncate defcustom and #218.


0.8.0


Package rename

Due to popular demand, swiper-0.7.0 is succeeded by ivy-0.8.0 in GNU ELPA. The contents of the package don't change, only the name. Make sure to remove the ~/.emacs.d/elpa/swiper-0.7.0 directory if you have it and M-x package-install ivy.

Documentation

HTML documentation is available at http://oremacs.com/swiper/.

Texinfo documentation is in doc/ivy.texi.

The HTML file shouldn't be in this repository to avoid bloat, instead it's in the gh-pages branch at https://github.com/abo-abo/swiper/tree/gh-pages.

Fixes

ivy-read

Fix recursive minibuffer exit with C-g

Make it so e.g. C-h f C-h v C-g goes back to the describe-function selection.


Ensure the return result

In some cases, read-from-minibuffer will return the whole minibuffer contents (i.e. all available candidates). Return ivy--current instead.


Properly support matching ignoring order

See #296 and #329.


Insert intermediate candidates during async completions

See #340.


Initialize ivy-last to empty state

See #352.


Fix extra actions for completing-read

See #337.


Support a list of symbols as collection

See #375.


Define setq-local and defvar-local unless defined

With this commit, Ivy works on emacs-24.2. See #415.


Make M-o not modify the action

See #454.


Make sure user keybindings are respected

See #466.


Fix read-file-name with a specified dir

See #475.


Don't highlight the match in the file part

See #483.


Add a few tests for alists

ivy-occur

Fix default-directory

This way, next-error etc will work properly.


ivy--resize-minibuffer-to-fit

Fix for small delta

See #339.


Check frame-root-window-p

See #380.


ivy-completing-read

Use completing-read-default for tmm

See #316.


ivy--regex-plus

Recognize ! at the beginning of the str

See #318.


Prettify a bit

See #344.


Don't consider \\(?...\) a group

See #393.


ivy--get-window

Always return a valid window

Even if state is invalid.


ivy--recompute-index

Update cl-position logic

See #207.


Fix due to recursive update

See #323.


ivy--reset-state

Don't null initial-input

This is specifically for 'read-file-name-internal collection. The input needs to be set to nil for e.g. rgrep, which supplies the absolute path as initial-input, resulting in a mess.

For now, don't set input to nil if :action was passed to ivy-read. See #336.


Don't deactivate region

See #377.


ivy-completion-in-region

Use completion-all-completions

See #341.


Optimize for 1 candidate

When there's only one candidate, call the action immediately.


Add feedback for 1 candidate

When the sole completion is the same as the input, notify the user. See #350.


Bind completion-ignore-case

It's convenient to have it the same value as case-fold-search.


ivy-read-action

Give enough minibuffer space

See #402.


Allow to customize the action hint formatter

See #469.


ivy-count-format

Fix for nil value

See #349.


ivy-switch-buffer

Don't fall back to switch-to-buffer

See #410.


ivy-next-history-element

No "\\_<" for dynamic-collection

"\\_<" regex is Emacs-specific and should only be done if :dynamic-collection is nil. It is nil for counsel-git-grep with repositories < 20000 lines, but non-nil for larger ones.

Fixes #409.


ivy-occur-press

Pulse no longer

Repeated pulses within a short time span resulted in horrible window flickering.


ivy-resume

Add a guard against null :action

ivy-avy

Make C-g cancel gracefully

See abo-abo/avy#140.


ivy-dispatching-done

Allow to exit with no candidates.


swiper

Improve for multiple occurrences on one line

See #314.


Fix "backward" search

When none of the previous candidates after the point match the current input, instead of returning 0, return the index of the last matching candidate. This is a good choice, because that candidate is the closest to the point of the initial search start.

See #319.


Return point

See #370.


Update regexp-search-ring

See #89.


Always remove '(field) text property

Allows to search better in modes for shell interaction.


swiper-font-lock-ensure

Add modes

Add bongo-library-mode, bongo-playlist-mode, sauron-mode.

See #19.


Don't fail when font-lock is off

See #400.


swiper--multi-candidates

Add check for make-string

See #481.


counsel--async-sentinel

Fix issue with ivy--regex-ignore-order

See #342.


Re-display when no cands
Recognize error codes other than 1

See #394.


counsel-git

Fix window selection.

Use with-ivy-window, so that each new file chosen with e.g. C-M-n is selected in the same window.


counsel-recoll

Add :unwind

See #403.


compilation warnings

See #324.


New Features

ivy-read

Use flx for highlighting fuzzy matches

See #207.


Simplify the signature for :dynamic-collection functions

When given :dynamic-collection, assume the collection function only needs one argument - the string input.


Modify M-n prediction when region is active

When the region is active and M-n is called, insert the region contents into the minibuffer and deactivate the region. The region deactivation is done for swiper, to make it easier to search for multiple words or a subword.


Allow to compose collections
  • Example 1: async collection

    Stack recentf on top of counsel-locate:

    (defun small-test ()
      (cl-subseq recentf-list 0 10))
    
    (ivy-set-sources
     'counsel-locate
     '((small-test)
       (original-source)))
    

    Here, (original-source) represents the async candidates of counsel-locate. All extra sources are static - each function is called once to generate a list of strings, which will be filtered later.

    The order matters, so you can have e.g.:

    (ivy-set-sources
     'counsel-locate
     '((original-source)
       (small-test)))
    

    See #373.


  • Example 2: sync collection
    (defun my-extra-source ()
      (append
       (when (eq 'Git (vc-backend (buffer-file-name)))
         (list "git1" "git2" "git3"))
       (when (file-exists-p "doc/Changelog.org")
         (list (propertize "doc/Changelog.org" 'face '(:background "red"))))))
    
    (defun my-find-file ()
      (interactive)
      (ivy-read "Find file: " 'read-file-name-internal
                :action (lambda (x)
                          (with-ivy-window
                            (find-file (expand-file-name x ivy--directory))))
                :require-match 'confirm-after-completion
                :history 'file-name-history
                :caller 'my-find-file))
    
    (ivy-set-sources
     'my-find-file
     '((my-extra-source)
       (original-source)))
    

    The function my-find-file knows nothing about the extra source, it's only purpose is to introduce a :caller to attach things to, as to not to mess up e.g. counsel-find-file.

    The function my-extra-source gets called once in ivy-read via ivy--reset-state. It takes no args and returns a list of strings, possibly empty.


Improve documentation UI

Bind C-h m to ivy-help.

ivy-help-file is a new defvar pointing to the ivy-help.org file.

Bind D in hydra-ivy to go to hydra's definition.

See #376 and #379.


Add ignore pattern toggling

C-c C-a is bound to ivy-toggle-ignore - a new command to toggle ignore patterns (user-configured filtering). If the ignore patterns are enabled and there are zero candidates after ignoring, display the ones that match the current text. This feature currently works for ivy-switch-buffer and counsel-find-file.

See #369.


ivy-mode

Set completion-in-region-function

See #331.


Improve M-n for 'read-file-name-internal

ivy-set-occur

Allows to customize ivy-occur per-command.


Add custom occur for ivy-switch-buffer

See #438 and #440.


ivy-occur-mode

New commands on j, k, c

(ivy-occur-toggle-calling): New command bound to c. (ivy-occur-next-line): New command bound to j. (ivy-occur-previous-line): New command bound to k.

This makes ivy-occur much more convenient, instead of gjgjgjg, just cjjj. Especially good for commands that change the contents of the other window, like describe-function or counsel-git-grep.

Example:

  • C-h f (describe-funtion)
  • run (self-insert-command)
  • C-c C-o (ivy-occur); C-o u also works.
  • cjjjjkkkk

New command ivy-occur-revert-buffer on g

Does what e.g. revert-buffer does for Help buffers.

Has special handling for counsel-git-grep, counsel-ag and counsel-grep: will run the shell command once more and reflect the updates in files.

Move ivy-occur-press from g to f.


Improve the feedback for j and k

The overlays will be more responsive now.


ivy-re-builders-alist

Allow this-command to be a key

Example:

(defun asdf ()
  (interactive)
  (completing-read "prompt: " '("abc" "abcd" "def")))

(global-set-key (kbd "C-c t") 'asdf)

(setq ivy-re-builders-alist
      '(
        (asdf . ivy--regex-fuzzy)
        (t . ivy--regex-plus)))

This is useful for commands that you didn't write. For new commands that you write, consider using ivy-read and :caller.

See #330.


ivy-set-actions

Call with t to affect all commands

Example:

(ivy-set-actions
 t
 '(("i" insert "insert")))

Now an "insert" action will be available for all ivy-read sessions when pressing M-o.

See #337.


ivy-faces

New defcustom group. See #389.


ivy-flx-limit

New variable. Configure when flx is used. See #207.


ivy-inhibit-action

New variable. See #363.


ivy-do-completion-in-region

New defcustom. See #367.


ivy-fixed-height-minibuffer

New defcustom.

When non nil, fix the height of the minibuffer during ivy completion at ivy-height. This effectively sets the minimum height at this level and tries to ensure that it does not change depending on the number of candidates.

See #353.


ivy-set-display-transformer

New API function.

Now used by switch-to-buffer and read-file-name.

See #399.


ivy-ignore-buffers

New defcustom similar to ido-ignore-buffers.

See #382 and #366.


ivy-add-newline-after-prompt

New defcustom.

See #451.


ivy-switch-buffer

Add virtual views

ivy-views variable stores pre-defined views. Allows to set a window configuration with many buffers from ivy-switch-buffer.

How to use: just set ivy-views appropriately. An example value is provided (but nulled, so that it's empty initially).


ivy-use-ignore-default

New defcustom

See #477.


swiper

Improve swiper-query-replace

To replace a symbol with a similar symbol,

  1. Press C-s M-n for swiper and select the symbol at point as input.
  2. Press M-q for swiper-query-replace
  3. Press M-n to yank the symbol to replace.
  4. Edit the replacement and RET.

Here step-3 was modified to yank e.g. "symbol" instead of "\_<symbol\_>" previously.


swiper-font-lock-exclude

New variable for major modes that misbehave with font-lock-ensure. See #346.


swiper-all

New auto-updates position

See #401.


counsel-mode

A minor-mode that remaps built-in functions that have counsel replacements available.

See #414.


Allow use of describe-prefix-bindings

See #441.


counsel-find-file

Add initial-input

See #336.


Change tramp prompt from "Find File: " to "user@host: "
Bind counsel-up-directory to C-DEL

New function that moves up to the parent directory and at the same time preselects the current directory. This is useful for moving up and down a file tree quickly.

See #343.


Customize M-n action

This feature allows to quickly visit Github issues from either magit-commit-mode or from a version-controlled file. The point has to be at the "#" char in e.g. "#123", that represents an issue.

It's possible to customize ivy-ffap-url-functions to do a similar thing for places other than Github.

The C-x C-f M-n key binding will work better with counsel-find-file, for plain find-file it will open a dired buffer in addition to opening the URL.


Can un-ignore dotfiles with a leading dot input

When ivy-text starts with a dot, don't use counsel-find-file-ignore-regexp. The generic way to do this is with C-c C-a (ivy-toggle-ignore), but this is faster and more convenient.

See #408.


Bind M-o f to find-file-other-window
Correctly expand file name at point

See #430.


Add display transformer

See #458.


Add magic slash that changes the directory

Update to the behavior: the slash ("/") will enter a directory even if its name isn't completely typed out if either:

  1. It's the only candidate.
  2. The candidate index isn't 0, i.e. "C-n" has been typed at least once.
  3. The input isn't "/".

The above rules still allow to keep the old behavior with "//" moving to root and "/ssh:" opening tramp.

This is an experimental feature, please report if it breaks someone's workflow.

See #321 and #480.


counsel-git-grep

Bind C-c C-m to counsel-git-grep-switch-cmd

The initial command always runs on all files.

To run only on *.el files, C-c C-m followed by M-i -- *.el. To run on *.c and *.h files, C-c C-m followed by M-i -- *.c *.h. To switch to all files again, C-c C-m and select the appropriate entry.

See #420.


counsel-locate

counsel-locate-cmd

New defcustom that replaces counsel-locate-options.

See #385.


counsel-locate-cmd-mdfind

New function. See #390.


counsel-locate-cmd-es

New function. See #426.


counsel-yank-pop

Truncate during display

During the completion, only the context around the match will be shown. By default, the context is +2 lines above and +2 lines below the match. It can be adjusted with counsel-yank-pop-truncate-radius. Additionally, ivy-height is temporarily bound to 5 during completion. This way, the maximum minibuffer height should be 1+4*5=21 lines.

See #315.


counsel-unicode-char

Display hex codes in left column.


counsel-rhythmbox

Preselect the current song

counsel-ag

counsel-ag-base-command

Allows the command run by counsel-ag-function to be customized. There are several reasons to allow this: The vimgrep option is a recent addition; on windows it's more convenient to use pt; and the user might want to customize ignored files.

Standard value:

(setq counsel-ag-base-command "ag --nocolor --nogroup %s -- .")

See #335.


Add dir prompt for C-u

See #429.


Add counsel-ag-map

See #462.


counsel-async-split-string-re

New defcustom.


counsel--async-cmd

Add optional exit-code table

This argument can be used to associate exit codes with the underlying reason. Used in counsel-ag-function to signal that an exit code of 1 means that no matches were found.

See #421.


counsel-prompt-function

New defcustom

See #424 and #425.


counsel-grep

Reveal outlines

Just like swiper.


Should pick candidates closest to point

Fixes the algorithm selecting the first matching candidate in case there are 0 matching candidates following point. Now the last matching candidate will be selected, resulting in less scrolling.


Speed up x40 times

The default shell command will not use --ignore-case switch for grep. It's a bit less convenient, but results in a huge speed-up.


counsel-M-x

Add help action

Bound to M-o h by default.

See #452.

New Commands

counsel-tmm

Completion for the menu bar items. For example:

counsel-tmm -> Options -> Set Default Font....

Thanks to completion, the latter stages of the chain would look like: op RET set RET.


counsel-imenu

Jump to a buffer position indexed by imenu.


counsel-decbinds

Show a list of all defined keys, and their definitions. Describe the selected candidate. See #332.


counsel-list-processes

Offer completion for process-list

The default action deletes the selected process. An extra action allows to switch to the process buffer.

See #357 and #398.


ivy-switch-buffer-other-window

Remap switch-to-buffer-other-window to ivy-switch-buffer-other-window for ivy-mode.

See #361.


counsel-git-stash

Search through all available git stashes.

See #374.


counsel-git-log

Call the git log --grep shell command and search through the output.


counsel-pt

Grep for a string in the current directory using pt.

See #434.


counsel-linux-app

Launch a Linux desktop application, similar to Alt-<F2>.

See #446.


counsel-esh-history

Browse Eshell history.

See #459.


counsel-shell-history

Browse shell history.


counsel-grep-or-swiper

New command: automatically use swiper for smaller buffers and counsel-grep for larger buffers.

Adjust with:

(setq counsel-grep-swiper-limit 300000)

By default, the splitting predicate is 300K bytes in a file.