Emacs Port of anzu.vim
Emacs Lisp
Latest commit e6c56ca Oct 17, 2016 @syohex Update face document

README.md

anzu.el melpa badge melpa stable badge

Introduction

anzu.el is an Emacs port of anzu.vim. anzu.el provides a minor mode which displays current match and total matches information in the mode-line in various search modes.

Screenshot

Screencast of anzu.gif

Requirements

  • Emacs 24 or higher
  • cl-lib 0.5 or higher (you don't need to install cl-lib if you use Emacs 24.3 or higher)

Installation

You can install anzu.el from MELPA with package.el

 M-x package-install anzu

Basic Usage

global-anzu-mode

Enable global anzu mode:

(global-anzu-mode +1)
anzu-mode

Enable anzu minor mode:

(anzu-mode +1)
anzu-query-replace

Same as query-replace except anzu information in mode-line

anzu-query-replace-regexp

Same as query-replace-regexp except anzu information in mode-line

Add following S-exp in your configuration if you want to use anzu's replace commands by default.

(global-set-key [remap query-replace] 'anzu-query-replace)
(global-set-key [remap query-replace-regexp] 'anzu-query-replace-regexp)

Screencast of anzu-query-replace-at-cursor-thing

anzu-query-replace-at-cursor

Same as anzu-query-replace except from-string is symbol at cursor

anzu-query-replace-at-cursor-thing

Same as anzu-query-replace-at-cursor except replaced region is specified by anzu-replace-at-cursor-thing.

anzu-replace-at-cursor-thing

Same as anzu-query-replace-at-cursor-thing except not query. This command is useful in refactoring such as changing variable name in the function.

Screencast of anzu-replace-at-cursor-thing

anzu-isearch-query-replace

Anzu version of isearch-query-replace

anzu-isearch-query-replace-regexp

Anzu version of isearch-query-replace-regexp

Customization

anzu-mode-line

Face of mode-line anzu information

anzu-mode-line-no-match

Face of mode-line at no matching case

anzu-replace-highlight

Face of from-string of replacement

anzu-replace-to

Face of to-string of replacement

anzu-mode-line-update-function

Function which constructs mode-line string. anzu.el puts its output to mode-line. It is called at searching, inputting replaced word, replacing. This must be non-nil.

The function takes 2 integer arguments, current position and total match number. You can get current-state from anzu--state('search, 'replace-query, replace).

(defun my/anzu-update-func (here total)
  (when anzu--state
    (let ((status (cl-case anzu--state
                    (search (format "<%d/%d>" here total))
                    (replace-query (format "(%d Replaces)" total))
                    (replace (format "<%d/%d>" here total)))))
      (propertize status 'face 'anzu-mode-line))))

(custom-set-variables
 '(anzu-mode-line-update-function #'my/anzu-update-func))
anzu-cons-mode-line-p(Default is t)

Set nil if you want to display anzu information at any position in mode-line. anzu.el cons search information head of mode-line as default.

For example, show search information tail of minor-mode-alist

(setq anzu-cons-mode-line-p nil)
(setcar (cdr (assq 'isearch-mode minor-mode-alist))
        '(:eval (anzu--update-mode-line)))
Screenshot

anzu-any-position

anzu-mode-lighter

Mode name in mode-line. Default is Anzu.

anzu-input-idle-delay(Default is 0.05)

Delay second of updating mode-line information when you input from-string

anzu-regexp-search-commands

Commands which have regexp input. If the last command is a member of this list, anzu.el treats input as regular expression.

The default value is '(isearch-forward-regexp isearch-backward-regexp).

anzu-use-migemo(Default is nil)

Set to t if you use migemo.

anzu-search-threshold(Default is nil)

Threshold of searched words. If there are searched word more than this value, anzu.el stops to search and display total number like 1000+(as default). If this value is nil, anzu.el counts all words.

anzu-threshold

anzu-replace-threshold(Default is nil)

Threshold of replacement overlay. If this value is nil,

anzu-minimum-input-length(Default is 1)

Minimum input length to enable anzu. This parameter is useful for migemo users. Searching 1 or 2 characters with migemo is too heavy if buffer is so large. Please set 3 or higher if you frequently edit such file.

anzu-deactivate-region(Default is nil)

Deactivate region at anzu replace command if this value is non-nil. It is hard to see with anzu replace command when region is active.

anzu-replace-at-cursor-thing(Default is 'defun)

Thing at point of anzu-query-replace-at-cursor-thing. This parameter is same as thing-at-point.

anzu-replace-to-string-separator(Default is "")

Separator of to string.

Sample Configuration

(require 'anzu)
(global-anzu-mode +1)

(set-face-attribute 'anzu-mode-line nil
                    :foreground "yellow" :weight 'bold)

(custom-set-variables
 '(anzu-mode-lighter "")
 '(anzu-deactivate-region t)
 '(anzu-search-threshold 1000)
 '(anzu-replace-threshold 50)
 '(anzu-replace-to-string-separator " => "))

(define-key isearch-mode-map [remap isearch-query-replace]  #'anzu-isearch-query-replace)
(define-key isearch-mode-map [remap isearch-query-replace-regexp] #'anzu-isearch-query-replace-regexp)