Commit graph

61 commits

Author SHA1 Message Date
3d1874c6bd
docs(upstream): consolidate #655, #667, #736 into #142
Problem: three upstream requests (#655, #667, #736) all target the
same architectural change — rendering columns as extmark virtual text
instead of inline buffer text.

Solution: create canonical issue #142 and consolidate all three.
2026-03-16 14:52:32 -04:00
Barrett Ruth
20e814af9f
docs(upstream): cite git status extensions for #571 (#141) 2026-03-16 14:47:15 -04:00
Barrett Ruth
e4743a968d
docs(upstream): mark #571 not actionable (#140)
Problem: upstream issue #571 (callback before `highlight_filename`)
was still marked open. The underlying use case is per-directory git
status, which existing extensions already solve.

Solution: mark as not actionable.
2026-03-16 14:43:16 -04:00
Barrett Ruth
bb7e5e9dad
docs(upstream): mark #466 not actionable (#139)
Problem: upstream issue #466 (select into window on right) was still
marked open despite being trivially solvable with a custom action.

Solution: mark as not actionable. Users can write their own action
using `oil.select()` and window layout inspection.
2026-03-16 14:34:06 -04:00
Barrett Ruth
136c11db71
docs(ssh): expand SSH adapter documentation (#525) (#138)
Problem: the `:help oil-adapter-ssh` section was only 10 lines covering
URL format and server requirements. Users had no guidance on how the
adapter works, how to configure `extra_scp_args`, or how to troubleshoot
connection issues.

Solution: expand the section with architecture overview (persistent SSH
connection, `scp` for file transfer, no local mount), configuration
(`extra_scp_args`, `~/.ssh/config`), limitations (no third-party plugin
integration, no cross-adapter moves), and troubleshooting tips.
2026-03-16 14:29:20 -04:00
Barrett Ruth
7372c98e2b
docs(upstream): mark #738 not actionable (#137)
Problem: upstream issue #738 (allow changing mtime/atime via time
column) was still marked open despite requiring disproportionate
implementation effort (reverse strftime parser, new mutator action
type, per-adapter `utime` support) with zero community demand.

Solution: mark as not actionable. Purpose-built tools like `touch -t`
already handle the underlying need.
2026-03-16 14:19:42 -04:00
Barrett Ruth
348bea3895
docs(upstream): mark #479 not actionable (#134)
* docs(upstream): track #254 in canola.nvim#129

Problem: Issue #254 (highlights lost during mid-edit) was listed as
`open`. Investigation shows a decoration provider approach can solve
this despite stevearc's extmark limitation assessment.

Solution: Created barrettruth/canola.nvim#129 with full technical
analysis and proposed `nvim_set_decoration_provider` approach. Mark
#254 as `tracked in #129`.

* docs(upstream): mark #449 not actionable

Problem: Issue #449 (LSP rename failing on TypeScript files) was listed
as `open` despite being a configuration issue.

Solution: Mark as `not actionable`. The LSP rename times out on large
TypeScript projects; increasing `lsp_file_methods.timeout_ms` resolves
it. stevearc confirmed this in the issue thread.

* docs(upstream): mark #416 fixed via cherry-picked #725

Problem: Issue #416 (case-sensitive keymap comparison preventing
remaps) was listed as `open` despite being fixed by the keymap
normalization in PR #725.

Solution: Mark as `fixed — cherry-picked (#725)`. The
`nvim_replace_termcodes` normalization in `config.lua` resolves
case variants like `<c-e>` and `<C-e>` to the same key.

* docs(upstream): mark #479 not actionable

Problem: Issue #479 (harpoon integration recipe) was listed as `open`
despite being a stale documentation request from 2024 with zero
engagement.

Solution: Mark as `not actionable — no demand, stale`.
2026-03-15 12:59:35 -04:00
Barrett Ruth
a0bbc41eea
docs(upstream): mark #416 fixed via cherry-picked #725 (#132)
* docs(upstream): track #254 in canola.nvim#129

Problem: Issue #254 (highlights lost during mid-edit) was listed as
`open`. Investigation shows a decoration provider approach can solve
this despite stevearc's extmark limitation assessment.

Solution: Created barrettruth/canola.nvim#129 with full technical
analysis and proposed `nvim_set_decoration_provider` approach. Mark
#254 as `tracked in #129`.

* docs(upstream): mark #449 not actionable

Problem: Issue #449 (LSP rename failing on TypeScript files) was listed
as `open` despite being a configuration issue.

Solution: Mark as `not actionable`. The LSP rename times out on large
TypeScript projects; increasing `lsp_file_methods.timeout_ms` resolves
it. stevearc confirmed this in the issue thread.

* docs(upstream): mark #416 fixed via cherry-picked #725

Problem: Issue #416 (case-sensitive keymap comparison preventing
remaps) was listed as `open` despite being fixed by the keymap
normalization in PR #725.

Solution: Mark as `fixed — cherry-picked (#725)`. The
`nvim_replace_termcodes` normalization in `config.lua` resolves
case variants like `<c-e>` and `<C-e>` to the same key.
2026-03-15 12:57:44 -04:00
Barrett Ruth
3a7e9f015d
docs(upstream): mark #449 not actionable (#131)
* docs(upstream): track #254 in canola.nvim#129

Problem: Issue #254 (highlights lost during mid-edit) was listed as
`open`. Investigation shows a decoration provider approach can solve
this despite stevearc's extmark limitation assessment.

Solution: Created barrettruth/canola.nvim#129 with full technical
analysis and proposed `nvim_set_decoration_provider` approach. Mark
#254 as `tracked in #129`.

* docs(upstream): mark #449 not actionable

Problem: Issue #449 (LSP rename failing on TypeScript files) was listed
as `open` despite being a configuration issue.

Solution: Mark as `not actionable`. The LSP rename times out on large
TypeScript projects; increasing `lsp_file_methods.timeout_ms` resolves
it. stevearc confirmed this in the issue thread.
2026-03-15 12:54:54 -04:00
Barrett Ruth
75b630776f
docs(upstream): track #254 in canola.nvim#129 (#130)
Problem: Issue #254 (highlights lost during mid-edit) was listed as
`open`. Investigation shows a decoration provider approach can solve
this despite stevearc's extmark limitation assessment.

Solution: Created barrettruth/canola.nvim#129 with full technical
analysis and proposed `nvim_set_decoration_provider` approach. Mark
#254 as `tracked in #129`.
2026-03-15 12:53:36 -04:00
Barrett Ruth
7234be3f5c
docs(upstream): mark #570 not actionable (#128)
* docs(upstream): mark #617 fixed via cherry-picked #618

Problem: Issue #617 (filetype-based icon detection) was still listed as
`open` in the upstream tracker despite being addressed by PR #618.

Solution: Update status to `fixed — cherry-picked (#618)`. Verified
with manual testing that `use_slow_filetype_detection` correctly detects
shebangs in extensionless files.

* docs(upstream): mark #675 as duplicate of #117

Problem: Issue #675 (move file into folder by renaming) was listed as
`open` despite being a duplicate of #117, the primary tracking issue
for move-by-rename (46 upvotes). Upstream already closed #675 as such.

Solution: Update status to `duplicate of #117`.

* docs(upstream): mark #707 as duplicate of #117

Problem: Issue #707 (move file/dir into new dir by renaming) was listed
as `open` despite being identical to #117. The associated draft PR #708
is already tracked separately in the PRs table.

Solution: Update status to `duplicate of #117`.

* docs(upstream): consolidate owner/group issues into #126

Problem: Three upstream issues (#436, #599, #684) all request the same
feature — owner/group columns in the directory listing.

Solution: Create canonical tracking issue barrettruth/canola.nvim#126
and mark all three as `consolidated into #126`.

* docs(upstream): mark #570 not actionable

Problem: Issue #570 (`c0`/`d0` deletes concealed entry ID prefix,
causing rename to be parsed as delete+create) was listed as `open`.

Solution: Mark as `not actionable — blocked on Neovim extmark API`.
Neovim provides no mechanism to protect concealed extmark text from
operator-pending motions. The intended rename workflow uses `cw`/`ciw`
within the constrained cursor region.
2026-03-15 12:46:57 -04:00
Barrett Ruth
a7f1c1480c
docs(upstream): consolidate owner/group issues into #126 (#127)
* docs(upstream): mark #617 fixed via cherry-picked #618

Problem: Issue #617 (filetype-based icon detection) was still listed as
`open` in the upstream tracker despite being addressed by PR #618.

Solution: Update status to `fixed — cherry-picked (#618)`. Verified
with manual testing that `use_slow_filetype_detection` correctly detects
shebangs in extensionless files.

* docs(upstream): mark #675 as duplicate of #117

Problem: Issue #675 (move file into folder by renaming) was listed as
`open` despite being a duplicate of #117, the primary tracking issue
for move-by-rename (46 upvotes). Upstream already closed #675 as such.

Solution: Update status to `duplicate of #117`.

* docs(upstream): mark #707 as duplicate of #117

Problem: Issue #707 (move file/dir into new dir by renaming) was listed
as `open` despite being identical to #117. The associated draft PR #708
is already tracked separately in the PRs table.

Solution: Update status to `duplicate of #117`.

* docs(upstream): consolidate owner/group issues into #126

Problem: Three upstream issues (#436, #599, #684) all request the same
feature — owner/group columns in the directory listing.

Solution: Create canonical tracking issue barrettruth/canola.nvim#126
and mark all three as `consolidated into #126`.
2026-03-15 12:38:55 -04:00
Barrett Ruth
38680670df
docs(upstream): mark #707 as duplicate of #117 (#125)
* docs(upstream): mark #617 fixed via cherry-picked #618

Problem: Issue #617 (filetype-based icon detection) was still listed as
`open` in the upstream tracker despite being addressed by PR #618.

Solution: Update status to `fixed — cherry-picked (#618)`. Verified
with manual testing that `use_slow_filetype_detection` correctly detects
shebangs in extensionless files.

* docs(upstream): mark #675 as duplicate of #117

Problem: Issue #675 (move file into folder by renaming) was listed as
`open` despite being a duplicate of #117, the primary tracking issue
for move-by-rename (46 upvotes). Upstream already closed #675 as such.

Solution: Update status to `duplicate of #117`.

* docs(upstream): mark #707 as duplicate of #117

Problem: Issue #707 (move file/dir into new dir by renaming) was listed
as `open` despite being identical to #117. The associated draft PR #708
is already tracked separately in the PRs table.

Solution: Update status to `duplicate of #117`.
2026-03-15 12:32:46 -04:00
Barrett Ruth
3cec3c798d
docs(upstream): mark #617 fixed via cherry-picked #618 (#123)
Problem: Issue #617 (filetype-based icon detection) was still listed as
`open` in the upstream tracker despite being addressed by PR #618.

Solution: Update status to `fixed — cherry-picked (#618)`. Verified
with manual testing that `use_slow_filetype_detection` correctly detects
shebangs in extensionless files.
2026-03-15 12:29:06 -04:00
Barrett Ruth
75dbb03c34
docs(upstream): mark #675 as duplicate of #117 (#122)
Problem: Issue #675 (move file into folder by renaming) is an exact
duplicate of #117, which is the original request with ~20 comments,
stevearc acknowledgment, and a linked POC PR #708.

Solution: Update `doc/upstream.md` to mark #675 as a duplicate of #117.
2026-03-15 11:03:11 -04:00
Barrett Ruth
e2cd1e66cf
refactor: revert canola namespace to oil and remove vim.g config (#120)
Some checks failed
quality / changes (push) Has been cancelled
test / Test (Neovim nightly) (push) Has been cancelled
test / Test (Neovim stable) (push) Has been cancelled
quality / Lua Format Check (push) Has been cancelled
quality / Lua Lint Check (push) Has been cancelled
quality / Lua Type Check (push) Has been cancelled
quality / Markdown Format Check (push) Has been cancelled
* refactor: revert module namespace from canola back to oil

Problem: the canola rename creates unnecessary friction for users
migrating from stevearc/oil.nvim — every `require('oil')` call and
config reference must change.

Solution: revert all module paths, URL schemes, autocmd groups,
highlight groups, and filetype names back to `oil`. The repo stays
`canola.nvim` for identity; the code is a drop-in replacement.

* refactor: remove `vim.g.oil` declarative config

Problem: the `vim.g.oil` configuration path was added prematurely.
It adds a second config entrypoint before the plugin has stabilized
enough to justify it.

Solution: remove `vim.g.oil` support from `plugin/oil.lua`,
`config.setup()`, docs, and tests. Users configure via
`require("oil").setup({})`.
2026-03-10 22:49:56 -04:00
Barrett Ruth
9298b48c5d
feat(api): add get_current_url() for adapter-agnostic URL access (#119)
Problem: `get_current_dir()` returns nil for non-local adapters (SSH,
S3, trash), leaving users with no public API to get the current
buffer's location.

Solution: add `get_current_url()` which returns the full canola URL
for any adapter, or nil if not in a canola buffer.

Based on: stevearc/oil.nvim#646
2026-03-10 22:21:52 -04:00
Barrett Ruth
9d29243faf
docs(upstream): mark #382 not actionable (#118)
docs(upstream): mark #382 not actionable (#482)

Problem: upstream issue #382 requests relative paths in the window
title, but this is already solved by the `get_win_title` callback
added in stevearc/oil.nvim#482.

Solution: mark the issue as not actionable in the tracker.
2026-03-10 22:21:42 -04:00
Barrett Ruth
c6d41c6d75
docs(upstream): mark #431 as duplicate of #525 (#117)
Problem: upstream issue #431 (SSH adapter documentation) is a
duplicate of #525 which covers the same request with more detail.

Solution: mark as duplicate of #525.
2026-03-09 19:25:31 -04:00
Barrett Ruth
a36c4f7fd2
docs(upstream): mark #332 not actionable (#116)
Problem: upstream issue #332 (buffer not fixed to floating window via
ctrl-o jumplist) is unresolved in our tracker.

Solution: mark as not actionable. Cannot reproduce — ctrl-o in the
float navigates back through oil directories, does not escape to file
buffers. Reported on nvim 0.10.0-dev (2023).
2026-03-09 19:20:12 -04:00
Barrett Ruth
b349d69c6d
docs(upstream): mark #435 fixed (#115)
Problem: upstream issue #435 (LSP semantic token errors on preview)
is unresolved in our tracker.

Solution: mark as fixed. Upstream PR #467 (scratch buffer previews)
was merged Nov 2024 and is already in our codebase.
2026-03-09 19:08:39 -04:00
Barrett Ruth
343f86d761
docs(upstream): revert #623 to open (#114)
Problem: #623 was marked not actionable as a cross-plugin issue, but
oil's nonstandard buffer opening (`bufadd` + manual `buflisted` +
`vim.cmd.buffer()`) may be the root cause.

Solution: revert status to open for further investigation.
2026-03-09 19:05:18 -04:00
Barrett Ruth
1d45ae35be
docs(upstream): mark #200 not actionable (#113)
Problem: upstream issue #200 (highlights not working when opening a
file) is unresolved in our tracker.

Solution: mark as not actionable. Reported on nvim 0.9.4, no recent
reports, cannot reproduce on current versions.
2026-03-09 18:59:39 -04:00
Barrett Ruth
5a8cbf10ff
docs(upstream): mark #637 not actionable (#111)
Problem: upstream issue #637 (inconsistent symlink resolution) is
unresolved in our tracker.

Solution: mark as not actionable. Reporter confirmed the issue does
not reproduce on stable neovim (v0.11.2), only on nightly.
2026-03-09 18:45:22 -04:00
Barrett Ruth
68c4a1b0c7
docs(upstream): mark #636 not actionable (#110)
Problem: upstream issue #636 (Telescope picker opens file in wrong
split) is unresolved in our tracker.

Solution: mark as not actionable. Cannot reproduce with default
Telescope configuration — file correctly opens in the active canola
split. Likely user-specific Telescope config or window picker plugin.
2026-03-09 18:12:30 -04:00
Barrett Ruth
c7b905137c
fix: make parent action a no-op at filesystem root (#109)
Problem: at the filesystem root (`/`), `actions.parent` triggers a
full `vim.cmd.edit()` and async re-render cycle even though the parent
of `/` is `/`.

Solution: in `canola.open()`, return early when `parent_url` equals
the current buffer name.

Closes #108.
2026-03-09 18:05:04 -04:00
Barrett Ruth
39374ee99b
fix(select): redraw screen after buffer switch (#106)
* fix(select): redraw screen after buffer switch

Problem: `select` opens files inside a `vim.schedule_wrap` callback
from `normalize_url`. Scheduled `FileType` autocmds (e.g. treesitter
parsing) queue onto the same batch, blocking the screen update. The
oil buffer stays visible until the heavy work finishes.

Solution: call `vim.cmd.redraw()` after the buffer switch to flush
the screen before any queued scheduled callbacks run. Matches the
behavior of plain `:e`.

* docs(upstream): mark #699 fixed (#106)
2026-03-09 17:40:19 -04:00
Barrett Ruth
03c2ac4bd5
docs(upstream): mark #609 not actionable (#105)
docs(upstream): mark #609 not actionable (#105)

Problem: upstream issue #609 (cursor not placed on file when jumped
via Snacks.nvim picker) is confirmed Windows-only by multiple
reporters. stevearc cannot reproduce on Linux.

Solution: mark as not actionable in the upstream tracker.
2026-03-09 17:17:40 -04:00
Barrett Ruth
c42c087ffb
docs(upstream): revert #736 to open (#104) 2026-03-08 19:12:32 -04:00
Barrett Ruth
7b140a7f40
docs(upstream): mark #736 not actionable (#103) 2026-03-08 19:08:31 -04:00
Barrett Ruth
21d9ef0c1d
docs(upstream): mark #685 not actionable (#102) 2026-03-08 19:08:17 -04:00
Barrett Ruth
f7970e1c1c
docs(upstream): mark #671 not actionable (#101) 2026-03-08 19:08:03 -04:00
Barrett Ruth
514d12a437
docs(upstream): mark #668 not actionable (#100) 2026-03-08 19:07:51 -04:00
Barrett Ruth
379c72a2bc
docs(upstream): mark #665 not actionable (#99) 2026-03-08 19:06:14 -04:00
Barrett Ruth
725dec0185
docs(upstream): mark #294 not actionable (#98) 2026-03-08 19:05:58 -04:00
Barrett Ruth
70364d1667
docs(upstream): mark #276 not actionable (#97) 2026-03-08 19:05:37 -04:00
Barrett Ruth
01a7b891ad
docs(upstream): mark #226 not actionable (#96) 2026-03-08 19:05:21 -04:00
Barrett Ruth
3249bbfaa7
docs(upstream): mark #207 fixed (#94) 2026-03-08 16:03:05 -04:00
Barrett Ruth
425a53d2fa
fix(view): constrain cursor in insert mode (#93)
Problem: `constrain_cursor` only fired on `CursorMoved` and
`ModeChanged`, so arrow key navigation in insert mode could move
the cursor into the concealed ID prefix area.

Solution: add `CursorMovedI` to the autocmd event list. The
`constrain_cursor()` function is already mode-agnostic.
2026-03-08 16:02:09 -04:00
Barrett Ruth
c972bbe9c4
docs(upstream): mark #359 not actionable (#92) 2026-03-08 16:00:31 -04:00
Barrett Ruth
ac48ce20f5
docs(upstream): collapse issue sections into single table (#91)
Problem: issues were split across four separate sections by status,
requiring moves between sections on every status change.

Solution: merge all issues into one `## Issues` table sorted by number
with an inline status column. Update digest script heading and row
format to match.
2026-03-08 15:52:25 -04:00
Barrett Ruth
76e1aacde0
docs(upstream): reorganize tracker into grouped tables (#89)
Problem: the upstream tracker had duplicate entries across tables,
fragile commit hash references, a 108-row flat table mixing all
statuses, and inconsistent formatting.

Solution: merge PR tables into one, split issues by status (fixed,
resolved, open, not actionable), drop all commit hashes in favor of
stable PR numbers, and eliminate duplication so each entry appears
exactly once.
2026-03-08 15:41:37 -04:00
Barrett Ruth
94db584f81
feat: add toggle() API for regular windows (#88)
* feat: add `toggle()` API for regular windows

Problem: `toggle_float()` and `toggle_split()` exist but there is no
`toggle()` for regular windows, forcing users to write their own
filetype-checking wrapper.

Solution: add `M.toggle()` that delegates to `close()` or `open()`
based on whether the current buffer is a canola buffer. Includes
vimdoc entry.

* docs(upstream): mark #621 fixed
2026-03-08 15:33:45 -04:00
Barrett Ruth
fc43684bbd
fix(columns): hide misleading directory sizes (#87)
* fix(columns): hide misleading directory sizes in size column

Problem: the size column shows the filesystem inode size (typically
4096 = 4.1k) for directories, which is misleading — users expect no
size for directories.

Solution: add an early return for directory entries in the size render
function of the files, SSH, and S3 adapters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(upstream): mark #486 fixed

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:31:43 -04:00
Barrett Ruth
91562016c8
docs(upstream): mark #380 not actionable (#86) 2026-03-07 17:05:46 -05:00
Barrett Ruth
4a8d57a269
feat: add max_file_size preview limit and show_hidden_when_empty (#85)
* feat(preview): add `max_file_size` config to skip large file previews

Problem: previewing large files (e.g. 500 MB logs, binaries) loads them
into a buffer and can freeze or OOM Neovim. `disable_preview` only
receives the filename, so users cannot gate on file size.

Solution: add `preview_win.max_file_size` (number, MB, default 10). In
`open_preview`, check `entry.meta.stat.size` and fall back to
`vim.uv.fs_stat` when the cached stat is absent. If the file exceeds
the limit and a preview window is already open, render "File too large
to preview" in it; if not, emit a WARN notify and return early. The
cursor-moved auto-update path only fires when a window already exists,
so no flag threading is needed to distinguish explicit from implicit.

Based on: stevearc/oil.nvim#213

* feat(view): add `show_hidden_when_empty` for hidden-only directories

Problem: with `show_hidden = false`, a directory containing only
dotfiles renders as just `..`, giving no indication that entries exist.

Solution: add `view_options.show_hidden_when_empty` (boolean, default
false). After the main filter loop in `render_buffer`, if the option is
set and `#line_table <= 1`, iterate `entry_list` again and render any
entry not matched by `is_always_hidden`, using `is_hidden = true` so
they render with the dimmed hidden style.

Based on: stevearc/oil.nvim#473

* docs(upstream): fix formatting

* docs(upstream): update #213 and #473 with PR and commit links
2026-03-07 16:52:57 -05:00
Barrett Ruth
a9a06b8f3b
feat: add auto_save_on_select_new_entry config option (#84)
Problem: users who want hands-off behaviour had no way to skip the
`prompt_save_on_select_new_entry` confirmation dialog — enabling the
prompt meant always being asked, with no silent auto-save path.

Solution: add `auto_save_on_select_new_entry` (default `false`) which,
when true, calls `M.save()` and proceeds immediately instead of showing
the confirm dialog. Includes type annotations, vimdoc, and upstream
tracker update for stevearc/oil.nvim#393.
2026-03-07 16:08:34 -05:00
Barrett Ruth
082573d779
feat: add open_split/toggle_split API and upstream triage batch (#83)
* docs(upstream): triage batch — #739 cherry-pick, 10 issue updates

* feat: add `open_split` and `toggle_split` API

Problem: canola had no way to open a browser in a normal split window;
only floating windows were supported via `open_float`/`toggle_float`.
`M.close` also crashed with E444 when called from the last window.

Solution: port stevearc/oil.nvim#728 — add `open_split(dir, opts, cb)`
and `toggle_split(dir, opts, cb)` mirroring the float API. Use
`is_canola_win`/`canola_original_win` window vars (not the upstream
`is_oil_win` names). Wrap `nvim_win_close` in `pcall` with `enew()`
fallback to handle the last-window E444 case.

Based on: stevearc/oil.nvim#728

* docs: add vimdoc for `open_split`/`toggle_split` and macOS trash recipe

Cherry-picked from: stevearc/oil.nvim#739

* docs(upstream): fix prettier formatting
2026-03-07 15:45:23 -05:00
Barrett Ruth
5b74210894
docs(upstream): mark #615 fixed, #650 and #682 resolved (#80) 2026-03-06 16:43:55 -05:00
Barrett Ruth
0f386bb69c
fix: show float title when border is nil (#78)
* fix: show float title when border is nil

Problem: the float title was only shown via the native `nvim_win_set_config`
path, which requires a border to render. The guard `config.float.border ~=
'none'` did not account for `nil`, which is the default — so users with no
explicit `border` config never saw the path title in the floating window.

Solution: require both `~= nil` and `~= 'none'` before using the native
title. In all other cases (border nil, 'none', or nvim < 0.9), fall back to
`util.add_title_to_win`, which renders a child floating window for the title.

Based on: stevearc/oil.nvim#683

* refactor: drop nvim-0.9 version checks in float title logic
2026-03-06 16:29:47 -05:00