aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/nvim/dir.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2026-08-14 09:30:31 -0400
committerGitHub <noreply@github.com>2026-08-14 09:30:31 -0400
commit64a301184ef39a0653c99c8edc1b63cd3fd16236 (patch)
tree8e7fb22aa069c0871d218d2d14c11230de1c98f1 /runtime/lua/nvim/dir.lua
parent485ae7e31a5fe07f753e337f4c6a9b23003c1979 (diff)
downloadrneovim-64a301184ef39a0653c99c8edc1b63cd3fd16236.tar.gz
rneovim-64a301184ef39a0653c99c8edc1b63cd3fd16236.tar.bz2
rneovim-64a301184ef39a0653c99c8edc1b63cd3fd16236.zip
feat(input)!: CmdAtom event #41297
Problem: There is no unified notion of a "user action". Vim processes input by one-char-at-a-time, and mostly throws away any hints it might gather about the user's action, with one exception: it stores the last _edit_ action (the "redo buffer", encoded as unstructured `["x][v][count]body` bytes). Plugins can only observe individual keys (vim.on_key) and high-level effects (TextChanged, CursorMoved). Solution: - Users can subscribe to `CmdAtom` events to handle any user action. - Event is deferred; handlers cannot cancel or interfere with user actions. - Capture `CmdSpec` from the normal/insert/visual subsystems. - typeahead/readahead stay unstructured (`buffheader_T`): they are key streams, not commands. - the redo/record buffers become `StringBuilder`: fewer allocations/copies. - Repurpose the input/redo engine to accept `CmdSpec` objects. "atom": one repeatable unit of user input, as a resolved (post-mapping) keysequence plus structured fields. Only user actions, not `:normal`, API calls, or non-"t" `feedkeys`. BREAKING: dot-repeat of an Insert session, replays the entire session including cursor-moves (:help ins-repeat). BREAKING: dot-repeat of a Visual operation, replays the selection instead of operating on a fixed-size region.
Diffstat (limited to 'runtime/lua/nvim/dir.lua')
0 files changed, 0 insertions, 0 deletions