Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
498 lines (395 sloc) 19.4 KB



Candidate window reversal

See #27.

Jumping to newlines with at-full style

See #5.

Stop at-full style from shifting text sometimes

See #5.

Fix at-full interaction with tabs

When at a tab, visualize it using tab-width spaces.

See #43.

Fix overlay issue when the same buffer is in two windows

See #47 and

Quote punctuation chars

See #63.

Update screenshot for avy-goto-char in

Use C-: as the new suggested binding instead of the pi char.

See #64.

New Features

avy-goto-line can now break into goto-line

Just enter a digit and you’ll be transferred into goto-line prompt with that digit already entered. This means that you can just bind M-g g to avy-goto-line without losing anything.

See #29.

avy-goto-line now works with all kinds of overlay styles

Any of the following do something different now:

(setq avy-styles-alist
      '((avy-goto-line . post)))
(setq avy-styles-alist
      '((avy-goto-line . at)))
(setq avy-styles-alist
      '((avy-goto-line . at-full)))
(setq avy-styles-alist
      '((avy-goto-line . pre)))

See #17.

New defcustom avy-case-fold-search

Non-nil when searches should ignore case, so e.g. avy-goto-char “b” will match both “b” and “B”. On by default. Use this to turn off this behavior:

(setq avy-case-fold-search nil)

See #34.

New command avy-goto-word-or-subword-1

Enter one char, and select a visible word or subword that starts with it, depending on subword-mode. Move the point there.

See #33.

avy-move-line should remove empty line after original one is moved

See #40.

avy-move-line now takes a prefix arg

Use e.g. M-3 before avy-move-line to move 3 lines at once.

Most commands can be used non-interactively


(defun avy-goto-lp ()
  (avy-goto-char ?\())

This command only goes to the “(” character. This is actually very similar to =lispy-ace-paren=, except the implementation is only one line.

See #44.

(almost) all defcustoms are explained on the wiki

See the defcustom wiki page.

Allow all operations to work across frames

You have to customize avy-all-windows for this. By default, it’s set to work on all windows on the current frame.

To make it work only on the current window, use:

(setq avy-all-windows nil)

To make it work on all frames, use:

(setq avy-all-windows 'all-frames)

New command avy-goto-char-in-line

This is avy-goto-char reduced only to the current line. Few candidates means very short decision chars path.

See #49.

New overlay style de-bruijn

How to use it:

(setq avy-style 'de-bruijn)

What it does: when your leading chars are clumped up together, it’s impossible to overlay the decision path without shifting the buffer text a bit. For example, with the word “buffer”, you avy-goto-char “b”, and:

  • the path for the first “f” is “aj”
  • the path for the second “f” is “ak”

It’s not possible to overlay 4 characters over “ff” in “buffer”. But to with de-bruijn style, which results in the path being “aj” and “jk”. It’s possible to overlay “ajk” just fine.

Pros and cons of de-bruijn over other styles:

  • a pro is that it’s possible to display the full decision path for clumped up chars, which is truncated for other styles
  • a con is that the decision path is of the same length (e.g. 2 or 3) for all candidates, while with other styles it’s possible to have a few candidates with a shorter path.

See #51 and #5.

New defcustom avy-ignored-modes

This is meant for visual modes like doc-view-mode or image-mode that can have a huge number of chars in a single window. Which results in a huge number of candidates even in other windows.

Current setting:

(setq avy-ignored-modes '(image-mode doc-view-mode pdf-view-mode))

See #57.

New tutorial on writing custom commands

See the the custom-commands wiki page and #55.

New face setup

New variable avy-lead-faces will determine the faces used to color the current decision depth you’re in. For example, if to select a particular candidate you need to press “abc”:

  • “a” will be highlighted with a face that corresponds to depth 3
  • “b” will be highlighted with a face that corresponds to depth 2
  • “c” will be highlighted with a face that corresponds to depth 1

But if another candidate needs “ef”:

  • “e” will be highlighted with a face that corresponds to depth 2
  • “f” will be highlighted with a face that corresponds to depth 1

See #53.

New variable avy-translate-char-function

You can use this, for example, to interpret one character as another in avy-keys.


(setq avy-translate-char-function
          (lambda (c) (if (= c 32) ?a c)))

This will translate SPC (32) into a. So you can press either a or SPC to mean “a”.

avy-isearch works for different styles

See #61.

Switch the default style from pre to at-full

I’ve come to like at-full more than pre over time. The difference is that pre hides no chars in your buffer, while at-full doesn’t shift text.

Use this to restore the previous default behavior:

(setq avy-style 'pre)



avy-goto-char-timer obeys avy-styles-alist

See #67.

Add de-bruijn to the defcustom of avy-styles-alist

See #73.

Respect the current input method for target chars

See #76.

avy-goto-subword-0 shouldn’t offer invisible chars

See #90.

Better case-fold-search handling

See #87.

Add misc punctuation to subword commands

See #93.

Add padding for wide-width chars (ex. Japanese and Chinese)

See #96.


Push mark for numeric line

See #74.

Allow numeric prefix arg

The old behavior remains for ARG 1 or 4. For all other ARG, simply go to that line. See #86.

Work for visual-line-mode

See #91.

Don’t error on end of buffer

See #91.

Obey avy-background

See #94.

Fix for narrowed regions

See #122, #123.

Don’t modify avy-action

See #124.


May read as many chars as you want

See #97.

Highlight matches while reading chars

See #98.

Highlight depending on avy-all-windows

See #104.

Make faster for org-mode

See #100.

Add case fold search

See #128.


Keep the same selectors for the second pass

See #120, #121.

Copy/move to initial window

See #131.

Search only in the visible region

See #108, #109.

Fix jumping to the last char of a folded Org outline

See #108.

Fix for both org-indent-mode and visual-line-mode

See #110.

Beep when there are no matches

See #111.

Simplify overlay code

Most functions reuse avy--overlay now.

Fix de-bruijn “no catch for tag”

See #116.

Fix overlays at point-max

See #125.

Improve case-fold-search condition

See #126.

Don’t shorten selector string for visual-line-mode and bolp

See #129.

Fix interaction with goto-address-mode

New Features

Allow non-printing keys in avy-keys

Now you can set avy-keys also to the arrow keys and page up/down, e.g.

(setq avy-keys '(left right up down prior next))

and those will be displayed as ▲, ▼, , , △, ▽ in the overlays. The display is controlled by the variable avy-key-to-char-alist.

See #77.

Allow to switch action midway from goto to kill/mark/copy

For example, suppose you have:

(global-set-key (kbd "M-t") 'avy-goto-word-1)
  • To jump to a certain word starting with “w” (e.g. first one on screen): M-t w a
  • To copy the word instead of jumping to it: M-t w na.
  • To mark the word after jumping to it: M-t w ma.
  • To kill the word after jumping to it: M-t w xa.

You can customize avy-dispatch-alist to modify these actions.

See #78.

New command avy-pop-mark

Goes back to the last location of push-mark:

  • has its own history,
  • handles multiple frames.

See #81 #88 #69.

New commands avy-goto-line-above and avy-goto-line-below

See #106.

New defcustom avy-line-insert-style

Allows to modify the behavior of avy-copy-line, avy-move-line, and avy-copy-region. See #117.

New defcustom avy-all-windows-alt

Allows to customize the behavior of universal-argument modifying avy-all-windows. See #118.

New defcustom avy-subword-extra-word-chars

Allows to customize the behavior of avy-goto-subword-0 and avy-goto-subword-1 by adding extra chars that should match as word constituents. See #116.




Save selected window and frame. See #133.

Copy line for el:avy-goto-line. See #191.


Make C-g and ESC fail silently when reading char. See #137.

Display error message on mouse clicks. See #226.

Update el:avy-current-path before returning. See #226.

Quit on ESC. See #249.

Fix for el:org-toggle-link-display. See #261.

Fix for el:buffer-invisibility-spec being t. See #264.

Allow “invisible” ‘org-link. See #269.


Works for “^A”-“^Z”, see #167.


Add char at window start if empty, See #145.

Add option to limit scope. See #235.


Check el:char-after. See #163.


Escape regex. See #147.


Translate RET to C-j. See #153.


Add el:raise-frame.


Allow C-h to delete. See #193.

Obey el:avy-background for the initial search. See #259.


Fix for empty buffer. See #238.

Add ability to display candidates from bottom to top. See #236.


More consistent face order. See #270.


See #223, #226, #218, #245, #262.

New Features


New functions have been added as drop-in replacements of double-dash (private) avy functions that were used in other packages and configs. Please replace the references to the obsolete functions.


New API function to replace el:avy–generic-jump. See #265, #267.


New API function to replace el:avy–process. See #266.

New actions


Kill a word with el:avy-goto-char without moving there. Bound to X.


Auto-correct word at point. See #142, #160, #161. Bound to i.


Yank sexp starting at selected point at the current point. See #183. Bound to y.


Kill sexp starting on selected point and yank into the current location. See #207. Bound to t.


Kill from point up to selected point. See #234. Bound to z.

New defcustoms

New el:avy-style setting: ‘words

Use this setting:

(setq avy-style 'words)

And you’ll see overlays like “by”, “if”, “is”, “it”, “my” for 2-letter sequences, and “can”, “car”, “cog” for 3-letter sequences. You might find them easier to type than “hla”, “lls” and “jhl”. But you will have to adjust your el:avy-dispatch-alist, e.g. to use only upper case characters.

See #210, #219.


Use it to customize the order of candidates with relation to point. The default is for el:avy-goto-char to have the shortest overlay for candidates closest to point. See #242.


When non-nil el:avy-goto-line will display the line overlay next to the first non-whitespace character of each line. See #244.


When non-nil, and there is only one candidate, jump there. See #250.


Customize keys which delete the last read char. The defaults are C-h and DEL. See #251.


Customize el:avy-goto-word-0. See #136, #156.


Function to all before el:avy-action. See #260.


When non-nil (the default), RET exists el:avy-goto-char-timer early. When nil, it matches a newline. See #220, #225.

New commands


Select two lines and move the text between them above the current line. See #75, #187, #188.


Call el:avy-goto-line and move to the end of the line. See #240.


Minor mode that uses avy hints for el:linum-mode.


Holds last command avy command after user input. This is a quick way to bring back the same markers after a jump. See #157, #165.


Go to the next candidate after el:avy-read. Example config:

(defhydra hydra-avy-cycle ()
  ("j" avy-next "next")
  ("k" avy-prev "prev")
  ("q" nil "quit"))

(global-set-key (kbd "C-M-'") 'hydra-avy-cycle/body)

After e.g. el:avy-goto-char or el:avy-goto-char-timer, use the above hydra to cycle between the last candidates. See #254.

*-above and *-below variants

Command versions restricted to matches before or after the point.

See #148:

  • el:avy-goto-char-2-above
  • el:avy-goto-char-2-below

See #151:

  • el:avy-goto-word-1-above
  • el:avy-goto-word-1-below

See #156:

  • el:avy-goto-symbol-1-above
  • el:avy-goto-symbol-1-below

See #186:

  • el:avy-goto-word-0-below
  • el:avy-goto-word-0-above

kill and save region functionality

New avy-enabled commands:

  • el:avy-kill-whole-line
  • el:avy-kill-region
  • el:avy-kill-ring-save-whole-line
  • el:avy-kill-ring-save-region

See #158.

org-mode functionality

New avy-enabled commands:

  • el:avy-org-refile-as-child
  • el:avy-org-goto-heading-timer

See #214, #258.


Show the number of matches so far in the prompt. See #253.


Ignore mistyping when no candidates are available. See #256.

When the overlays are shown, press ? to get dispatch help.