Skip to content

Releases: prettysmartdev/ane

v0.2.0

21 May 15:24

Choose a tag to compare

Release v0.2.0

Features

  • List action (l): A new exploratory action that discovers symbols in a file. lefd lists all function definitions with line numbers; lefn lists function names; levd lists variable declarations. In the TUI, List opens a scrollable overlay — navigate with arrow keys and press Enter to jump. In exec mode, results print to stdout. The positional acts as a filter: lafn lists functions after the cursor, lffn lists the first function, etc.

  • Word component (w): Text-based word targeting for Line and Buffer scopes, no LSP required. celw changes the word at the cursor; jnlw jumps to the next word; jflw and jllw jump to the first and last word in the line.

  • Definition component (d): Selects the full declaration signature of a scope, excluding the body. For functions: visibility + fn + name + parameters + return type. For variables: keyword + name + type annotation. For structs: visibility + keyword + name + generics. lefd lists all function signatures at a glance; cefd rewrites a signature without touching the body.

  • First (f) and Last (l) positionals: Select the first or last occurrence of a component within a scope. jlfn jumps to the last function; jflw jumps to the first word in the line.

  • Numeric positional (19): A digit in the positional position means "next N forward from the cursor." j5lw jumps forward 5 words; l3fd lists the next 3 function definitions; c5ls changes the next 5 lines. Single digit only, forward direction.

  • On-disk file change detection: When a file open in the TUI changes externally, a hint appears in the status bar. Ctrl-O reloads the file from disk. If the buffer has unsaved edits, the hint warns before overwriting.

  • Live file tree updates: The file tree watches the project directory and updates automatically when files or folders are created, renamed, or deleted on disk — no manual refresh needed.

  • File tree management: Three new keybindings when the file tree is focused:

    • Ctrl-R — rename the file or folder under the cursor (inline edit).
    • Ctrl-D — delete the file or folder (confirmation dialog with children preview for directories).
    • Ctrl-N — create a new file in the current directory context.
  • TUI Top bar info display: The top bar now shows cursor_line:col | N loc | N lines | ~N tokens pinned to the right. LOC counts non-empty lines; the token estimate helps gauge LLM context usage at a glance.

  • ane init agent skill generation (optional): ane init claude (or codex, gemini, opencode, cline, maki, charm) generates a token-efficient skill file that teaches a code agent the chord grammar. The skill file is optional — agents can use ane exec directly — but it helps them pick the right chords.

Improvements

  • Buffer-scope chords no longer require a target argument: yebs, aebs, debs, and other buffer-scope chords now work without a dummy target:1. The buffer is whole-file by definition.

  • Improved skill and tool documentation for Name vs Definition: The embedded skill file and MCP tool description now include a "Component guide" section clarifying when to use n (Name — bare identifier, for renaming) vs d (Definition — full signature, for changing visibility or rewriting declarations).

Fixes

  • Fixed aals(target:N) inserting at end of file instead of immediately after line N.
  • Fixed cifc merging the opening { and closing } delimiter lines with the replacement content on multi-line function bodies.
  • Fixed aebs(value:-) swallowing leading newlines from stdin input.
  • Fixed ane <file> + Ctrl-T crashing with "No such file or directory" when opened with a bare relative filename.
  • Fixed TUI cursor chord handling for edge cases.

v0.1.0

15 May 01:46

Choose a tag to compare

Release v0.1.0

Initial public release of ane — a chord-based terminal code editor built for humans and agents.

Features

  • Chord engine: A 4-part chord system (action, positional, scope, component) for composable, expressive edits. Short form (cifc) and long form (ChangeInsideFunctionContents) are both accepted. The engine runs in three stages: parse, resolve (LSP lookup if needed), patch.

    • Actions: change, delete, replace, yank, append, prepend, insert, jump
    • Positionals: inside, entire, after, before, until, to, outside, next, previous
    • Scopes: line, buffer, function, variable, struct, member, delimiter
    • Components: beginning, contents, end, value, parameters, arguments, name, self
  • LSP engine: Centralized language server lifecycle manager. Detects the project language, installs the server if missing, starts it in the background, and gates LSP-dependent chords until the server is ready. The TUI status bar reflects the current LSP state at all times. Rust (rust-analyzer) supported at launch; Go, TypeScript/JavaScript, and Python added via WI-0008.

  • Exec mode (ane exec): One-shot headless CLI edits for code agents and scripts. Accepts a chord and a file path, writes the file, and outputs a unified diff to stdout. Yank chords output the selected text instead. Supports stdin piping for values (value:-). No LSP startup delay for line/buffer/delimiter chords.

  • TUI: Interactive terminal editor with two modes — Chord mode (default) and Edit mode (Ctrl-E). File tree pane (Ctrl-T), chord history recall (Ctrl-R), save (Ctrl-S), and exit confirmation modal (Ctrl-C). Short-form chords auto-execute when the cursor sits inside a recognized construct.

  • Jump action and delimiter scope: j (jump) moves the cursor to named code constructs without modifying the buffer. The to positional and delimiter scope (d) for bracket/quote/tag targeting are also included.

  • Tree-sitter syntax highlighting: Universal baseline highlighting computed synchronously on file open (<2ms). LSP semantic tokens overlay once the server is ready, adding type-aware colors. Language support: Rust, Go, TypeScript/JavaScript, Python (tree-sitter + LSP), Markdown (tree-sitter only).

  • Application-managed mouse selection: Mouse selection in the TUI excludes line-number gutters from the clipboard. Selection is tracked in logical buffer coordinates and copied via OSC 52. Hold Shift during click-drag to fall back to native terminal selection.

  • Code agent integration:

    • ane init <agent> installs an embedded skill file into the agent's skill directory, teaching it the chord system and exec mode. Supported agents: claude, codex, gemini, opencode, cline, maki, charm.
    • ane::core public crate API exposes ChordEngine, LspEngine, Buffer, all chord types, and tool_definition() (a ready-to-serialize LLM tool definition). The frontends feature flag (on by default) gates CLI/TUI dependencies; library consumers use default-features = false.
  • Multi-language LSP support: Go (gopls), TypeScript/JavaScript (vtsls), and Python (basedpyright) added alongside Rust (rust-analyzer). Each language has a capability matrix entry declaring tree-sitter and LSP support independently.