scan() returns matches in top-to-bottom reading order. With the
26-label cap, that meant the first 26 matches on screen ate all the
labels — your cursor could be at the bottom of the buffer and still
have no labels near it.
Sort matches by |line - cursor_line|, then by |col - cursor_col| as
tie-break, before label assignment. Labels now land on the 26 closest
matches rather than the 26 topmost. Same label pool, same public API,
big UX win for any buffer with more hits than labels.
Replace the physical-position label order with a finger-strength-based
order that alternates hands where possible: index > middle > ring >
pinky, home row > top row > bottom row. Home row pairs come first
(fjdksl), then home stretches, then top row index/middle pairs, and
so on, with the weakest pinky/bottom-row-stretch keys trailing.
Marginal but measurable ergonomic win for touch typists; conflict
avoidance logic unchanged.
Add the standard MPL Exhibit A notice at the top of init.lua along
with explicit copyright lines for both the original author (Yorick
Peterse) and the modifications in this fork. The LICENSE file
already carries the full MPL-2.0 text; this just makes per-file
provenance unambiguous.
- Fuse search() and available_labels() into a single scan() pass.
Drops the line_index bookkeeping field on match records and one
full traversal of the visible buffer.
- Replace the separate LABELS array with direct indexing into
M.config.labels (a string, ~26 ASCII chars). One less parallel
data structure; no fn.split at setup, no bottom-of-file auto-setup
call needed.
- Label picker switched from nested O(M*L) scan to an O(M+L) cursor
walk. No more double-duty 'avail' set acting as both conflict-set
and consumed-label marker.
- Termcode constants consolidated into a K = { ... } table using
vim.keycode.
- Normalize module state: CONFIG -> M.config.
- Collapse 'if opts then extend end' to 'opts or {}'.
- Fix: hoist create_augroup out of the table-valued label branch so
a second setup() call with a string label clears any stale autocmd
from a prior table-valued call.
- Drop redundant '#line > 0' guard in scan (string.find handles
empty lines correctly).
Net: 186 -> 148 lines. Public API unchanged.
Fork of https://github.com/yorickpeterse/nvim-jump (MPL-2.0) with one
addition: `label` accepts a table of nvim_set_hl attributes in
addition to a group name, and the plugin re-applies it on ColorScheme.
Upstream declined the feature as out of scope (the project is
considered feature-complete), so it lives here instead. Credit for the
core implementation goes to Yorick Peterse.
Changes relative to upstream:
- Module renamed 'jump' -> 'tiny-jump'
- Namespace and augroup renamed accordingly
- Internal managed highlight group renamed 'JumpLabel' -> 'TinyJumpLabel'
- Default `label` changed from 'FlashLabel' to 'IncSearch' (no longer
catering to flash.nvim migration)
- README rewritten