symbol-overlay

Homepage: https://github.com/wolray/symbol-overlay

Author: wolray

Updated:

Summary

Highlight symbols with keymap-enabled overlays

Commentary

Highlighting symbols with overlays while providing a keymap for various
operations about highlighted symbols.  It was originally inspired by the
package `highlight-symbol'.  The fundamental difference is that in
`symbol-overlay' every symbol is highlighted by the Emacs built-in function
`overlay-put' rather than the `font-lock' mechanism used in
`highlight-symbol'.

Advantages

When highlighting symbols in a buffer of regular size and language,
`overlay-put' behaves as fast as the traditional highlighting method
`font-lock'.  However, for a buffer of major-mode with complicated keywords
syntax, like haskell-mode, `font-lock' is quite slow even the buffer is less
than 100 lines.  Besides, when counting the number of highlighted
occurrences, `highlight-symbol' will call the function `how-many' twice,
which could also result in an unpleasant delay in a large buffer.  Those
problems don't exist in `symbol-overlay'.

When putting overlays on symbols, an auto-activated overlay-inside keymap
will enable you to call various useful commands with a single keystroke.

Toggle all overlays of symbol at point: `symbol-overlay-put'
Jump between locations of symbol at point: `symbol-overlay-jump-next' &
`symbol-overlay-jump-prev'
Switch to the closest symbol highlighted nearby:
`symbol-overlay-switch-forward' & `symbol-overlay-switch-backward'
Minor mode for auto-highlighting symbol at point: `symbol-overlay-mode'
Remove all highlighted symbols in the buffer: `symbol-overlay-remove-all'
Copy symbol at point: `symbol-overlay-save-symbol'
Toggle overlays to be showed in buffer or only in scope:
`symbol-overlay-toggle-in-scope'
Jump back to the position before a recent jump: `symbol-overlay-echo-mark'
Jump to the definition of symbol at point: `symbol-overlay-jump-to-definition'
Isearch symbol at point literally:
`symbol-overlay-isearch-literally'
Query replace symbol at point: `symbol-overlay-query-replace'
Rename symbol at point on all its occurrences: `symbol-overlay-rename'

Usage

To use `symbol-overlay' in your Emacs, you need only to bind these keys:
(require 'symbol-overlay)
(global-set-key (kbd "M-i") 'symbol-overlay-put)
(global-set-key (kbd "M-n") 'symbol-overlay-switch-forward)
(global-set-key (kbd "M-p") 'symbol-overlay-switch-backward)
(global-set-key (kbd "") 'symbol-overlay-mode)
(global-set-key (kbd "") 'symbol-overlay-remove-all)

Default key-bindings are defined in `symbol-overlay-map'.
You can re-bind the commands to any keys you prefer by simply writing
(define-key symbol-overlay-map (kbd "your-prefer-key") 'any-command)

Dependencies

Reverse dependencies