<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nvim-config, branch dev</title>
<subtitle>Neovim configuration</subtitle>
<id>http://git.tvcloud.fr/nvim-config/atom/?h=dev</id>
<link rel='self' href='http://git.tvcloud.fr/nvim-config/atom/?h=dev'/>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/'/>
<updated>2026-07-10T14:27:22Z</updated>
<entry>
<title>refactor(todo): run the calendar sync in an interactive terminal</title>
<updated>2026-07-10T14:27:22Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T14:27:22Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=8798cc1be4fd37f977cd4f3ec58ebae8cee82bf9'/>
<id>urn:sha1:8798cc1be4fd37f977cd4f3ec58ebae8cee82bf9</id>
<content type='text'>
Replace the read-only float stream panel with a real terminal so the
sync command can prompt and be driven by hand.
`M.sync` now runs `vim.g.todosyncprg` — a shell command, renamed from
the `vim.g.todosyncfunc` Lua callback — in a terminal split via
`jobstart(..., { term = true })`, closing the split and refreshing on a
clean exit and keeping it visible on failure.

Drop the float panel machinery from the todo entry file and the now
unused `append` streaming API from the float engine.
</content>
</entry>
<entry>
<title>style(todo): rewrap comments to satisfy the comment checker</title>
<updated>2026-07-10T11:32:13Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T11:32:13Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=4e96e1113b6c5eacdd4f344672d4ac1658a2601e'/>
<id>urn:sha1:4e96e1113b6c5eacdd4f344672d4ac1658a2601e</id>
<content type='text'>
Break after every sentence, keep comment lines within 100 columns,
pad the section separators back to exactly 100 columns, and open each
function comment with a one-line summary.
</content>
</entry>
<entry>
<title>fix(todo): finalize the o add only on the exit to normal</title>
<updated>2026-07-10T11:22:30Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T11:22:30Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=f0cea437bd9e6a755503cb933784edd574daea29'/>
<id>urn:sha1:f0cea437bd9e6a755503cb933784edd574daea29</id>
<content type='text'>
The one-shot ModeChanged autocmd that ends an `o` add matched `i*:*`,
which also catches an insert-completion submode change (`i:ic`) -- a
manual `&lt;C-x&gt;` completion during the add would finalize it mid-type.

Narrow the pattern to `i*:n`, the exit to normal reached by both `&lt;Esc&gt;`
and `&lt;C-c&gt;`, so only leaving insert for good finalizes the add.
</content>
</entry>
<entry>
<title>fix(todo): disable autocomplete in the list buffer</title>
<updated>2026-07-10T11:22:07Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T11:22:07Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=7211947810f86b533e07aa8304c5914cab250923'/>
<id>urn:sha1:7211947810f86b533e07aa8304c5914cab250923</id>
<content type='text'>
The built-in autocomplete menu (plugin/50-autocompletion.lua) fires on
the first char typed on an `o` add's fresh line, driving the mode
`i` -&gt; `ic` -&gt; `n`: it pops the omnifunc menu and kicks insert mode out
to normal mid-type, so the add is dropped before a summary can be typed.

Summaries are freeform task titles with nothing to complete, so turn
autocomplete off buffer-locally for the todo filetype.  This also spares
native summary edits (`cc`, `C`, `ciw`, ...) the same menu.
</content>
</entry>
<entry>
<title>refactor(todo): extract cut/copy/paste into its own engine</title>
<updated>2026-07-10T09:18:08Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T09:18:08Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=0f636963f012c09f0cb341e400f6d29e295b5a28'/>
<id>urn:sha1:0f636963f012c09f0cb341e400f6d29e295b5a28</id>
<content type='text'>
Move the `dd`/`yy`/`p` register operations out of the entry file into a
new lua/dotfiles/todo/paste.lua engine: `cut`, `yank`, `paste`, and the
sync-time `delete_lost_cuts`, plus the private subtree-splice helper.

The engine requires the stable todo modules directly and takes the
handful of entry-file callbacks it cannot reach — the cursor task, the
view re-renders, and the notify helpers — through a `setup` call, so the
entry file keeps only the thin keymap wiring.
</content>
</entry>
<entry>
<title>refactor(float): widen float.open to back the sync panel</title>
<updated>2026-07-10T08:29:29Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T08:29:29Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=52e6b5073647df323d7d0adab83808b3f950905a'/>
<id>urn:sha1:52e6b5073647df323d7d0adab83808b3f950905a</id>
<content type='text'>
Fold the todo sync-output panel's hand-rolled float into the float
engine instead of duplicating its window setup.

`float.open` gains an `opts.size` fraction pair for a fixed-size window,
falling back to the content fit, and a new `float.append` does the
modifiable-toggle, append, and scroll-to-bottom that `panel_write` did.

The todo plugin keeps only the sync-specific plumbing — the stream
line-buffering and the `vim.system` call — routing its writes through a
thin `panel_append` adapter onto `float.append`.
</content>
</entry>
<entry>
<title>docs(todo): standalone comment summaries and EmmyLua annotations</title>
<updated>2026-07-10T08:14:07Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T08:14:07Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=d5c3833f010846681f3a142ca01fca3099bc32e0'/>
<id>urn:sha1:d5c3833f010846681f3a142ca01fca3099bc32e0</id>
<content type='text'>
Rework the todo feature's comments and type annotations after an audit.

Every flagged comment now opens with a complete one-line summary — the
only line a closed fold shows — and breaks its body one unit of thought
per line, wrapped at 100.

Annotate the shared shapes as classes and point the bare `table` params
at them: `Todo.Task`, `Todo.Collection` (plus a `Todo.CollectionRef`
base for the write ops that read only `path`), `Todo.View`, `Todo.Fold`.
Add per-module classes and `---@type`s for the local tables: the
changes records, the edit `Todo.Model` and `LEGAL` map, the staging
`Todo.StagedOp` union, the render `Todo.Column`/`Todo.RenderState`, and
the plugin's `Todo.PendingAdd`/`Todo.SyncPanel`.

No behavior change; comments and annotations only.
</content>
</entry>
<entry>
<title>style: edit comment</title>
<updated>2026-07-10T07:18:20Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T07:18:20Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=a2d1d7f27cb555f139d54e37663139e1093d8b30'/>
<id>urn:sha1:a2d1d7f27cb555f139d54e37663139e1093d8b30</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(todo): keep the `o` line's prefix single, un-stick the task below</title>
<updated>2026-07-10T06:23:40Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T06:23:40Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=65a230c55ab6ad5db164a09236f8c7cdb1ce8f0e'/>
<id>urn:sha1:65a230c55ab6ad5db164a09236f8c7cdb1ce8f0e</id>
<content type='text'>
Left gravity on the inline prefixes (fc7b3fc) fixed inserting on a
task's first char, but broke `o`: the blank line an add inserts lands
right at the first task's row, and its now-left-gravity prefix sticks to
the new blank line — the `o` line shows a doubled prefix and the task
below goes bare.

Fold the insert, decorate, and a fix-up into a new `render.open_new_line`
that nudges any inline mark stuck to the fresh row back down onto the
task it belongs to before laying on the blank line's own prefix.  Demote
`decorate_new_line` to the private helper it now is.
</content>
</entry>
<entry>
<title>fix(todo): pin inline prefix with left gravity for insert at col 0</title>
<updated>2026-07-10T05:59:57Z</updated>
<author>
<name>Thomas Vanbesien</name>
<email>tvanbesi@proton.me</email>
</author>
<published>2026-07-10T05:59:57Z</published>
<link rel='alternate' type='text/html' href='http://git.tvcloud.fr/nvim-config/commit/?id=fc7b3fccb1ad2680b3619cd0737a67174b38e075'/>
<id>urn:sha1:fc7b3fccb1ad2680b3619cd0737a67174b38e075</id>
<content type='text'>
The date cells and marker/guide render as an inline virt_text extmark at
column 0.  With Neovim's default right gravity, inserting on the first
summary char (`i` with the cursor on char 1) shoves the mark rightward,
dropping the caret in front of the prefix instead of after it.

Set right_gravity=false on both column-0 inline extmarks — the render
loop and the fresh-`o`-line decorator — so the caret lands after the
prefix, matching insert from any other column.
</content>
</entry>
</feed>
