122 lines
3.9 KiB
Markdown
122 lines
3.9 KiB
Markdown
comet.el
|
|
========
|
|
|
|
Cursor comet trail effect for Emacs. When you move the cursor, a comet
|
|
of highlighted characters travels along the geometric line between the
|
|
old and new positions, then fades away.
|
|
|
|
Works with both keyboard and mouse movement. Correctly handles visual
|
|
line wrapping (`visual-line-mode`, `word-wrap`, `toggle-truncate-lines`).
|
|
|
|
Requires Emacs 29.1 or later.
|
|
|
|
<video src="https://git.andros.dev/andros/comet.el/media/branch/main/demo.mp4" autoplay muted loop controls></video>
|
|
|
|
How it works
|
|
------------
|
|
|
|
Given two buffer positions, the package computes their visual (column,
|
|
row) coordinates on screen, traces a line between them using
|
|
Bresenham's algorithm, maps each cell back to a buffer position, and
|
|
animates a comet sliding along that path with an ease-out brightness
|
|
gradient.
|
|
|
|
Installation
|
|
------------
|
|
|
|
### use-package with :vc (Emacs 29+)
|
|
|
|
Recommended method for Emacs 29 and later:
|
|
|
|
(use-package comet
|
|
:vc (:url "https://git.andros.dev/andros/comet.el"
|
|
:rev :newest)
|
|
:config
|
|
(add-hook 'prog-mode-hook #'comet-trail-mode)
|
|
(add-hook 'text-mode-hook #'comet-trail-mode))
|
|
|
|
### use-package with :load-path
|
|
|
|
For manual installation:
|
|
|
|
(use-package comet
|
|
:load-path "/path/to/comet.el"
|
|
:config
|
|
(add-hook 'prog-mode-hook #'comet-trail-mode)
|
|
(add-hook 'text-mode-hook #'comet-trail-mode))
|
|
|
|
### Manual
|
|
|
|
Clone the repository and place the file in a directory on your `load-path`:
|
|
|
|
git clone https://git.andros.dev/andros/comet.el.git
|
|
|
|
Then add to your `user-init-file`:
|
|
|
|
(add-to-list 'load-path "/path/to/comet.el")
|
|
(autoload 'comet-trail-mode "comet" nil t)
|
|
|
|
Or, to load it immediately at startup:
|
|
|
|
(add-to-list 'load-path "/path/to/comet.el")
|
|
(require 'comet)
|
|
(add-hook 'prog-mode-hook #'comet-trail-mode)
|
|
|
|
Usage
|
|
-----
|
|
|
|
Run `M-x comet-trail-mode RET` to toggle the effect in the current
|
|
buffer. The mode indicator `Trail` appears in the mode line when
|
|
active.
|
|
|
|
Additional commands:
|
|
|
|
- `comet-draw`: Draw a static highlighted line between two positions
|
|
(works on the active region with `M-x comet-draw`).
|
|
- `comet-clear`: Remove all comet overlays from the current buffer.
|
|
|
|
Customization
|
|
-------------
|
|
|
|
Run `M-x customize-group RET comet RET` to list all available options.
|
|
|
|
Key options:
|
|
|
|
- `comet-comet-length` (default `4`): Number of characters visible in
|
|
the comet trail.
|
|
- `comet-comet-speed` (default `0.3`): Duration in seconds for the
|
|
comet to traverse the full path.
|
|
- `comet-fade-exponent` (default `2.0`): Brightness falloff curve.
|
|
`1.0` is linear, `2.0` is quadratic ease-out (recommended), `3.0`
|
|
is cubic (sharper tail).
|
|
- `comet-minimum-distance` (default `2`): Minimum movement in cells to
|
|
trigger an animation. Avoids visual noise on small cursor jumps.
|
|
- `comet-tick-interval` (default `0.016`): Seconds between animation
|
|
frames (approximately 60fps).
|
|
- `comet-face` (default `comet-highlight`): Face used for the comet
|
|
color. Set to `nil` to inherit the cursor color automatically.
|
|
|
|
The default highlight color is `#f0c674` (warm yellow) on dark themes
|
|
and `#c678dd` (purple) on light themes.
|
|
|
|
Contributing
|
|
------------
|
|
|
|
Contributions are welcome! Please see the [contribution guidelines](https://git.andros.dev/andros/contribute) for instructions on how to submit issues or pull requests.
|
|
|
|
License
|
|
-------
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or (at
|
|
your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|