Commit graph

199 commits

Author SHA1 Message Date
Barrett Ruth
115b1ca981 docs(upstream): cite git status extensions for #571 (#141) 2026-03-16 14:47:15 -04:00
Barrett Ruth
55c8789b2e 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
59d0109573 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
b69ce2d3fc 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
51ba7eee7a 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
047bc0a94d 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
848a771689 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
8a8ca8ef94 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
b72b4b1319 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
19c7ab9cee 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
bb8439dea7 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
cfcedc8890 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
1e290932b3 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
022d2649e1 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
42903b6beb refactor: revert canola namespace to oil and remove vim.g config (#120)
* 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
dedc95687b 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
4efb785e78 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
dcd55b0ee5 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
b0fe66c540 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
f47ddfea57 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
84aeb50d2f 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
e734343b3a 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
8a1039215b 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
f7235021cc 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
6e4faaf0c9 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
fa65479025 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
d2d1639a44 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
dd5b0143f5 docs(upstream): revert #736 to open (#104) 2026-03-08 19:12:32 -04:00
Barrett Ruth
226591c94b docs(upstream): mark #736 not actionable (#103) 2026-03-08 19:08:31 -04:00
Barrett Ruth
9a7dfbad6b docs(upstream): mark #685 not actionable (#102) 2026-03-08 19:08:17 -04:00
Barrett Ruth
5623e819e2 docs(upstream): mark #671 not actionable (#101) 2026-03-08 19:08:03 -04:00
Barrett Ruth
41cc97713b docs(upstream): mark #668 not actionable (#100) 2026-03-08 19:07:51 -04:00
Barrett Ruth
f0c35e14ed docs(upstream): mark #665 not actionable (#99) 2026-03-08 19:06:14 -04:00
Barrett Ruth
9bbdc90a58 docs(upstream): mark #294 not actionable (#98) 2026-03-08 19:05:58 -04:00
Barrett Ruth
245b0c9c1c docs(upstream): mark #276 not actionable (#97) 2026-03-08 19:05:37 -04:00
Barrett Ruth
f2a05bd414 docs(upstream): mark #226 not actionable (#96) 2026-03-08 19:05:21 -04:00
Barrett Ruth
afed6eed64 docs(upstream): mark #207 fixed (#94) 2026-03-08 16:03:05 -04:00
Barrett Ruth
b52da65047 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
d9bf262cb7 docs(upstream): mark #359 not actionable (#92) 2026-03-08 16:00:31 -04:00
Barrett Ruth
a90d6df62f 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
46f2307895 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
7e55decfeb 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
76033e9b30 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.


* docs(upstream): mark #486 fixed
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
Barrett Ruth
ba49f76e91
feat: add skip_confirm_for_delete option (#77)
feat: add \`skip_confirm_for_delete\` option

Problem: there was no way to suppress the confirmation popup when the
only pending operations are deletes. \`skip_confirm_for_simple_edits\`
explicitly excludes deletes, so users who delete frequently had no opt-out.

Solution: add \`skip_confirm_for_delete = false\` config option. When true,
\`confirmation.show()\` skips the popup if every pending action is a delete.

Based on: stevearc/oil.nvim#392
2026-03-06 16:29:12 -05:00