From 0d3088f57ec94b6149f948208162e083b8ef3742 Mon Sep 17 00:00:00 2001 From: Barrett Ruth <62671086+barrettruth@users.noreply.github.com> Date: Thu, 5 Mar 2026 14:50:10 -0500 Subject: [PATCH] refactor: rename oil to canola across entire codebase (#70) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: the codebase still used the upstream \`oil\` naming everywhere — URL schemes, the \`:Oil\` command, highlight groups, user events, module paths, filetypes, buffer/window variables, LuaCATS type annotations, vimdoc help tags, syntax groups, and internal identifiers. Solution: mechanical rename of every reference. URL schemes now use \`canola://\` (plus \`canola-ssh://\`, \`canola-s3://\`, \`canola-sss://\`, \`canola-trash://\`, \`canola-test://\`). The \`:Canola\` command replaces \`:Oil\`. All highlight groups, user events, augroups, namespaces, filetypes, require paths, type annotations, help tags, and identifiers follow suit. The \`upstream\` remote to \`stevearc/oil.nvim\` has been removed and the \`vim.g.oil\` deprecation shim dropped. --- .github/ISSUE_TEMPLATE/bug_report.yaml | 4 +- README.md | 17 +- doc/canola.txt | 456 +++++++-------- flake.nix | 2 +- lua/{oil => canola}/actions.lua | 128 ++-- lua/{oil => canola}/adapters/files.lua | 44 +- .../adapters/files/permissions.lua | 0 lua/{oil => canola}/adapters/s3.lua | 50 +- lua/{oil => canola}/adapters/s3/s3fs.lua | 16 +- lua/{oil => canola}/adapters/ssh.lua | 60 +- .../adapters/ssh/connection.lua | 26 +- lua/{oil => canola}/adapters/ssh/sshfs.lua | 26 +- lua/{oil => canola}/adapters/test.lua | 18 +- lua/canola/adapters/trash.lua | 9 + .../adapters/trash/freedesktop.lua | 54 +- lua/{oil => canola}/adapters/trash/mac.lua | 22 +- .../adapters/trash/windows.lua | 58 +- .../trash/windows/powershell-connection.lua | 10 +- .../trash/windows/powershell-trash.lua | 10 +- lua/{oil => canola}/cache.lua | 28 +- lua/{oil => canola}/clipboard.lua | 36 +- lua/{oil => canola}/columns.lua | 62 +- lua/{oil => canola}/config.lua | 190 +++--- lua/{oil => canola}/constants.lua | 4 +- lua/{oil => canola}/fs.lua | 10 +- lua/{oil => canola}/git.lua | 4 +- lua/{oil => canola}/init.lua | 551 +++++++++--------- lua/{oil => canola}/keymap_util.lua | 12 +- lua/{oil => canola}/layout.lua | 10 +- lua/{oil => canola}/loading.lua | 2 +- lua/{oil => canola}/log.lua | 8 +- lua/{oil => canola}/lsp/helpers.lua | 10 +- lua/{oil => canola}/lsp/workspace.lua | 2 +- lua/{oil => canola}/mutator/confirmation.lua | 23 +- lua/{oil => canola}/mutator/init.lua | 94 +-- lua/{oil => canola}/mutator/parser.lua | 46 +- lua/{oil => canola}/mutator/progress.lua | 20 +- lua/{oil => canola}/mutator/trie.lua | 20 +- lua/{oil => canola}/pathutil.lua | 0 lua/{oil => canola}/ringbuf.lua | 2 +- lua/{oil => canola}/shell.lua | 0 lua/{oil => canola}/util.lua | 110 ++-- lua/{oil => canola}/view.lua | 154 ++--- lua/oil/adapters/trash.lua | 9 - .../extensions/{oil.lua => canola.lua} | 4 +- perf/bootstrap.lua | 26 +- plugin/canola.lua | 3 + plugin/oil.lua | 3 - spec/altbuf_spec.lua | 96 +-- spec/close_spec.lua | 32 +- spec/config_spec.lua | 16 +- spec/files_spec.lua | 44 +- spec/manual_progress.lua | 4 +- spec/move_rename_spec.lua | 40 +- spec/mutator_spec.lua | 132 ++--- spec/parser_spec.lua | 42 +- spec/path_spec.lua | 2 +- spec/preview_spec.lua | 12 +- spec/regression_spec.lua | 58 +- spec/select_spec.lua | 40 +- spec/test_util.lua | 40 +- spec/tmpdir.lua | 4 +- spec/trash_spec.lua | 6 +- spec/url_spec.lua | 27 +- spec/util_spec.lua | 2 +- spec/win_options_spec.lua | 32 +- syntax/canola.vim | 7 + syntax/canola_preview.vim | 15 + syntax/oil.vim | 7 - syntax/oil_preview.vim | 15 - 70 files changed, 1571 insertions(+), 1555 deletions(-) rename lua/{oil => canola}/actions.lua (80%) rename lua/{oil => canola}/adapters/files.lua (94%) rename lua/{oil => canola}/adapters/files/permissions.lua (100%) rename lua/{oil => canola}/adapters/s3.lua (91%) rename lua/{oil => canola}/adapters/s3/s3fs.lua (91%) rename lua/{oil => canola}/adapters/ssh.lua (91%) rename lua/{oil => canola}/adapters/ssh/connection.lua (94%) rename lua/{oil => canola}/adapters/ssh/sshfs.lua (92%) rename lua/{oil => canola}/adapters/test.lua (83%) create mode 100644 lua/canola/adapters/trash.lua rename lua/{oil => canola}/adapters/trash/freedesktop.lua (95%) rename lua/{oil => canola}/adapters/trash/mac.lua (93%) rename lua/{oil => canola}/adapters/trash/windows.lua (90%) rename lua/{oil => canola}/adapters/trash/windows/powershell-connection.lua (94%) rename lua/{oil => canola}/adapters/trash/windows/powershell-trash.lua (88%) rename lua/{oil => canola}/cache.lua (91%) rename lua/{oil => canola}/clipboard.lua (93%) rename lua/{oil => canola}/columns.lua (82%) rename lua/{oil => canola}/config.lua (70%) rename lua/{oil => canola}/constants.lua (63%) rename lua/{oil => canola}/fs.lua (97%) rename lua/{oil => canola}/git.lua (97%) rename lua/{oil => canola}/init.lua (70%) rename lua/{oil => canola}/keymap_util.lua (94%) rename lua/{oil => canola}/layout.lua (95%) rename lua/{oil => canola}/loading.lua (98%) rename lua/{oil => canola}/log.lua (92%) rename lua/{oil => canola}/lsp/helpers.lua (95%) rename lua/{oil => canola}/lsp/workspace.lua (99%) rename lua/{oil => canola}/mutator/confirmation.lua (91%) rename lua/{oil => canola}/mutator/init.lua (88%) rename lua/{oil => canola}/mutator/parser.lua (90%) rename lua/{oil => canola}/mutator/progress.lua (92%) rename lua/{oil => canola}/mutator/trie.lua (91%) rename lua/{oil => canola}/pathutil.lua (100%) rename lua/{oil => canola}/ringbuf.lua (96%) rename lua/{oil => canola}/shell.lua (100%) rename lua/{oil => canola}/util.lua (91%) rename lua/{oil => canola}/view.lua (88%) delete mode 100644 lua/oil/adapters/trash.lua rename lua/resession/extensions/{oil.lua => canola.lua} (76%) create mode 100644 plugin/canola.lua delete mode 100644 plugin/oil.lua create mode 100644 syntax/canola.vim create mode 100644 syntax/canola_preview.vim delete mode 100644 syntax/oil.vim delete mode 100644 syntax/oil_preview.vim diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 8784517..61ca0f8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -50,7 +50,7 @@ body: - type: textarea attributes: label: 'Health check' - description: 'Output of `:checkhealth oil`' + description: 'Output of `:checkhealth canola`' render: text - type: textarea @@ -71,7 +71,7 @@ body: { 'barrettruth/canola.nvim', init = function() - vim.g.oil = {} + vim.g.canola = {} end, }, }, diff --git a/README.md b/README.md index 74e8a90..b736772 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,9 @@ luarocks install canola.nvim **Q: How do I migrate from `stevearc/oil.nvim`?** -Change the plugin source and replace `setup()` with `vim.g.oil` in `init`. The -configuration table is identical — only the entry point changes. For example, -with [lazy.nvim](https://github.com/folke/lazy.nvim): +Change the plugin source and replace `setup()` with `vim.g.canola` in `init`. +The configuration table is identical — only the entry point changes. For +example, with [lazy.nvim](https://github.com/folke/lazy.nvim): Before (`stevearc/oil.nvim`): @@ -57,7 +57,7 @@ Before (`stevearc/oil.nvim`): 'stevearc/oil.nvim', opts = { ... }, config = function(_, opts) - require('oil').setup(opts) + require('canola').setup(opts) end, } ``` @@ -68,16 +68,16 @@ After (`barrettruth/canola.nvim`): { 'barrettruth/canola.nvim', init = function() - vim.g.oil = { ... } + vim.g.canola = { ... } end, } ``` `init` runs before the plugin loads; `config` runs after. oil.nvim reads -`vim.g.oil` at load time, so `init` is the correct hook. Do not use `config`, +`vim.g.canola` at load time, so `init` is the correct hook. Do not use `config`, `opts`, or `lazy` — oil.nvim loads itself when you open a directory. -**Q: Why "oil"?** +**Q: Why "canola"?** From the [vim-vinegar](https://github.com/tpope/vim-vinegar) README, a quote by Drew Neil: @@ -100,4 +100,5 @@ Drew Neil: ## Acknowledgements -- [stevearc](https://github.com/stevearc): [oil.nvim](https://github.com/stevearc/oil.nvim) +- [stevearc](https://github.com/stevearc): + [oil.nvim](https://github.com/stevearc/oil.nvim) diff --git a/doc/canola.txt b/doc/canola.txt index b861fdb..2553b66 100644 --- a/doc/canola.txt +++ b/doc/canola.txt @@ -1,38 +1,38 @@ *canola.txt* -*Canola* *canola* *canola.nvim* *Oil* *oil* *oil.nvim* +*Canola* *canola* *canola.nvim* -------------------------------------------------------------------------------- -CONTENTS *oil-contents* +CONTENTS *canola-contents* - 1. Introduction |oil-introduction| - 2. Requirements |oil-requirements| - 3. Config |oil-config| - 4. Options |oil-options| - 5. Api |oil-api| - 6. Columns |oil-columns| - 7. Actions |oil-actions| - 8. Highlights |oil-highlights| - 9. Adapters |oil-adapters| - 10. Recipes |oil-recipes| - 11. Events |oil-events| - 12. Trash |oil-trash| + 1. Introduction |canola-introduction| + 2. Requirements |canola-requirements| + 3. Config |canola-config| + 4. Options |canola-options| + 5. Api |canola-api| + 6. Columns |canola-columns| + 7. Actions |canola-actions| + 8. Highlights |canola-highlights| + 9. Adapters |canola-adapters| + 10. Recipes |canola-recipes| + 11. Events |canola-events| + 12. Trash |canola-trash| -------------------------------------------------------------------------------- -INTRODUCTION *oil-introduction* +INTRODUCTION *canola-introduction* -oil.nvim is a file explorer for Neovim in the style of vim-vinegar. It lets +canola.nvim is a file explorer for Neovim in the style of vim-vinegar. It lets you edit your filesystem like a normal buffer: create files and directories by typing new lines, delete them by removing lines, rename or move them by -changing the text. When you save the buffer, oil diffs it against the original +changing the text. When you save the buffer, canola diffs it against the original listing and performs the corresponding filesystem operations. -Open a directory with `nvim .`, `:edit `, or `:Oil `. Use `` +Open a directory with `nvim .`, `:edit `, or `:Canola `. Use `` to open a file or descend into a directory, and `-` to go up. Treat the listing like any other buffer — edit freely, then `:w` to apply changes. -To open oil in a floating window, use `:Oil --float `. +To open canola in a floating window, use `:Canola --float `. To mimic vim-vinegar's parent-directory keymap: >lua - vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory" }) + vim.keymap.set("n", "-", "Canola", { desc = "Open parent directory" }) < File operations work across adapters. You can copy files between your local @@ -40,54 +40,54 @@ machine and a remote server over SSH, or between local directories and S3 buckets, using the same buffer-editing workflow. -------------------------------------------------------------------------------- -REQUIREMENTS *oil-requirements* +REQUIREMENTS *canola-requirements* - Neovim 0.8+ - (optional) mini.icons or nvim-web-devicons for file icons -------------------------------------------------------------------------------- -CONFIG *oil-config* +CONFIG *canola-config* -Oil can be configured in two ways: +Canola can be configured in two ways: 1. The traditional `setup()` call: >lua - require("oil").setup({ + require("canola").setup({ -- your opts here }) < -2. Declarative configuration via `vim.g.oil`, which does not require calling +2. Declarative configuration via `vim.g.canola`, which does not require calling `setup()`: >lua - vim.g.oil = { + vim.g.canola = { -- your opts here } < - When `vim.g.oil` is set, oil initializes automatically during plugin + When `vim.g.canola` is set, canola initializes automatically during plugin loading. If `setup()` is called with explicit opts, those take precedence - over `vim.g.oil`. + over `vim.g.canola`. The full list of options with their defaults: >lua - require("oil").setup({ - -- Oil will take over directory buffers (e.g. `vim .` or `:e src/`) + require("canola").setup({ + -- Canola will take over directory buffers (e.g. `vim .` or `:e src/`) -- Set to false if you want some other plugin (e.g. netrw) to open when you edit directories. default_file_explorer = true, -- Id is automatically added at the beginning, and name at the end - -- See :help oil-columns + -- See :help canola-columns columns = { "icon", -- "permissions", -- "size", -- "mtime", }, - -- Buffer-local options to use for oil buffers + -- Buffer-local options to use for canola buffers buf_options = { buflisted = false, bufhidden = "hide", }, - -- Window-local options to use for oil buffers + -- Window-local options to use for canola buffers win_options = { wrap = false, signcolumn = "no", @@ -98,16 +98,16 @@ The full list of options with their defaults: conceallevel = 3, concealcursor = "nvic", }, - -- Send deleted files to the trash instead of permanently deleting them (:help oil-trash) + -- Send deleted files to the trash instead of permanently deleting them (:help canola-trash) delete_to_trash = false, - -- Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits) + -- Skip the confirmation popup for simple operations (:help canola.skip_confirm_for_simple_edits) skip_confirm_for_simple_edits = false, -- Selecting a new/moved/renamed file or directory will prompt you to save changes first -- (:help prompt_save_on_select_new_entry) prompt_save_on_select_new_entry = true, - -- Oil will automatically delete hidden buffers after this delay + -- Canola will automatically delete hidden buffers after this delay -- You can set the delay to false to disable cleanup entirely - -- Note that the cleanup process only starts when none of the oil buffers are currently displayed + -- Note that the cleanup process only starts when none of the canola buffers are currently displayed cleanup_delay_ms = 2000, lsp_file_methods = { -- Enable or disable LSP file operations @@ -118,17 +118,17 @@ The full list of options with their defaults: -- Set to "unmodified" to only save unmodified buffers autosave_changes = false, }, - -- Constrain the cursor to the editable parts of the oil buffer + -- Constrain the cursor to the editable parts of the canola buffer -- Set to `false` to disable, or "name" to keep it on the file names constrain_cursor = "editable", - -- Set to true to watch the filesystem for changes and reload oil + -- Set to true to watch the filesystem for changes and reload canola watch_for_changes = false, - -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap + -- Keymaps in canola buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap -- options with a `callback` (e.g. { callback = function() ... end, desc = "", mode = "n" }) -- Additionally, if it is a string that matches "actions.", - -- it will use the mapping at require("oil.actions"). + -- it will use the mapping at require("canola.actions"). -- Set to `false` to remove a keymap - -- See :help oil-actions for a list of all available actions + -- See :help canola-actions for a list of all available actions keymaps = { ["g?"] = { "actions.show_help", mode = "n" }, [""] = "actions.select", @@ -168,7 +168,7 @@ The full list of options with their defaults: case_insensitive = false, sort = { -- sort order can be "asc" or "desc" - -- see :help oil-columns to see which columns are sortable + -- see :help canola-columns to see which columns are sortable { "type", "asc" }, { "name", "asc" }, }, @@ -196,7 +196,7 @@ The full list of options with their defaults: return false end, }, - -- Configuration for the floating window in oil.open_float + -- Configuration for the floating window in canola.open_float float = { -- Padding around the floating window padding = 2, @@ -207,7 +207,7 @@ The full list of options with their defaults: win_options = { winblend = 0, }, - -- optionally override the oil buffers window title with custom function: fun(winid: integer): string + -- optionally override the canola buffers window title with custom function: fun(winid: integer): string get_win_title = nil, -- preview_split: Split direction: "auto", "left", "right", "above", "below". preview_split = "auto", @@ -279,12 +279,12 @@ The full list of options with their defaults: < -------------------------------------------------------------------------------- -OPTIONS *oil-options* +OPTIONS *canola-options* -skip_confirm_for_simple_edits *oil.skip_confirm_for_simple_edits* +skip_confirm_for_simple_edits *canola.skip_confirm_for_simple_edits* type: `boolean` default: `false` - Before performing filesystem operations, Oil displays a confirmation popup to ensure + Before performing filesystem operations, Canola displays a confirmation popup to ensure that all operations are intentional. When this option is `true`, the popup will be skipped if the operations: * contain no deletes @@ -292,7 +292,7 @@ skip_confirm_for_simple_edits *oil.skip_confirm_for_simple_edit * contain at most one copy or move * contain at most five creates -prompt_save_on_select_new_entry *oil.prompt_save_on_select_new_entry* +prompt_save_on_select_new_entry *canola.prompt_save_on_select_new_entry* type: `boolean` default: `true` There are two cases where this option is relevant: 1. You copy a file to a new location, then you select it and make edits before @@ -301,126 +301,126 @@ prompt_save_on_select_new_entry *oil.prompt_save_on_select_new_entr changes before saving. In case 1, when you edit the file you are actually editing the original file because - oil has not yet moved/copied it to its new location. This means that the original + canola has not yet moved/copied it to its new location. This means that the original file will, perhaps unexpectedly, also be changed by any edits you make. Case 2 is similar; when you edit the directory you are again actually editing the original location of the directory. If you add new files, those files will be created in both the original location and the copied directory. - When this option is `true`, Oil will prompt you to save before entering a file or - directory that is pending within oil, but does not exist on disk. + When this option is `true`, Canola will prompt you to save before entering a file or + directory that is pending within canola, but does not exist on disk. -------------------------------------------------------------------------------- -API *oil-api* +API *canola-api* -get_entry_on_line({bufnr}, {lnum}): nil|oil.Entry *oil.get_entry_on_line* +get_entry_on_line({bufnr}, {lnum}): nil|canola.Entry *canola.get_entry_on_line* Get the entry on a specific line (1-indexed) Parameters: {bufnr} `integer` {lnum} `integer` -get_cursor_entry(): nil|oil.Entry *oil.get_cursor_entry* +get_cursor_entry(): nil|canola.Entry *canola.get_cursor_entry* Get the entry currently under the cursor -discard_all_changes() *oil.discard_all_changes* - Discard all changes made to oil buffers +discard_all_changes() *canola.discard_all_changes* + Discard all changes made to canola buffers -set_columns({cols}) *oil.set_columns* - Change the display columns for oil +set_columns({cols}) *canola.set_columns* + Change the display columns for canola Parameters: - {cols} `oil.ColumnSpec[]` + {cols} `canola.ColumnSpec[]` -set_sort({sort}) *oil.set_sort* - Change the sort order for oil +set_sort({sort}) *canola.set_sort* + Change the sort order for canola Parameters: - {sort} `oil.SortSpec[]` List of columns plus direction. See :help oil- + {sort} `canola.SortSpec[]` List of columns plus direction. See :help canola- columns to see which ones are sortable. Examples: >lua - require("oil").set_sort({ { "type", "asc" }, { "size", "desc" } }) + require("canola").set_sort({ { "type", "asc" }, { "size", "desc" } }) < -set_is_hidden_file({is_hidden_file}) *oil.set_is_hidden_file* - Change how oil determines if the file is hidden +set_is_hidden_file({is_hidden_file}) *canola.set_is_hidden_file* + Change how canola determines if the file is hidden Parameters: - {is_hidden_file} `fun(filename: string, bufnr: integer, entry: oil.Entry): boolean` + {is_hidden_file} `fun(filename: string, bufnr: integer, entry: canola.Entry): boolean` Return true if the file/dir should be hidden -toggle_hidden() *oil.toggle_hidden* +toggle_hidden() *canola.toggle_hidden* Toggle hidden files and directories -get_current_dir({bufnr}): nil|string *oil.get_current_dir* +get_current_dir({bufnr}): nil|string *canola.get_current_dir* Get the current directory Parameters: {bufnr} `nil|integer` -open_float({dir}, {opts}, {cb}) *oil.open_float* - Open oil browser in a floating window +open_float({dir}, {opts}, {cb}) *canola.open_float* + Open canola browser in a floating window Parameters: {dir} `nil|string` When nil, open the parent of the current buffer, or the cwd if current buffer is not a file - {opts} `nil|oil.OpenOpts` - {preview} `nil|oil.OpenPreviewOpts` When present, open the preview - window after opening oil + {opts} `nil|canola.OpenOpts` + {preview} `nil|canola.OpenPreviewOpts` When present, open the preview + window after opening canola {vertical} `nil|boolean` Open the buffer in a vertical split {horizontal} `nil|boolean` Open the buffer in a horizontal split {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` S plit modifier - {cb} `nil|fun()` Called after the oil buffer is ready + {cb} `nil|fun()` Called after the canola buffer is ready -toggle_float({dir}, {opts}, {cb}) *oil.toggle_float* - Open oil browser in a floating window, or close it if open +toggle_float({dir}, {opts}, {cb}) *canola.toggle_float* + Open canola browser in a floating window, or close it if open Parameters: {dir} `nil|string` When nil, open the parent of the current buffer, or the cwd if current buffer is not a file - {opts} `nil|oil.OpenOpts` - {preview} `nil|oil.OpenPreviewOpts` When present, open the preview - window after opening oil + {opts} `nil|canola.OpenOpts` + {preview} `nil|canola.OpenPreviewOpts` When present, open the preview + window after opening canola {vertical} `nil|boolean` Open the buffer in a vertical split {horizontal} `nil|boolean` Open the buffer in a horizontal split {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` S plit modifier - {cb} `nil|fun()` Called after the oil buffer is ready + {cb} `nil|fun()` Called after the canola buffer is ready -open({dir}, {opts}, {cb}) *oil.open* - Open oil browser for a directory +open({dir}, {opts}, {cb}) *canola.open* + Open canola browser for a directory Parameters: {dir} `nil|string` When nil, open the parent of the current buffer, or the cwd if current buffer is not a file - {opts} `nil|oil.OpenOpts` - {preview} `nil|oil.OpenPreviewOpts` When present, open the preview - window after opening oil + {opts} `nil|canola.OpenOpts` + {preview} `nil|canola.OpenPreviewOpts` When present, open the preview + window after opening canola {vertical} `nil|boolean` Open the buffer in a vertical split {horizontal} `nil|boolean` Open the buffer in a horizontal split {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` S plit modifier - {cb} `nil|fun()` Called after the oil buffer is ready + {cb} `nil|fun()` Called after the canola buffer is ready -close({opts}) *oil.close* - Restore the buffer that was present when oil was opened +close({opts}) *canola.close* + Restore the buffer that was present when canola was opened Parameters: - {opts} `nil|oil.CloseOpts` - {exit_if_last_buf} `nil|boolean` Exit vim if this oil buffer is the + {opts} `nil|canola.CloseOpts` + {exit_if_last_buf} `nil|boolean` Exit vim if this canola buffer is the last open buffer -open_preview({opts}, {callback}) *oil.open_preview* +open_preview({opts}, {callback}) *canola.open_preview* Preview the entry under the cursor in a split Parameters: - {opts} `nil|oil.OpenPreviewOpts` + {opts} `nil|canola.OpenPreviewOpts` {vertical} `nil|boolean` Open the buffer in a vertical split {horizontal} `nil|boolean` Open the buffer in a horizontal split {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` Split @@ -428,17 +428,17 @@ open_preview({opts}, {callback}) *oil.open_previe {callback} `nil|fun(err: nil|string)` Called once the preview window has been opened -select({opts}, {callback}) *oil.select* +select({opts}, {callback}) *canola.select* Select the entry under the cursor Parameters: - {opts} `nil|oil.SelectOpts` + {opts} `nil|canola.SelectOpts` {vertical} `nil|boolean` Open the buffer in a vertical split {horizontal} `nil|boolean` Open the buffer in a horizontal split {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` Split modifier {tab} `nil|boolean` Open the buffer in a new tab - {close} `nil|boolean` Close the original oil buffer once + {close} `nil|boolean` Close the original canola buffer once selection is made {handle_buffer_callback} `nil|fun(buf_id: integer)` If defined, all other buffer related options here would be ignored. This @@ -447,7 +447,7 @@ select({opts}, {callback}) *oil.selec {callback} `nil|fun(err: nil|string)` Called once all entries have been opened -save({opts}, {cb}) *oil.save* +save({opts}, {cb}) *canola.save* Save all changes Parameters: @@ -459,14 +459,14 @@ save({opts}, {cb}) *oil.sav Note: If you provide your own callback function, there will be no notification for errors. -setup({opts}) *oil.setup* - Initialize oil +setup({opts}) *canola.setup* + Initialize canola Parameters: - {opts} `oil.setupOpts|nil` + {opts} `canola.setupOpts|nil` -------------------------------------------------------------------------------- -COLUMNS *oil-columns* +COLUMNS *canola-columns* Columns can be specified as a string to use default arguments (e.g. `"icon"`), or as a table to pass parameters (e.g. `{"size", highlight = "Special"}`) @@ -563,23 +563,23 @@ birthtime *column-birthtim {format} `string` Format string (see :help strftime) -------------------------------------------------------------------------------- -ACTIONS *oil-actions* +ACTIONS *canola-actions* -The `keymaps` option in `oil.setup` allow you to create mappings using all the same parameters as |vim.keymap.set|. +The `keymaps` option in `canola.setup` allow you to create mappings using all the same parameters as |vim.keymap.set|. >lua keymaps = { -- Mappings can be a string ["~"] = "edit $HOME", -- Mappings can be a function ["gd"] = function() - require("oil").set_columns({ "icon", "permissions", "size", "mtime" }) + require("canola").set_columns({ "icon", "permissions", "size", "mtime" }) end, -- You can pass additional opts to vim.keymap.set by using -- a table with the mapping as the first element. ["ff"] = { function() require("telescope.builtin").find_files({ - cwd = require("oil").get_current_dir() + cwd = require("canola").get_current_dir() }) end, mode = "n", @@ -603,10 +603,10 @@ The `keymaps` option in `oil.setup` allow you to create mappings using all the s Below are the actions that can be used in the `keymaps` section of config options. You can refer to them as strings (e.g. "actions.") or you can use the functions directly with -`require("oil.actions").action_name.callback()` +`require("canola.actions").action_name.callback()` cd *actions.cd* - :cd to the current oil directory + :cd to the current canola directory Parameters: {scope} `nil|"tab"|"win"` Scope of the directory change (e.g. use |:tcd| @@ -617,20 +617,20 @@ change_sort *actions.change_sor Change the sort order Parameters: - {sort} `oil.SortSpec[]` List of columns plus direction (see - |oil.set_sort|) instead of interactive selection + {sort} `canola.SortSpec[]` List of columns plus direction (see + |canola.set_sort|) instead of interactive selection close *actions.close* - Close oil and restore original buffer + Close canola and restore original buffer Parameters: - {exit_if_last_buf} `boolean` Exit vim if oil is closed as the last buffer + {exit_if_last_buf} `boolean` Exit vim if canola is closed as the last buffer close_float *actions.close_float* - Close oil if the window is floating, otherwise do nothing + Close canola if the window is floating, otherwise do nothing Parameters: - {exit_if_last_buf} `boolean` Exit vim if oil is closed as the last buffer + {exit_if_last_buf} `boolean` Exit vim if canola is closed as the last buffer copy_to_system_clipboard *actions.copy_to_system_clipboard* Copy the entry under the cursor to the system clipboard @@ -644,7 +644,7 @@ open_cmdline *actions.open_cmdlin {shorten_path} `boolean` Use relative paths when possible open_cwd *actions.open_cwd* - Open oil in Neovim's current working directory + Open canola in Neovim's current working directory open_external *actions.open_external* Open the entry under the cursor in an external program @@ -656,7 +656,7 @@ parent *actions.paren Navigate to the parent path paste_from_system_clipboard *actions.paste_from_system_clipboard* - Paste the system clipboard into the current oil directory + Paste the system clipboard into the current canola directory Parameters: {delete_original} `boolean` Delete the original file after copying @@ -694,7 +694,7 @@ select *actions.selec Open the entry under the cursor Parameters: - {close} `boolean` Close the original oil buffer once selection is + {close} `boolean` Close the original canola buffer once selection is made {horizontal} `boolean` Open the buffer in a horizontal split {split} `"aboveleft"|"belowright"|"topleft"|"botright"` Split @@ -703,7 +703,7 @@ select *actions.selec {vertical} `boolean` Open the buffer in a vertical split send_to_qflist *actions.send_to_qflist* - Sends files in the current oil directory to the quickfix list, replacing the + Sends files in the current canola directory to the quickfix list, replacing the previous entries. Parameters: @@ -731,109 +731,109 @@ yank_entry *actions.yank_entr mods argument -------------------------------------------------------------------------------- -HIGHLIGHTS *oil-highlights* +HIGHLIGHTS *canola-highlights* -OilEmpty *hl-OilEmpty* +CanolaEmpty *hl-CanolaEmpty* Empty column values -OilHidden *hl-OilHidden* - Hidden entry in an oil buffer +CanolaHidden *hl-CanolaHidden* + Hidden entry in an canola buffer -OilDir *hl-OilDir* - Directory names in an oil buffer +CanolaDir *hl-CanolaDir* + Directory names in an canola buffer -OilDirHidden *hl-OilDirHidden* - Hidden directory names in an oil buffer +CanolaDirHidden *hl-CanolaDirHidden* + Hidden directory names in an canola buffer -OilDirIcon *hl-OilDirIcon* +CanolaDirIcon *hl-CanolaDirIcon* Icon for directories -OilFileIcon *hl-OilFileIcon* +CanolaFileIcon *hl-CanolaFileIcon* Icon for files -OilSocket *hl-OilSocket* - Socket files in an oil buffer +CanolaSocket *hl-CanolaSocket* + Socket files in an canola buffer -OilSocketHidden *hl-OilSocketHidden* - Hidden socket files in an oil buffer +CanolaSocketHidden *hl-CanolaSocketHidden* + Hidden socket files in an canola buffer -OilLink *hl-OilLink* - Soft links in an oil buffer +CanolaLink *hl-CanolaLink* + Soft links in an canola buffer -OilOrphanLink *hl-OilOrphanLink* - Orphaned soft links in an oil buffer +CanolaOrphanLink *hl-CanolaOrphanLink* + Orphaned soft links in an canola buffer -OilLinkHidden *hl-OilLinkHidden* - Hidden soft links in an oil buffer +CanolaLinkHidden *hl-CanolaLinkHidden* + Hidden soft links in an canola buffer -OilOrphanLinkHidden *hl-OilOrphanLinkHidden* - Hidden orphaned soft links in an oil buffer +CanolaOrphanLinkHidden *hl-CanolaOrphanLinkHidden* + Hidden orphaned soft links in an canola buffer -OilLinkTarget *hl-OilLinkTarget* +CanolaLinkTarget *hl-CanolaLinkTarget* The target of a soft link -OilOrphanLinkTarget *hl-OilOrphanLinkTarget* +CanolaOrphanLinkTarget *hl-CanolaOrphanLinkTarget* The target of an orphaned soft link -OilLinkTargetHidden *hl-OilLinkTargetHidden* +CanolaLinkTargetHidden *hl-CanolaLinkTargetHidden* The target of a hidden soft link -OilOrphanLinkTargetHidden *hl-OilOrphanLinkTargetHidden* +CanolaOrphanLinkTargetHidden *hl-CanolaOrphanLinkTargetHidden* The target of an hidden orphaned soft link -OilFile *hl-OilFile* - Normal files in an oil buffer +CanolaFile *hl-CanolaFile* + Normal files in an canola buffer -OilFileHidden *hl-OilFileHidden* - Hidden normal files in an oil buffer +CanolaFileHidden *hl-CanolaFileHidden* + Hidden normal files in an canola buffer -OilExecutable *hl-OilExecutable* - Executable files in an oil buffer +CanolaExecutable *hl-CanolaExecutable* + Executable files in an canola buffer -OilExecutableHidden *hl-OilExecutableHidden* - Hidden executable files in an oil buffer +CanolaExecutableHidden *hl-CanolaExecutableHidden* + Hidden executable files in an canola buffer -OilCreate *hl-OilCreate* - Create action in the oil preview window +CanolaCreate *hl-CanolaCreate* + Create action in the canola preview window -OilDelete *hl-OilDelete* - Delete action in the oil preview window +CanolaDelete *hl-CanolaDelete* + Delete action in the canola preview window -OilMove *hl-OilMove* - Move action in the oil preview window +CanolaMove *hl-CanolaMove* + Move action in the canola preview window -OilCopy *hl-OilCopy* - Copy action in the oil preview window +CanolaCopy *hl-CanolaCopy* + Copy action in the canola preview window -OilChange *hl-OilChange* - Change action in the oil preview window +CanolaChange *hl-CanolaChange* + Change action in the canola preview window -OilRestore *hl-OilRestore* - Restore (from the trash) action in the oil preview window +CanolaRestore *hl-CanolaRestore* + Restore (from the trash) action in the canola preview window -OilPurge *hl-OilPurge* - Purge (Permanently delete a file from trash) action in the oil preview +CanolaPurge *hl-CanolaPurge* + Purge (Permanently delete a file from trash) action in the canola preview window -OilTrash *hl-OilTrash* - Trash (delete a file to trash) action in the oil preview window +CanolaTrash *hl-CanolaTrash* + Trash (delete a file to trash) action in the canola preview window -OilTrashSourcePath *hl-OilTrashSourcePath* +CanolaTrashSourcePath *hl-CanolaTrashSourcePath* Virtual text that shows the original path of file in the trash -------------------------------------------------------------------------------- -ADAPTERS *oil-adapters* +ADAPTERS *canola-adapters* -Oil performs all filesystem interaction through an adapter abstraction. This -means oil can view and modify files in places beyond the local filesystem, as +Canola performs all filesystem interaction through an adapter abstraction. This +means canola can view and modify files in places beyond the local filesystem, as long as the destination has an adapter implementation. File operations work across adapters — you can copy files between local and remote with the same buffer-editing workflow. -SSH *oil-adapter-ssh* +SSH *canola-adapter-ssh* Browse files over SSH, much like netrw. Open a buffer with: > - nvim oil-ssh://[username@]hostname[:port]/[path] + nvim canola-ssh://[username@]hostname[:port]/[path] < This is the same URL format that netrw uses. @@ -841,36 +841,36 @@ SSH *oil-adapter-ss server to have `/bin/sh` as well as standard unix commands (`ls`, `rm`, `mv`, `mkdir`, `chmod`, `cp`, `touch`, `ln`, `echo`). -S3 *oil-adapter-s3* +S3 *canola-adapter-s3* Browse files stored in AWS S3. Make sure `aws` is configured correctly, then open a buffer with: > - nvim oil-s3://[bucket]/[path] + nvim canola-s3://[bucket]/[path] < Older versions of Neovim (0.11 and earlier) don't support numbers in the - URL scheme, so use `oil-sss` instead of `oil-s3`. + URL scheme, so use `canola-sss` instead of `canola-s3`. -Trash *oil-adapter-trash* +Trash *canola-adapter-trash* - See |oil-trash| for details on the built-in trash adapter. + See |canola-trash| for details on the built-in trash adapter. -------------------------------------------------------------------------------- -RECIPES *oil-recipes* +RECIPES *canola-recipes* Toggle file detail view ~ - *oil-recipe-toggle-detail-view* + *canola-recipe-toggle-detail-view* >lua local detail = false - require("oil").setup({ + require("canola").setup({ keymaps = { ["gd"] = { desc = "Toggle file detail view", callback = function() detail = not detail if detail then - require("oil").set_columns({ "icon", "permissions", "size", "mtime" }) + require("canola").set_columns({ "icon", "permissions", "size", "mtime" }) else - require("oil").set_columns({ "icon" }) + require("canola").set_columns({ "icon" }) end end, }, @@ -879,11 +879,11 @@ Toggle file detail view ~ < Show CWD in the winbar ~ - *oil-recipe-cwd-winbar* + *canola-recipe-cwd-winbar* >lua - function _G.get_oil_winbar() + function _G.get_canola_winbar() local bufnr = vim.api.nvim_win_get_buf(vim.g.statusline_winid) - local dir = require("oil").get_current_dir(bufnr) + local dir = require("canola").get_current_dir(bufnr) if dir then return vim.fn.fnamemodify(dir, ":~") else @@ -891,15 +891,15 @@ Show CWD in the winbar ~ end end - require("oil").setup({ + require("canola").setup({ win_options = { - winbar = "%!v:lua.get_oil_winbar()", + winbar = "%!v:lua.get_canola_winbar()", }, }) < Hide gitignored files and show git tracked hidden files ~ - *oil-recipe-git-is-hidden* + *canola-recipe-git-is-hidden* >lua local function parse_output(proc) local result = proc:wait() @@ -939,17 +939,17 @@ Hide gitignored files and show git tracked hidden files ~ end local git_status = new_git_status() - local refresh = require("oil.actions").refresh + local refresh = require("canola.actions").refresh local orig_refresh = refresh.callback refresh.callback = function(...) git_status = new_git_status() orig_refresh(...) end - require("oil").setup({ + require("canola").setup({ view_options = { is_hidden_file = function(name, bufnr) - local dir = require("oil").get_current_dir(bufnr) + local dir = require("canola").get_current_dir(bufnr) local is_dotfile = vim.startswith(name, ".") and name ~= ".." if not dir then return is_dotfile @@ -964,21 +964,21 @@ Hide gitignored files and show git tracked hidden files ~ }) < -Open Telescope file finder in the current oil directory ~ - *oil-recipe-telescope* +Open Telescope file finder in the current canola directory ~ + *canola-recipe-telescope* When using `get_current_dir()` in a keymap that also opens another plugin's UI (like Telescope), capture the directory in a local variable before the call that changes the buffer context. >lua - require("oil").setup({ + require("canola").setup({ keymaps = { ["ff"] = { desc = "Find files in the current directory", callback = function() - local dir = require("oil").get_current_dir() + local dir = require("canola").get_current_dir() if not dir then - vim.notify("Could not get oil directory", vim.log.levels.WARN) + vim.notify("Could not get canola directory", vim.log.levels.WARN) return end require("telescope.builtin").find_files({ cwd = dir }) @@ -987,9 +987,9 @@ that changes the buffer context. ["fg"] = { desc = "Live grep in the current directory", callback = function() - local dir = require("oil").get_current_dir() + local dir = require("canola").get_current_dir() if not dir then - vim.notify("Could not get oil directory", vim.log.levels.WARN) + vim.notify("Could not get canola directory", vim.log.levels.WARN) return end require("telescope.builtin").live_grep({ cwd = dir }) @@ -1003,18 +1003,18 @@ If you need the directory after an operation that might change the current buffer, pass the buffer number explicitly: >lua local bufnr = vim.api.nvim_get_current_buf() -- ... some operation that changes the current buffer ... - local dir = require("oil").get_current_dir(bufnr) + local dir = require("canola").get_current_dir(bufnr) < Add custom column for file extension ~ - *oil-recipe-extension-column* + *canola-recipe-extension-column* >lua - local oil_cfg = require "oil.config" - local oil_constant = require "oil.constants" - local oil_column = require "oil.columns" + local canola_cfg = require "canola.config" + local canola_constant = require "canola.constants" + local canola_column = require "canola.columns" - local FIELD_TYPE = oil_constant.FIELD_TYPE - local FIELD_NAME = oil_constant.FIELD_NAME + local FIELD_TYPE = canola_constant.FIELD_TYPE + local FIELD_NAME = canola_constant.FIELD_NAME local function adjust_number(int) return string.format("%03d%s", #int, int) @@ -1024,7 +1024,7 @@ Add custom column for file extension ~ return vim.fn.fnamemodify(output, ":e") end - oil_column.register("extension", { + canola_column.register("extension", { render = function(entry, _) local field_type = entry[FIELD_TYPE] local name = entry[FIELD_NAME] @@ -1044,8 +1044,8 @@ Add custom column for file extension ~ end, create_sort_value_factory = function(num_entries) if - oil_cfg.view_options.natural_order == false - or (oil_cfg.view_options.natural_order == "fast" and num_entries > 5000) + canola_cfg.view_options.natural_order == false + or (canola_cfg.view_options.natural_order == "fast" and num_entries > 5000) then return function(entry) return format(entry[FIELD_NAME]:lower()) @@ -1066,7 +1066,7 @@ Add custom column for file extension ~ end, }) - require("oil").setup({ + require("canola").setup({ columns = { "size", "extension", @@ -1083,15 +1083,15 @@ Add custom column for file extension ~ < Disable dimming of hidden files ~ - *oil-recipe-no-hidden-dimming* + *canola-recipe-no-hidden-dimming* -By default, hidden files (toggled with `g.`) are dimmed via the `OilHidden` +By default, hidden files (toggled with `g.`) are dimmed via the `CanolaHidden` highlight group, which links to `Comment`. To make hidden files look identical to their visible counterparts, relink each hidden group to its non-hidden variant after calling `setup()`: >lua - for _, hl in ipairs(require("oil")._get_highlights()) do - local base = hl.name:match("^(Oil.+)Hidden$") + for _, hl in ipairs(require("canola")._get_highlights()) do + local base = hl.name:match("^(Canola.+)Hidden$") if base then vim.api.nvim_set_hl(0, hl.name, { link = base }) end @@ -1099,62 +1099,62 @@ variant after calling `setup()`: < -------------------------------------------------------------------------------- -EVENTS *oil-events* +EVENTS *canola-events* -Oil emits the following |User| autocmd events. Listen for them with +Canola emits the following |User| autocmd events. Listen for them with |nvim_create_autocmd|: >lua vim.api.nvim_create_autocmd("User", { - pattern = "OilEnter", + pattern = "CanolaEnter", callback = function(args) - vim.print("Entered oil buffer: " .. args.data.buf) + vim.print("Entered canola buffer: " .. args.data.buf) end, }) < -OilEnter *OilEnter* - Fired once per oil buffer, after the initial directory listing has been +CanolaEnter *CanolaEnter* + Fired once per canola buffer, after the initial directory listing has been rendered and the buffer is ready. The `args.data.buf` field contains the buffer number. Use this event for one-time buffer setup such as setting keymaps or window options. -OilReadPost *OilReadPost* +CanolaReadPost *CanolaReadPost* Fired after every successful buffer render, including the initial render and all subsequent re-renders (e.g. after directory changes, refreshes, or mutations). The `args.data.buf` field contains the buffer number. Use this event for logic that must run each time the directory listing updates. -OilMutationComplete *OilMutationComplete* +CanolaMutationComplete *CanolaMutationComplete* Fired after all pending mutations (create, delete, rename, move, copy) have been executed and the affected buffers have been re-rendered. No additional data fields. Use this event for post-mutation side effects such as refreshing external status indicators. -------------------------------------------------------------------------------- -TRASH *oil-trash* +TRASH *canola-trash* -Oil has built-in support for using the system trash. When +Canola has built-in support for using the system trash. When `delete_to_trash = true`, any deleted files will be sent to the trash instead of being permanently deleted. You can browse the trash for a directory using the `toggle_trash` action (bound to `g\` by default). You can view all files -in the trash with `:Oil --trash /`. +in the trash with `:Canola --trash /`. To restore files, simply move them from the trash to the desired destination, the same as any other file operation. If you delete files from the trash they will be permanently deleted (purged). Linux: - Oil supports the FreeDesktop trash specification. + Canola supports the FreeDesktop trash specification. https://specifications.freedesktop.org/trash/1.0/ All features should work. Mac: - Oil has limited support for MacOS due to the proprietary nature of the + Canola has limited support for MacOS due to the proprietary nature of the implementation. The trash bin can only be viewed as a single dir (instead of being able to see files that were trashed from a directory). Windows: - Oil supports the Windows Recycle Bin. All features should work. + Canola supports the Windows Recycle Bin. All features should work. ================================================================================ vim:tw=80:ts=2:ft=help:norl:syntax=help: diff --git a/flake.nix b/flake.nix index fb5faf0..76ef696 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "oil.nvim — Neovim file explorer: edit your filesystem like a buffer"; + description = "canola.nvim — refined fork of oil.nvim"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; diff --git a/lua/oil/actions.lua b/lua/canola/actions.lua similarity index 80% rename from lua/oil/actions.lua rename to lua/canola/actions.lua index 143a454..b3d7942 100644 --- a/lua/oil/actions.lua +++ b/lua/canola/actions.lua @@ -1,12 +1,12 @@ -local oil = require('oil') -local util = require('oil.util') +local canola = require('canola') +local util = require('canola.util') local M = {} M.show_help = { callback = function() - local config = require('oil.config') - require('oil.keymap_util').show_help(config.keymaps) + local config = require('canola.config') + require('canola.keymap_util').show_help(config.keymaps) end, desc = 'Show default keymaps', } @@ -17,7 +17,7 @@ M.select = { opts = opts or {} local callback = opts.callback opts.callback = nil - oil.select(opts, callback) + canola.select(opts, callback) end, parameters = { vertical = { @@ -38,7 +38,7 @@ M.select = { }, close = { type = 'boolean', - desc = 'Close the original oil buffer once selection is made', + desc = 'Close the original canola buffer once selection is made', }, }, } @@ -47,7 +47,7 @@ M.select_vsplit = { desc = 'Open the entry under the cursor in a vertical split', deprecated = true, callback = function() - oil.select({ vertical = true }) + canola.select({ vertical = true }) end, } @@ -55,7 +55,7 @@ M.select_split = { desc = 'Open the entry under the cursor in a horizontal split', deprecated = true, callback = function() - oil.select({ horizontal = true }) + canola.select({ horizontal = true }) end, } @@ -63,7 +63,7 @@ M.select_tab = { desc = 'Open the entry under the cursor in a new tab', deprecated = true, callback = function() - oil.select({ tab = true }) + canola.select({ tab = true }) end, } @@ -84,25 +84,25 @@ M.preview = { }, }, callback = function(opts) - local entry = oil.get_cursor_entry() + local entry = canola.get_cursor_entry() if not entry then vim.notify('Could not find entry under cursor', vim.log.levels.ERROR) return end local winid = util.get_preview_win() if winid then - local cur_id = vim.w[winid].oil_entry_id + local cur_id = vim.w[winid].canola_entry_id if entry.id == cur_id then vim.api.nvim_win_close(winid, true) if util.is_floating_win() then - local layout = require('oil.layout') + local layout = require('canola.layout') local win_opts = layout.get_fullscreen_win_opts() vim.api.nvim_win_set_config(0, win_opts) end return end end - oil.open_preview(opts) + canola.open_preview(opts) end, } @@ -162,35 +162,35 @@ M.preview_scroll_right = { M.parent = { desc = 'Navigate to the parent path', - callback = oil.open, + callback = canola.open, } M.close = { - desc = 'Close oil and restore original buffer', + desc = 'Close canola and restore original buffer', callback = function(opts) opts = opts or {} - oil.close(opts) + canola.close(opts) end, parameters = { exit_if_last_buf = { type = 'boolean', - desc = 'Exit vim if oil is closed as the last buffer', + desc = 'Exit vim if canola is closed as the last buffer', }, }, } M.close_float = { - desc = 'Close oil if the window is floating, otherwise do nothing', + desc = 'Close canola if the window is floating, otherwise do nothing', callback = function(opts) - if vim.w.is_oil_win then + if vim.w.is_canola_win then opts = opts or {} - oil.close(opts) + canola.close(opts) end end, parameters = { exit_if_last_buf = { type = 'boolean', - desc = 'Exit vim if oil is closed as the last buffer', + desc = 'Exit vim if canola is closed as the last buffer', }, }, } @@ -198,7 +198,7 @@ M.close_float = { ---@param cmd string ---@param silent? boolean local function cd(cmd, silent) - local dir = oil.get_current_dir() + local dir = canola.get_current_dir() if dir then vim.cmd({ cmd = cmd, args = { dir } }) if not silent then @@ -210,7 +210,7 @@ local function cd(cmd, silent) end M.cd = { - desc = ':cd to the current oil directory', + desc = ':cd to the current canola directory', callback = function(opts) opts = opts or {} local cmd = 'cd' @@ -234,7 +234,7 @@ M.cd = { } M.tcd = { - desc = ':tcd to the current oil directory', + desc = ':tcd to the current canola directory', deprecated = true, callback = function() cd('tcd') @@ -242,31 +242,31 @@ M.tcd = { } M.open_cwd = { - desc = "Open oil in Neovim's current working directory", + desc = "Open canola in Neovim's current working directory", callback = function() - oil.open(vim.fn.getcwd()) + canola.open(vim.fn.getcwd()) end, } M.toggle_hidden = { desc = 'Toggle hidden files and directories', callback = function() - require('oil.view').toggle_hidden() + require('canola.view').toggle_hidden() end, } M.open_terminal = { desc = 'Open a terminal in the current directory', callback = function() - local config = require('oil.config') + local config = require('canola.config') local bufname = vim.api.nvim_buf_get_name(0) local adapter = config.get_adapter_by_scheme(bufname) if not adapter then return end if adapter.name == 'files' then - local dir = oil.get_current_dir() - assert(dir, 'Oil buffer with files adapter must have current directory') + local dir = canola.get_current_dir() + assert(dir, 'Canola buffer with files adapter must have current directory') local bufnr = vim.api.nvim_create_buf(false, true) vim.api.nvim_set_current_buf(bufnr) if vim.fn.has('nvim-0.11') == 1 then @@ -278,8 +278,8 @@ M.open_terminal = { elseif adapter.name == 'ssh' then local bufnr = vim.api.nvim_create_buf(false, true) vim.api.nvim_set_current_buf(bufnr) - local url = require('oil.adapters.ssh').parse_url(bufname) - local cmd = require('oil.adapters.ssh.connection').create_ssh_command(url) + local url = require('canola.adapters.ssh').parse_url(bufname) + local cmd = require('canola.adapters.ssh.connection').create_ssh_command(url) local term_id if vim.fn.has('nvim-0.11') == 1 then term_id = vim.fn.jobstart(cmd, { term = true }) @@ -324,8 +324,8 @@ end M.open_external = { desc = 'Open the entry under the cursor in an external program', callback = function() - local entry = oil.get_cursor_entry() - local dir = oil.get_current_dir() + local entry = canola.get_cursor_entry() + local dir = canola.get_current_dir() if not entry or not dir then return end @@ -381,9 +381,9 @@ M.open_cmdline = { opts = vim.tbl_deep_extend('keep', opts or {}, { shorten_path = true, }) - local config = require('oil.config') - local fs = require('oil.fs') - local entry = oil.get_cursor_entry() + local config = require('canola.config') + local fs = require('canola.fs') + local entry = canola.get_cursor_entry() if not entry then return end @@ -421,8 +421,8 @@ M.yank_entry = { desc = 'Yank the filepath of the entry under the cursor to a register', callback = function(opts) opts = opts or {} - local entry = oil.get_cursor_entry() - local dir = oil.get_current_dir() + local entry = canola.get_cursor_entry() + local dir = canola.get_current_dir() if not entry or not dir then return end @@ -448,8 +448,8 @@ M.copy_entry_path = { desc = 'Yank the filepath of the entry under the cursor to a register', deprecated = true, callback = function() - local entry = oil.get_cursor_entry() - local dir = oil.get_current_dir() + local entry = canola.get_cursor_entry() + local dir = canola.get_current_dir() if not entry or not dir then return end @@ -461,7 +461,7 @@ M.copy_entry_filename = { desc = 'Yank the filename of the entry under the cursor to a register', deprecated = true, callback = function() - local entry = oil.get_cursor_entry() + local entry = canola.get_cursor_entry() if not entry then return end @@ -472,14 +472,14 @@ M.copy_entry_filename = { M.copy_to_system_clipboard = { desc = 'Copy the entry under the cursor to the system clipboard', callback = function() - require('oil.clipboard').copy_to_system_clipboard() + require('canola.clipboard').copy_to_system_clipboard() end, } M.paste_from_system_clipboard = { - desc = 'Paste the system clipboard into the current oil directory', + desc = 'Paste the system clipboard into the current canola directory', callback = function(opts) - require('oil.clipboard').paste_from_system_clipboard(opts and opts.delete_original) + require('canola.clipboard').paste_from_system_clipboard(opts and opts.delete_original) end, parameters = { delete_original = { @@ -493,8 +493,8 @@ M.open_cmdline_dir = { desc = 'Open vim cmdline with current directory as an argument', deprecated = true, callback = function() - local fs = require('oil.fs') - local dir = oil.get_current_dir() + local fs = require('canola.fs') + local dir = canola.get_current_dir() if dir then open_cmdline_with_path(fs.shorten_path(dir)) end @@ -507,24 +507,24 @@ M.change_sort = { opts = opts or {} if opts.sort then - oil.set_sort(opts.sort) + canola.set_sort(opts.sort) return end local sort_cols = { 'name', 'size', 'atime', 'mtime', 'ctime', 'birthtime' } - vim.ui.select(sort_cols, { prompt = 'Sort by', kind = 'oil_sort_col' }, function(col) + vim.ui.select(sort_cols, { prompt = 'Sort by', kind = 'canola_sort_col' }, function(col) if not col then return end vim.ui.select( { 'ascending', 'descending' }, - { prompt = 'Sort order', kind = 'oil_sort_order' }, + { prompt = 'Sort order', kind = 'canola_sort_order' }, function(order) if not order then return end order = order == 'ascending' and 'asc' or 'desc' - oil.set_sort({ + canola.set_sort({ { 'type', 'asc' }, { col, order }, }) @@ -534,8 +534,8 @@ M.change_sort = { end, parameters = { sort = { - type = 'oil.SortSpec[]', - desc = 'List of columns plus direction (see |oil.set_sort|) instead of interactive selection', + type = 'canola.SortSpec[]', + desc = 'List of columns plus direction (see |canola.set_sort|) instead of interactive selection', }, }, } @@ -543,19 +543,19 @@ M.change_sort = { M.toggle_trash = { desc = 'Jump to and from the trash for the current directory', callback = function() - local fs = require('oil.fs') + local fs = require('canola.fs') local bufname = vim.api.nvim_buf_get_name(0) local scheme, path = util.parse_url(bufname) local bufnr = vim.api.nvim_get_current_buf() local url - if scheme == 'oil://' then - url = 'oil-trash://' .. path - elseif scheme == 'oil-trash://' then - url = 'oil://' .. path + if scheme == 'canola://' then + url = 'canola-trash://' .. path + elseif scheme == 'canola-trash://' then + url = 'canola://' .. path -- The non-linux trash implementations don't support per-directory trash, -- so jump back to the stored source buffer. if not fs.is_linux then - local src_bufnr = vim.b.oil_trash_toggle_src + local src_bufnr = vim.b.canola_trash_toggle_src if src_bufnr and vim.api.nvim_buf_is_valid(src_bufnr) then url = vim.api.nvim_buf_get_name(src_bufnr) end @@ -565,12 +565,12 @@ M.toggle_trash = { return end vim.cmd.edit({ args = { url } }) - vim.b.oil_trash_toggle_src = bufnr + vim.b.canola_trash_toggle_src = bufnr end, } M.send_to_qflist = { - desc = 'Sends files in the current oil directory to the quickfix list, replacing the previous entries.', + desc = 'Sends files in the current canola directory to the quickfix list, replacing the previous entries.', callback = function(opts) opts = vim.tbl_deep_extend('keep', opts or {}, { target = 'qflist', @@ -600,7 +600,7 @@ M.send_to_qflist = { } M.add_to_qflist = { - desc = 'Adds files in the current oil directory to the quickfix list, keeping the previous entries.', + desc = 'Adds files in the current canola directory to the quickfix list, keeping the previous entries.', deprecated = true, callback = function() util.send_to_quickfix({ @@ -611,7 +611,7 @@ M.add_to_qflist = { } M.send_to_loclist = { - desc = 'Sends files in the current oil directory to the location list, replacing the previous entries.', + desc = 'Sends files in the current canola directory to the location list, replacing the previous entries.', deprecated = true, callback = function() util.send_to_quickfix({ @@ -622,7 +622,7 @@ M.send_to_loclist = { } M.add_to_loclist = { - desc = 'Adds files in the current oil directory to the location list, keeping the previous entries.', + desc = 'Adds files in the current canola directory to the location list, keeping the previous entries.', deprecated = true, callback = function() util.send_to_quickfix({ diff --git a/lua/oil/adapters/files.lua b/lua/canola/adapters/files.lua similarity index 94% rename from lua/oil/adapters/files.lua rename to lua/canola/adapters/files.lua index e6331ba..3bb8a89 100644 --- a/lua/oil/adapters/files.lua +++ b/lua/canola/adapters/files.lua @@ -1,12 +1,12 @@ -local cache = require('oil.cache') -local columns = require('oil.columns') -local config = require('oil.config') -local constants = require('oil.constants') -local fs = require('oil.fs') -local git = require('oil.git') -local log = require('oil.log') -local permissions = require('oil.adapters.files.permissions') -local util = require('oil.util') +local cache = require('canola.cache') +local columns = require('canola.columns') +local config = require('canola.config') +local constants = require('canola.constants') +local fs = require('canola.fs') +local git = require('canola.git') +local log = require('canola.log') +local permissions = require('canola.adapters.files.permissions') +local util = require('canola.util') local uv = vim.uv or vim.loop local M = {} @@ -35,11 +35,11 @@ local function read_link_data(path, cb) ) end ----@class (exact) oil.FilesAdapter: oil.Adapter ----@field to_short_os_path fun(path: string, entry_type: nil|oil.EntryType): string +---@class (exact) canola.FilesAdapter: canola.Adapter +---@field to_short_os_path fun(path: string, entry_type: nil|canola.EntryType): string ---@param path string ----@param entry_type nil|oil.EntryType +---@param entry_type nil|canola.EntryType ---@return string M.to_short_os_path = function(path, entry_type) local shortpath = fs.shorten_path(fs.posix_to_os_path(path)) @@ -226,7 +226,7 @@ local function columns_require_stat(column_defs) end ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return file_columns[name] end @@ -284,7 +284,7 @@ M.normalize_url = function(url, callback) end ---@param url string ----@param entry oil.Entry +---@param entry canola.Entry ---@param cb fun(path: nil|string) M.get_entry_path = function(url, entry, cb) if entry.id then @@ -303,7 +303,7 @@ M.get_entry_path = function(url, entry, cb) end ---@param parent_dir string ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry ---@param require_stat boolean ---@param cb fun(err?: string) local function fetch_entry_metadata(parent_dir, entry, require_stat, cb) @@ -315,7 +315,7 @@ local function fetch_entry_metadata(parent_dir, entry, require_stat, cb) end -- Sometimes fs_readdir entries don't have a type, so we need to stat them. - -- See https://github.com/stevearc/oil.nvim/issues/543 + -- See https://github.com/stevearc/canola.nvim/issues/543 if not require_stat and not entry[FIELD_TYPE] then require_stat = true end @@ -364,7 +364,7 @@ local function fetch_entry_metadata(parent_dir, entry, require_stat, cb) end -- On windows, sometimes the entry type from fs_readdir is "link" but the actual type is not. --- See https://github.com/stevearc/oil.nvim/issues/535 +-- See https://github.com/stevearc/canola.nvim/issues/535 if fs.is_windows then local old_fetch_metadata = fetch_entry_metadata fetch_entry_metadata = function(parent_dir, entry, require_stat, cb) @@ -393,7 +393,7 @@ end ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) local function list_windows_drives(url, column_defs, cb) local _, path = util.parse_url(url) assert(path) @@ -440,7 +440,7 @@ end ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, cb) local _, path = util.parse_url(url) assert(path) @@ -518,7 +518,7 @@ M.is_modifiable = function(bufnr) return uv.fs_access(dir, 'W') == true end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'create' then @@ -560,7 +560,7 @@ M.render_action = function(action) end end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) if action.type == 'create' then @@ -619,7 +619,7 @@ M.perform_action = function(action, cb) end if config.delete_to_trash then - require('oil.adapters.trash').delete_to_trash(path, cb) + require('canola.adapters.trash').delete_to_trash(path, cb) else fs.recursive_delete(action.entry_type, path, cb) end diff --git a/lua/oil/adapters/files/permissions.lua b/lua/canola/adapters/files/permissions.lua similarity index 100% rename from lua/oil/adapters/files/permissions.lua rename to lua/canola/adapters/files/permissions.lua diff --git a/lua/oil/adapters/s3.lua b/lua/canola/adapters/s3.lua similarity index 91% rename from lua/oil/adapters/s3.lua rename to lua/canola/adapters/s3.lua index 81557c7..bc3e614 100644 --- a/lua/oil/adapters/s3.lua +++ b/lua/canola/adapters/s3.lua @@ -1,37 +1,37 @@ -local config = require('oil.config') -local constants = require('oil.constants') -local files = require('oil.adapters.files') -local fs = require('oil.fs') -local loading = require('oil.loading') -local pathutil = require('oil.pathutil') -local s3fs = require('oil.adapters.s3.s3fs') -local util = require('oil.util') +local config = require('canola.config') +local constants = require('canola.constants') +local files = require('canola.adapters.files') +local fs = require('canola.fs') +local loading = require('canola.loading') +local pathutil = require('canola.pathutil') +local s3fs = require('canola.adapters.s3.s3fs') +local util = require('canola.util') local M = {} local FIELD_META = constants.FIELD_META ----@class (exact) oil.s3Url +---@class (exact) canola.s3Url ---@field scheme string ---@field bucket nil|string ---@field path nil|string ----@param oil_url string ----@return oil.s3Url -M.parse_url = function(oil_url) - local scheme, url = util.parse_url(oil_url) - assert(scheme and url, string.format("Malformed input url '%s'", oil_url)) +---@param canola_url string +---@return canola.s3Url +M.parse_url = function(canola_url) + local scheme, url = util.parse_url(canola_url) + assert(scheme and url, string.format("Malformed input url '%s'", canola_url)) local ret = { scheme = scheme } local bucket, path = url:match('^([^/]+)/?(.*)$') ret.bucket = bucket ret.path = path ~= '' and path or nil if not ret.bucket and ret.path then - error(string.format('Parsing error for s3 url: %s', oil_url)) + error(string.format('Parsing error for s3 url: %s', canola_url)) end - ---@cast ret oil.s3Url + ---@cast ret canola.s3Url return ret end ----@param url oil.s3Url +---@param url canola.s3Url ---@return string local function url_to_str(url) local pieces = { url.scheme } @@ -47,7 +47,7 @@ local function url_to_str(url) return table.concat(pieces, '') end ----@param url oil.s3Url +---@param url canola.s3Url ---@param is_folder boolean ---@return string local function url_to_s3(url, is_folder) @@ -67,7 +67,7 @@ local function url_to_s3(url, is_folder) return table.concat(pieces, '') end ----@param url oil.s3Url +---@param url canola.s3Url ---@return boolean local function is_bucket(url) assert(url.bucket and url.bucket ~= '') @@ -138,7 +138,7 @@ s3_columns.birthtime = { } ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return s3_columns[name] end @@ -166,7 +166,7 @@ end ---@param url string ---@param column_defs string[] ----@param callback fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param callback fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, callback) if vim.fn.executable('aws') ~= 1 then callback('`aws` is not executable. Can you run `aws s3 ls`?') @@ -184,7 +184,7 @@ M.is_modifiable = function(bufnr) return true end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) local is_folder = action.entry_type == 'directory' @@ -216,7 +216,7 @@ M.render_action = function(action) end end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) local is_folder = action.entry_type == 'directory' @@ -325,7 +325,7 @@ M.read_file = function(bufnr) local basename = pathutil.basename(bufname) local cache_dir = vim.fn.stdpath('cache') assert(type(cache_dir) == 'string') - local tmpdir = fs.join(cache_dir, 'oil') + local tmpdir = fs.join(cache_dir, 'canola') fs.mkdirp(tmpdir) local fd, tmpfile = vim.loop.fs_mkstemp(fs.join(tmpdir, 's3_XXXXXX')) if fd then @@ -363,7 +363,7 @@ M.write_file = function(bufnr) local url = M.parse_url(bufname) local cache_dir = vim.fn.stdpath('cache') assert(type(cache_dir) == 'string') - local tmpdir = fs.join(cache_dir, 'oil') + local tmpdir = fs.join(cache_dir, 'canola') local fd, tmpfile = vim.loop.fs_mkstemp(fs.join(tmpdir, 's3_XXXXXXXX')) if fd then vim.loop.fs_close(fd) diff --git a/lua/oil/adapters/s3/s3fs.lua b/lua/canola/adapters/s3/s3fs.lua similarity index 91% rename from lua/oil/adapters/s3/s3fs.lua rename to lua/canola/adapters/s3/s3fs.lua index a81f10c..d527166 100644 --- a/lua/oil/adapters/s3/s3fs.lua +++ b/lua/canola/adapters/s3/s3fs.lua @@ -1,8 +1,8 @@ -local cache = require('oil.cache') -local config = require('oil.config') -local constants = require('oil.constants') -local shell = require('oil.shell') -local util = require('oil.util') +local cache = require('canola.cache') +local config = require('canola.config') +local constants = require('canola.constants') +local shell = require('canola.shell') +local util = require('canola.util') local M = {} @@ -10,7 +10,7 @@ local FIELD_META = constants.FIELD_META ---@param line string ---@return string Name of entry ----@return oil.EntryType +---@return canola.EntryType ---@return table Metadata for entry local function parse_ls_line_bucket(line) local date, name = line:match('^(%d+%-%d+%-%d+%s%d+:%d+:%d+)%s+(.*)$') @@ -24,7 +24,7 @@ end ---@param line string ---@return string Name of entry ----@return oil.EntryType +---@return canola.EntryType ---@return table Metadata for entry local function parse_ls_line_file(line) local name = line:match('^%s+PRE%s+(.*)/$') @@ -52,7 +52,7 @@ end ---@param url string ---@param path string ----@param callback fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param callback fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) function M.list_dir(url, path, callback) local cmd = create_s3_command({ 'ls', path, '--color=off', '--no-cli-pager' }) shell.run(cmd, function(err, lines) diff --git a/lua/oil/adapters/ssh.lua b/lua/canola/adapters/ssh.lua similarity index 91% rename from lua/oil/adapters/ssh.lua rename to lua/canola/adapters/ssh.lua index b78d02f..4654b32 100644 --- a/lua/oil/adapters/ssh.lua +++ b/lua/canola/adapters/ssh.lua @@ -1,19 +1,19 @@ -local config = require('oil.config') -local constants = require('oil.constants') -local files = require('oil.adapters.files') -local fs = require('oil.fs') -local loading = require('oil.loading') -local pathutil = require('oil.pathutil') -local permissions = require('oil.adapters.files.permissions') -local shell = require('oil.shell') -local sshfs = require('oil.adapters.ssh.sshfs') -local util = require('oil.util') +local config = require('canola.config') +local constants = require('canola.constants') +local files = require('canola.adapters.files') +local fs = require('canola.fs') +local loading = require('canola.loading') +local pathutil = require('canola.pathutil') +local permissions = require('canola.adapters.files.permissions') +local shell = require('canola.shell') +local sshfs = require('canola.adapters.ssh.sshfs') +local util = require('canola.util') local M = {} local FIELD_NAME = constants.FIELD_NAME local FIELD_META = constants.FIELD_META ----@class (exact) oil.sshUrl +---@class (exact) canola.sshUrl ---@field scheme string ---@field host string ---@field user nil|string @@ -27,11 +27,11 @@ local function scp(args, ...) shell.run(cmd, ...) end ----@param oil_url string ----@return oil.sshUrl -M.parse_url = function(oil_url) - local scheme, url = util.parse_url(oil_url) - assert(scheme and url, string.format("Malformed input url '%s'", oil_url)) +---@param canola_url string +---@return canola.sshUrl +M.parse_url = function(canola_url) + local scheme, url = util.parse_url(canola_url) + assert(scheme and url, string.format("Malformed input url '%s'", canola_url)) local ret = { scheme = scheme } local username, rem = url:match('^([^@%s]+)@(.*)$') ret.user = username @@ -47,14 +47,14 @@ M.parse_url = function(oil_url) ret.path = path end if not ret.host or not ret.path then - error(string.format('Malformed SSH url: %s', oil_url)) + error(string.format('Malformed SSH url: %s', canola_url)) end - ---@cast ret oil.sshUrl + ---@cast ret canola.sshUrl return ret end ----@param url oil.sshUrl +---@param url canola.sshUrl ---@return string local function url_to_str(url) local pieces = { url.scheme } @@ -71,7 +71,7 @@ local function url_to_str(url) return table.concat(pieces, '') end ----@param url oil.sshUrl +---@param url canola.sshUrl ---@return string local function url_to_scp(url) local pieces = { 'scp://' } @@ -89,8 +89,8 @@ local function url_to_scp(url) return table.concat(pieces, '') end ----@param url1 oil.sshUrl ----@param url2 oil.sshUrl +---@param url1 canola.sshUrl +---@param url2 canola.sshUrl ---@return boolean local function url_hosts_equal(url1, url2) return url1.host == url2.host and url1.port == url2.port and url1.user == url2.user @@ -99,7 +99,7 @@ end local _connections = {} ---@param url string ---@param allow_retry nil|boolean ----@return oil.sshFs +---@return canola.sshFs local function get_connection(url, allow_retry) local res = M.parse_url(url) res.scheme = config.adapter_to_scheme.ssh @@ -178,7 +178,7 @@ ssh_columns.size = { } ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return ssh_columns[name] end @@ -223,7 +223,7 @@ end ---@param url string ---@param column_defs string[] ----@param callback fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param callback fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, callback) local res = M.parse_url(url) @@ -256,7 +256,7 @@ M.is_modifiable = function(bufnr) return bit.band(rwx, 2) ~= 0 end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'create' then @@ -285,7 +285,7 @@ M.render_action = function(action) end end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) if action.type == 'create' then @@ -367,7 +367,7 @@ M.read_file = function(bufnr) local basename = pathutil.basename(bufname) local cache_dir = vim.fn.stdpath('cache') assert(type(cache_dir) == 'string') - local tmpdir = fs.join(cache_dir, 'oil') + local tmpdir = fs.join(cache_dir, 'canola') fs.mkdirp(tmpdir) local fd, tmpfile = vim.loop.fs_mkstemp(fs.join(tmpdir, 'ssh_XXXXXX')) if fd then @@ -407,7 +407,7 @@ M.write_file = function(bufnr) local scp_url = url_to_scp(url) local cache_dir = vim.fn.stdpath('cache') assert(type(cache_dir) == 'string') - local tmpdir = fs.join(cache_dir, 'oil') + local tmpdir = fs.join(cache_dir, 'canola') local fd, tmpfile = vim.loop.fs_mkstemp(fs.join(tmpdir, 'ssh_XXXXXXXX')) if fd then vim.loop.fs_close(fd) @@ -441,7 +441,7 @@ M.goto_file = function() url.path = vim.fs.dirname(fullpath) local parurl = url_to_str(url) - ---@cast M oil.Adapter + ---@cast M canola.Adapter util.adapter_list_all(M, parurl, {}, function(err, entries) if err then vim.notify(string.format("Error finding file '%s': %s", fname, err), vim.log.levels.ERROR) diff --git a/lua/oil/adapters/ssh/connection.lua b/lua/canola/adapters/ssh/connection.lua similarity index 94% rename from lua/oil/adapters/ssh/connection.lua rename to lua/canola/adapters/ssh/connection.lua index 6dbaa49..d5bcd06 100644 --- a/lua/oil/adapters/ssh/connection.lua +++ b/lua/canola/adapters/ssh/connection.lua @@ -1,22 +1,22 @@ -local config = require('oil.config') -local layout = require('oil.layout') -local util = require('oil.util') +local config = require('canola.config') +local layout = require('canola.layout') +local util = require('canola.util') ----@class (exact) oil.sshCommand +---@class (exact) canola.sshCommand ---@field cmd string|string[] ---@field cb fun(err?: string, output?: string[]) ---@field running? boolean ----@class (exact) oil.sshConnection ----@field new fun(url: oil.sshUrl): oil.sshConnection ----@field create_ssh_command fun(url: oil.sshUrl): string[] +---@class (exact) canola.sshConnection +---@field new fun(url: canola.sshUrl): canola.sshConnection +---@field create_ssh_command fun(url: canola.sshUrl): string[] ---@field meta {user?: string, groups?: string[]} ---@field connection_error nil|string ---@field connected boolean ---@field private term_bufnr integer ---@field private jid integer ---@field private term_winid nil|integer ----@field private commands oil.sshCommand[] +---@field private commands canola.sshCommand[] ---@field private _stdout string[] local SSHConnection = {} @@ -61,7 +61,7 @@ local function get_last_lines(bufnr, num_lines) return lines end ----@param url oil.sshUrl +---@param url canola.sshUrl ---@return string[] function SSHConnection.create_ssh_command(url) local host = url.host @@ -79,8 +79,8 @@ function SSHConnection.create_ssh_command(url) return command end ----@param url oil.sshUrl ----@return oil.sshConnection +---@param url canola.sshUrl +---@return canola.sshConnection function SSHConnection.new(url) local command = SSHConnection.create_ssh_command(url) vim.list_extend(command, { @@ -142,7 +142,7 @@ function SSHConnection.new(url) self:_set_connection_error('SSH connection terminated gracefully') else self:_set_connection_error( - 'Unknown SSH error\nTo see more, run :lua require("oil.adapters.ssh").open_terminal()' + 'Unknown SSH error\nTo see more, run :lua require("canola.adapters.ssh").open_terminal()' ) end end, 20) @@ -176,7 +176,7 @@ function SSHConnection.new(url) end end) - ---@cast self oil.sshConnection + ---@cast self canola.sshConnection return self end diff --git a/lua/oil/adapters/ssh/sshfs.lua b/lua/canola/adapters/ssh/sshfs.lua similarity index 92% rename from lua/oil/adapters/ssh/sshfs.lua rename to lua/canola/adapters/ssh/sshfs.lua index 7d250f2..c8602de 100644 --- a/lua/oil/adapters/ssh/sshfs.lua +++ b/lua/canola/adapters/ssh/sshfs.lua @@ -1,12 +1,12 @@ -local SSHConnection = require('oil.adapters.ssh.connection') -local cache = require('oil.cache') -local constants = require('oil.constants') -local permissions = require('oil.adapters.files.permissions') -local util = require('oil.util') +local SSHConnection = require('canola.adapters.ssh.connection') +local cache = require('canola.cache') +local constants = require('canola.constants') +local permissions = require('canola.adapters.files.permissions') +local util = require('canola.util') ----@class (exact) oil.sshFs ----@field new fun(url: oil.sshUrl): oil.sshFs ----@field conn oil.sshConnection +---@class (exact) canola.sshFs +---@field new fun(url: canola.sshUrl): canola.sshFs +---@field conn canola.sshConnection local SSHFS = {} local FIELD_TYPE = constants.FIELD_TYPE @@ -23,7 +23,7 @@ local typechar_map = { } ---@param line string ---@return string Name of entry ----@return oil.EntryType +---@return canola.EntryType ---@return table Metadata for entry local function parse_ls_line(line) local typechar, perms, refcount, user, group, rem = @@ -74,10 +74,10 @@ local function shellescape(str) return "'" .. str:gsub("'", "'\\''") .. "'" end ----@param url oil.sshUrl ----@return oil.sshFs +---@param url canola.sshUrl +---@return canola.sshFs function SSHFS.new(url) - ---@type oil.sshFs + ---@type canola.sshFs return setmetatable({ conn = SSHConnection.new(url), }, { @@ -144,7 +144,7 @@ local dir_meta = {} ---@param url string ---@param path string ----@param callback fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param callback fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) function SSHFS:list_dir(url, path, callback) local path_postfix = '' if path ~= '' then diff --git a/lua/oil/adapters/test.lua b/lua/canola/adapters/test.lua similarity index 83% rename from lua/oil/adapters/test.lua rename to lua/canola/adapters/test.lua index 2e80e9a..bcc42ed 100644 --- a/lua/oil/adapters/test.lua +++ b/lua/canola/adapters/test.lua @@ -1,5 +1,5 @@ -local cache = require('oil.cache') -local util = require('oil.util') +local cache = require('canola.cache') +local util = require('canola.util') local M = {} ---@param url string @@ -12,7 +12,7 @@ local dir_listing = {} ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, cb) local _, path = util.parse_url(url) local entries = dir_listing[path] or {} @@ -29,8 +29,8 @@ M.test_clear = function() end ---@param path string ----@param entry_type oil.EntryType ----@return oil.InternalEntry +---@param entry_type canola.EntryType +---@return canola.InternalEntry M.test_set = function(path, entry_type) if path == '/' then return {} @@ -49,12 +49,12 @@ M.test_set = function(path, entry_type) entry_type = entry_type, } table.insert(dir_listing[parent], entry) - local parent_url = 'oil-test://' .. parent + local parent_url = 'canola-test://' .. parent return cache.create_and_store_entry(parent_url, entry.name, entry.entry_type) end ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return nil end @@ -65,7 +65,7 @@ M.is_modifiable = function(bufnr) return true end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'create' or action.type == 'delete' then @@ -77,7 +77,7 @@ M.render_action = function(action) end end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) cb() diff --git a/lua/canola/adapters/trash.lua b/lua/canola/adapters/trash.lua new file mode 100644 index 0000000..42b82d5 --- /dev/null +++ b/lua/canola/adapters/trash.lua @@ -0,0 +1,9 @@ +local fs = require('canola.fs') + +if fs.is_mac then + return require('canola.adapters.trash.mac') +elseif fs.is_windows then + return require('canola.adapters.trash.windows') +else + return require('canola.adapters.trash.freedesktop') +end diff --git a/lua/oil/adapters/trash/freedesktop.lua b/lua/canola/adapters/trash/freedesktop.lua similarity index 95% rename from lua/oil/adapters/trash/freedesktop.lua rename to lua/canola/adapters/trash/freedesktop.lua index 1e1d34d..65bf090 100644 --- a/lua/oil/adapters/trash/freedesktop.lua +++ b/lua/canola/adapters/trash/freedesktop.lua @@ -1,11 +1,11 @@ -- Based on the FreeDesktop.org trash specification -- https://specifications.freedesktop.org/trash/1.0/ -local cache = require('oil.cache') -local config = require('oil.config') -local constants = require('oil.constants') -local files = require('oil.adapters.files') -local fs = require('oil.fs') -local util = require('oil.util') +local cache = require('canola.cache') +local config = require('canola.config') +local constants = require('canola.constants') +local files = require('canola.adapters.files') +local fs = require('canola.fs') +local util = require('canola.util') local uv = vim.uv or vim.loop local FIELD_META = constants.FIELD_META @@ -127,12 +127,12 @@ M.normalize_url = function(url, callback) end ---@param url string ----@param entry oil.Entry +---@param entry canola.Entry ---@param cb fun(path: string) M.get_entry_path = function(url, entry, cb) local internal_entry = assert(cache.get_entry_by_id(entry.id)) local meta = assert(internal_entry[FIELD_META]) - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = meta.trash_info if not trash_info then -- This is a subpath in the trash @@ -143,10 +143,10 @@ M.get_entry_path = function(url, entry, cb) if meta.stat.type == 'directory' then path = util.addslash(path) end - cb('oil://' .. path) + cb('canola://' .. path) end ----@class oil.TrashInfo +---@class canola.TrashInfo ---@field trash_file string ---@field info_file string ---@field original_path string @@ -154,7 +154,7 @@ end ---@field stat uv.aliases.fs_stat_table ---@param info_file string ----@param cb fun(err?: string, info?: oil.TrashInfo) +---@param cb fun(err?: string, info?: canola.TrashInfo) local function read_trash_info(info_file, cb) if not vim.endswith(info_file, '.trashinfo') then return cb('File is not .trashinfo') @@ -210,7 +210,7 @@ local function read_trash_info(info_file, cb) cb('.trashinfo file points to non-existant file') else trash_info.stat = trash_stat - ---@cast trash_info oil.TrashInfo + ---@cast trash_info canola.TrashInfo cb(nil, trash_info) end end) @@ -222,7 +222,7 @@ end ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, cb) cb = vim.schedule_wrap(cb) local _, path = util.parse_url(url) @@ -357,7 +357,7 @@ file_columns.mtime = { if not meta then return nil end - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = meta.trash_info local time = trash_info and trash_info.deletion_date or meta.stat and meta.stat.mtime.sec if not time then @@ -380,7 +380,7 @@ file_columns.mtime = { get_sort_value = function(entry) local meta = entry[FIELD_META] - ---@type nil|oil.TrashInfo + ---@type nil|canola.TrashInfo local trash_info = meta and meta.trash_info if trash_info then return trash_info.deletion_date @@ -402,14 +402,14 @@ file_columns.mtime = { } ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return file_columns[name] end M.supported_cross_adapter_actions = { files = 'move' } ----@param action oil.Action +---@param action canola.Action ---@return boolean M.filter_action = function(action) if action.type == 'create' then @@ -432,7 +432,7 @@ M.filter_action = function(action) end end ----@param err oil.ParseError +---@param err canola.ParseError ---@return boolean M.filter_error = function(err) if err.message == 'Duplicate filename' then @@ -441,13 +441,13 @@ M.filter_error = function(err) return true end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'delete' then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = assert(meta).trash_info local short_path = fs.shorten_path(trash_info.original_path) return string.format(' PURGE %s', short_path) @@ -488,7 +488,7 @@ M.render_action = function(action) end end ----@param trash_info oil.TrashInfo +---@param trash_info canola.TrashInfo ---@param cb fun(err?: string) local function purge(trash_info, cb) fs.recursive_delete('file', trash_info.info_file, function(err) @@ -525,7 +525,7 @@ local function write_info_file(path, info_path, cb) end ---@param path string ----@param cb fun(err?: string, trash_info?: oil.TrashInfo) +---@param cb fun(err?: string, trash_info?: canola.TrashInfo) local function create_trash_info(path, cb) local trash_dir = get_write_trash_dir(path) local basename = vim.fs.basename(path) @@ -542,7 +542,7 @@ local function create_trash_info(path, cb) if info_err then return cb(info_err) end - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = { original_path = path, trash_file = dest_path, @@ -555,13 +555,13 @@ local function create_trash_info(path, cb) end) end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) if action.type == 'delete' then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = assert(meta).trash_info purge(trash_info, cb) elseif action.type == 'move' then @@ -576,7 +576,7 @@ M.perform_action = function(action, cb) assert(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = assert(meta).trash_info fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err) if err then @@ -607,7 +607,7 @@ M.perform_action = function(action, cb) assert(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) local meta = entry[FIELD_META] - ---@type oil.TrashInfo + ---@type canola.TrashInfo local trash_info = assert(meta).trash_info fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb) else diff --git a/lua/oil/adapters/trash/mac.lua b/lua/canola/adapters/trash/mac.lua similarity index 93% rename from lua/oil/adapters/trash/mac.lua rename to lua/canola/adapters/trash/mac.lua index e1c052d..3bf35ed 100644 --- a/lua/oil/adapters/trash/mac.lua +++ b/lua/canola/adapters/trash/mac.lua @@ -1,8 +1,8 @@ -local cache = require('oil.cache') -local config = require('oil.config') -local files = require('oil.adapters.files') -local fs = require('oil.fs') -local util = require('oil.util') +local cache = require('canola.cache') +local config = require('canola.config') +local files = require('canola.adapters.files') +local fs = require('canola.fs') +local util = require('canola.util') local uv = vim.uv or vim.loop @@ -29,20 +29,20 @@ M.normalize_url = function(url, callback) end ---@param url string ----@param entry oil.Entry +---@param entry canola.Entry ---@param cb fun(path: string) M.get_entry_path = function(url, entry, cb) local trash_dir = get_trash_dir() local path = fs.join(trash_dir, entry.name) if entry.type == 'directory' then - path = 'oil://' .. path + path = 'canola://' .. path end cb(path) end ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, cb) cb = vim.schedule_wrap(cb) local _, path = util.parse_url(url) @@ -106,14 +106,14 @@ M.is_modifiable = function(bufnr) end ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return nil end M.supported_cross_adapter_actions = { files = 'move' } ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'create' then @@ -143,7 +143,7 @@ M.render_action = function(action) end end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) local trash_dir = get_trash_dir() diff --git a/lua/oil/adapters/trash/windows.lua b/lua/canola/adapters/trash/windows.lua similarity index 90% rename from lua/oil/adapters/trash/windows.lua rename to lua/canola/adapters/trash/windows.lua index c761f82..b0b2dcf 100644 --- a/lua/oil/adapters/trash/windows.lua +++ b/lua/canola/adapters/trash/windows.lua @@ -1,11 +1,11 @@ -local util = require('oil.util') +local util = require('canola.util') local uv = vim.uv or vim.loop -local cache = require('oil.cache') -local config = require('oil.config') -local constants = require('oil.constants') -local files = require('oil.adapters.files') -local fs = require('oil.fs') -local powershell_trash = require('oil.adapters.trash.windows.powershell-trash') +local cache = require('canola.cache') +local config = require('canola.config') +local constants = require('canola.constants') +local files = require('canola.adapters.files') +local fs = require('canola.fs') +local powershell_trash = require('canola.adapters.trash.windows.powershell-trash') local FIELD_META = constants.FIELD_META local FIELD_TYPE = constants.FIELD_TYPE @@ -36,7 +36,7 @@ local win_addslash = function(path) end end ----@class oil.WindowsTrashInfo +---@class canola.WindowsTrashInfo ---@field trash_file string ---@field original_path string ---@field deletion_date integer @@ -44,7 +44,7 @@ end ---@param url string ---@param column_defs string[] ----@param cb fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun()) +---@param cb fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun()) M.list = function(url, column_defs, cb) local _, path = util.parse_url(url) path = fs.posix_to_os_path(assert(path)) @@ -70,11 +70,11 @@ M.list = function(url, column_defs, cb) ) local displayed_entries = vim.tbl_map( ---@param entry {IsFolder: boolean, DeletionDate: integer, Name: string, Path: string, OriginalPath: string} - ---@return {[1]:nil, [2]:string, [3]:string, [4]:{stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}} + ---@return {[1]:nil, [2]:string, [3]:string, [4]:{stat: uv_fs_t, trash_info: canola.WindowsTrashInfo, display_name: string}} function(entry) local parent = win_addslash(assert(vim.fn.fnamemodify(entry.OriginalPath, ':h'))) - --- @type oil.InternalEntry + --- @type canola.InternalEntry local cache_entry if path == parent or show_all_files then local deleted_file_tail = assert(vim.fn.fnamemodify(entry.Path, ':t')) @@ -96,7 +96,7 @@ M.list = function(url, column_defs, cb) end cache_entry[FIELD_META] = { stat = nil, - ---@type oil.WindowsTrashInfo + ---@type canola.WindowsTrashInfo trash_info = { trash_file = entry.Path, original_path = entry.OriginalPath, @@ -142,7 +142,7 @@ file_columns.mtime = { if not meta then return nil end - ---@type oil.WindowsTrashInfo + ---@type canola.WindowsTrashInfo local trash_info = meta.trash_info local time = trash_info and trash_info.deletion_date if not time then @@ -165,7 +165,7 @@ file_columns.mtime = { get_sort_value = function(entry) local meta = entry[FIELD_META] - ---@type nil|oil.WindowsTrashInfo + ---@type nil|canola.WindowsTrashInfo local trash_info = meta and meta.trash_info if trash_info and trash_info.deletion_date then return trash_info.deletion_date @@ -187,12 +187,12 @@ file_columns.mtime = { } ---@param name string ----@return nil|oil.ColumnDefinition +---@return nil|canola.ColumnDefinition M.get_column = function(name) return file_columns[name] end ----@param action oil.Action +---@param action canola.Action ---@return boolean M.filter_action = function(action) if action.type == 'create' then @@ -232,11 +232,11 @@ M.normalize_url = function(url, callback) end ---@param url string ----@param entry oil.Entry +---@param entry canola.Entry ---@param cb fun(path: string) M.get_entry_path = function(url, entry, cb) local internal_entry = assert(cache.get_entry_by_id(entry.id)) - local meta = internal_entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] + local meta = internal_entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: canola.WindowsTrashInfo, display_name: string}]] local trash_info = meta and meta.trash_info if not trash_info then -- This is a subpath in the trash @@ -248,10 +248,10 @@ M.get_entry_path = function(url, entry, cb) if entry.type == 'directory' then path = win_addslash(path) end - cb('oil://' .. path) + cb('canola://' .. path) end ----@param err oil.ParseError +---@param err canola.ParseError ---@return boolean M.filter_error = function(err) if err.message == 'Duplicate filename' then @@ -260,13 +260,13 @@ M.filter_error = function(err) return true end ----@param action oil.Action +---@param action canola.Action ---@return string M.render_action = function(action) if action.type == 'delete' then local entry = assert(cache.get_entry_by_url(action.url)) local meta = entry[FIELD_META] - ---@type oil.WindowsTrashInfo + ---@type canola.WindowsTrashInfo local trash_info = assert(meta).trash_info local short_path = fs.shorten_path(trash_info.original_path) return string.format(' PURGE %s', short_path) @@ -307,8 +307,8 @@ M.render_action = function(action) end end ----@param trash_info oil.WindowsTrashInfo ----@param cb fun(err?: string, raw_entries: oil.WindowsRawEntry[]?) +---@param trash_info canola.WindowsTrashInfo +---@param cb fun(err?: string, raw_entries: canola.WindowsRawEntry[]?) local purge = function(trash_info, cb) fs.recursive_delete('file', trash_info.info_file, function(err) if err then @@ -320,7 +320,7 @@ end ---@param path string ---@param type string ----@param cb fun(err?: string, trash_info?: oil.TrashInfo) +---@param cb fun(err?: string, trash_info?: canola.TrashInfo) local function create_trash_info_and_copy(path, type, cb) local temp_path = path .. 'temp' -- create a temporary copy on the same location @@ -344,12 +344,12 @@ local function create_trash_info_and_copy(path, type, cb) ) end ----@param action oil.Action +---@param action canola.Action ---@param cb fun(err: nil|string) M.perform_action = function(action, cb) if action.type == 'delete' then local entry = assert(cache.get_entry_by_url(action.url)) - local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] + local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: canola.WindowsTrashInfo, display_name: string}]] local trash_info = meta and meta.trash_info purge(trash_info, cb) @@ -365,7 +365,7 @@ M.perform_action = function(action, cb) assert(dest_path) dest_path = fs.posix_to_os_path(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) - local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] + local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: canola.WindowsTrashInfo, display_name: string}]] local trash_info = meta and meta.trash_info fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err) if err then @@ -389,7 +389,7 @@ M.perform_action = function(action, cb) assert(dest_path) dest_path = fs.posix_to_os_path(dest_path) local entry = assert(cache.get_entry_by_url(action.src_url)) - local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]] + local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: canola.WindowsTrashInfo, display_name: string}]] local trash_info = meta and meta.trash_info fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb) else diff --git a/lua/oil/adapters/trash/windows/powershell-connection.lua b/lua/canola/adapters/trash/windows/powershell-connection.lua similarity index 94% rename from lua/oil/adapters/trash/windows/powershell-connection.lua rename to lua/canola/adapters/trash/windows/powershell-connection.lua index d897fe8..d97fa4f 100644 --- a/lua/oil/adapters/trash/windows/powershell-connection.lua +++ b/lua/canola/adapters/trash/windows/powershell-connection.lua @@ -1,18 +1,18 @@ ----@class (exact) oil.PowershellCommand +---@class (exact) canola.PowershellCommand ---@field cmd string ---@field cb fun(err?: string, output?: string) ---@field running? boolean ----@class oil.PowershellConnection +---@class canola.PowershellConnection ---@field private jid integer ---@field private execution_error? string ----@field private commands oil.PowershellCommand[] +---@field private commands canola.PowershellCommand[] ---@field private stdout string[] ---@field private is_reading_data boolean local PowershellConnection = {} ---@param init_command? string ----@return oil.PowershellConnection +---@return canola.PowershellConnection function PowershellConnection.new(init_command) local self = setmetatable({ commands = {}, @@ -22,7 +22,7 @@ function PowershellConnection.new(init_command) self:_init(init_command) - ---@type oil.PowershellConnection + ---@type canola.PowershellConnection return self end diff --git a/lua/oil/adapters/trash/windows/powershell-trash.lua b/lua/canola/adapters/trash/windows/powershell-trash.lua similarity index 88% rename from lua/oil/adapters/trash/windows/powershell-trash.lua rename to lua/canola/adapters/trash/windows/powershell-trash.lua index edc9ee6..55ff69a 100644 --- a/lua/oil/adapters/trash/windows/powershell-trash.lua +++ b/lua/canola/adapters/trash/windows/powershell-trash.lua @@ -1,7 +1,7 @@ -- A wrapper around trash operations using windows powershell -local Powershell = require('oil.adapters.trash.windows.powershell-connection') +local Powershell = require('canola.adapters.trash.windows.powershell-connection') ----@class oil.WindowsRawEntry +---@class canola.WindowsRawEntry ---@field IsFolder boolean ---@field DeletionDate integer ---@field Name string @@ -30,10 +30,10 @@ $data = @(foreach ($i in $folder.items()) ConvertTo-Json $data -Compress ]] ----@type nil|oil.PowershellConnection +---@type nil|canola.PowershellConnection local list_entries_powershell ----@param cb fun(err?: string, raw_entries?: oil.WindowsRawEntry[]) +---@param cb fun(err?: string, raw_entries?: canola.WindowsRawEntry[]) M.list_raw_entries = function(cb) if not list_entries_powershell then list_entries_powershell = Powershell.new(list_entries_init) @@ -63,7 +63,7 @@ $path = Get-Item '%s' $folder.ParseName($path.FullName).InvokeVerb('delete') ]] ----@type nil|oil.PowershellConnection +---@type nil|canola.PowershellConnection local delete_to_trash_powershell ---@param path string diff --git a/lua/oil/cache.lua b/lua/canola/cache.lua similarity index 91% rename from lua/oil/cache.lua rename to lua/canola/cache.lua index 800c97a..20160c7 100644 --- a/lua/oil/cache.lua +++ b/lua/canola/cache.lua @@ -1,5 +1,5 @@ -local constants = require('oil.constants') -local util = require('oil.util') +local constants = require('canola.constants') +local util = require('canola.util') local M = {} local FIELD_ID = constants.FIELD_ID @@ -8,11 +8,11 @@ local FIELD_META = constants.FIELD_META local next_id = 1 --- Map> ----@type table> +-- Map> +---@type table> local url_directory = {} ----@type table +---@type table local entries_by_id = {} ---@type table @@ -42,8 +42,8 @@ end ---@param parent_url string ---@param name string ----@param type oil.EntryType ----@return oil.InternalEntry +---@param type canola.EntryType +---@return canola.InternalEntry M.create_entry = function(parent_url, name, type) parent_url = util.addslash(parent_url) local parent = tmp_url_directory[parent_url] or url_directory[parent_url] @@ -58,7 +58,7 @@ M.create_entry = function(parent_url, name, type) end ---@param parent_url string ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry M.store_entry = function(parent_url, entry) parent_url = util.addslash(parent_url) local parent = url_directory[parent_url] @@ -85,8 +85,8 @@ end ---@param parent_url string ---@param name string ----@param type oil.EntryType ----@return oil.InternalEntry +---@param type canola.EntryType +---@return canola.InternalEntry M.create_and_store_entry = function(parent_url, name, type) local entry = M.create_entry(parent_url, name, type) M.store_entry(parent_url, entry) @@ -115,13 +115,13 @@ M.end_update_url = function(parent_url) end ---@param id integer ----@return nil|oil.InternalEntry +---@return nil|canola.InternalEntry M.get_entry_by_id = function(id) return entries_by_id[id] end ---@param url string ----@return nil|oil.InternalEntry +---@return nil|canola.InternalEntry M.get_entry_by_url = function(url) local scheme, path = util.parse_url(url) assert(path) @@ -141,13 +141,13 @@ M.get_parent_url = function(id) end ---@param url string ----@return table +---@return table M.list_url = function(url) url = util.addslash(url) return url_directory[url] or {} end ----@param action oil.Action +---@param action canola.Action M.perform_action = function(action) if action.type == 'create' then local scheme, path = util.parse_url(action.url) diff --git a/lua/oil/clipboard.lua b/lua/canola/clipboard.lua similarity index 93% rename from lua/oil/clipboard.lua rename to lua/canola/clipboard.lua index 84df407..a5bad24 100644 --- a/lua/oil/clipboard.lua +++ b/lua/canola/clipboard.lua @@ -1,11 +1,11 @@ -local cache = require('oil.cache') -local columns = require('oil.columns') -local config = require('oil.config') -local fs = require('oil.fs') -local oil = require('oil') -local parser = require('oil.mutator.parser') -local util = require('oil.util') -local view = require('oil.view') +local cache = require('canola.cache') +local canola = require('canola') +local columns = require('canola.columns') +local config = require('canola.config') +local fs = require('canola.fs') +local parser = require('canola.mutator.parser') +local util = require('canola.util') +local view = require('canola.view') local M = {} @@ -35,9 +35,9 @@ local function is_linux_desktop_gnome() end ---@param winid integer ----@param entry oil.InternalEntry ----@param column_defs oil.ColumnSpec[] ----@param adapter oil.Adapter +---@param entry canola.InternalEntry +---@param column_defs canola.ColumnSpec[] +---@param adapter canola.Adapter ---@param bufnr integer local function write_pasted(winid, entry, column_defs, adapter, bufnr) local col_width = {} @@ -52,7 +52,7 @@ local function write_pasted(winid, entry, column_defs, adapter, bufnr) end ---@param parent_url string ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry local function remove_entry_from_parent_buffer(parent_url, entry) local bufnr = vim.fn.bufadd(parent_url) assert(vim.api.nvim_buf_is_loaded(bufnr), 'Expected parent buffer to be loaded during paste') @@ -77,7 +77,7 @@ end ---@param delete_original? boolean local function paste_paths(paths, delete_original) local bufnr = vim.api.nvim_get_current_buf() - local scheme = 'oil://' + local scheme = 'canola://' local adapter = assert(config.get_adapter_by_scheme(scheme)) local column_defs = columns.get_supported_columns(scheme) local winid = vim.api.nvim_get_current_win() @@ -140,7 +140,7 @@ local function paste_paths(paths, delete_original) for parent_url, _ in pairs(parent_urls) do local new_bufnr = vim.api.nvim_create_buf(false, false) vim.api.nvim_buf_set_name(new_bufnr, parent_url) - oil.load_oil_buffer(new_bufnr) + canola.load_canola_buffer(new_bufnr) util.run_after_load(new_bufnr, complete_loading) end end @@ -162,7 +162,7 @@ local function range_from_selection() end M.copy_to_system_clipboard = function() - local dir = oil.get_current_dir() + local dir = canola.get_current_dir() if not dir then vim.notify('System clipboard only works for local files', vim.log.levels.ERROR) return @@ -180,13 +180,13 @@ M.copy_to_system_clipboard = function() end local start_row, end_row = range_from_selection() for i = start_row, end_row do - table.insert(entries, oil.get_entry_on_line(0, i)) + table.insert(entries, canola.get_entry_on_line(0, i)) end -- leave visual mode vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('', true, false, true), 'n', true) else - table.insert(entries, oil.get_cursor_entry()) + table.insert(entries, canola.get_cursor_entry()) end -- This removes holes in the list-like table @@ -298,7 +298,7 @@ end ---@param delete_original? boolean Delete the source file after pasting M.paste_from_system_clipboard = function(delete_original) - local dir = oil.get_current_dir() + local dir = canola.get_current_dir() if not dir then return end diff --git a/lua/oil/columns.lua b/lua/canola/columns.lua similarity index 82% rename from lua/oil/columns.lua rename to lua/canola/columns.lua index ef95fdd..f616240 100644 --- a/lua/oil/columns.lua +++ b/lua/canola/columns.lua @@ -1,6 +1,6 @@ -local config = require('oil.config') -local constants = require('oil.constants') -local util = require('oil.util') +local config = require('canola.config') +local constants = require('canola.constants') +local util = require('canola.util') local M = {} local FIELD_NAME = constants.FIELD_NAME @@ -9,33 +9,33 @@ local FIELD_META = constants.FIELD_META local all_columns = {} ----@alias oil.ColumnSpec string|{[1]: string, [string]: any} +---@alias canola.ColumnSpec string|{[1]: string, [string]: any} ----@class (exact) oil.ColumnDefinition ----@field render fun(entry: oil.InternalEntry, conf: nil|table, bufnr: integer): nil|oil.TextChunk +---@class (exact) canola.ColumnDefinition +---@field render fun(entry: canola.InternalEntry, conf: nil|table, bufnr: integer): nil|canola.TextChunk ---@field parse fun(line: string, conf: nil|table): nil|string, nil|string ----@field compare? fun(entry: oil.InternalEntry, parsed_value: any): boolean ----@field render_action? fun(action: oil.ChangeAction): string ----@field perform_action? fun(action: oil.ChangeAction, callback: fun(err: nil|string)) ----@field get_sort_value? fun(entry: oil.InternalEntry): number|string ----@field create_sort_value_factory? fun(num_entries: integer): fun(entry: oil.InternalEntry): number|string +---@field compare? fun(entry: canola.InternalEntry, parsed_value: any): boolean +---@field render_action? fun(action: canola.ChangeAction): string +---@field perform_action? fun(action: canola.ChangeAction, callback: fun(err: nil|string)) +---@field get_sort_value? fun(entry: canola.InternalEntry): number|string +---@field create_sort_value_factory? fun(num_entries: integer): fun(entry: canola.InternalEntry): number|string ---@param name string ----@param column oil.ColumnDefinition +---@param column canola.ColumnDefinition M.register = function(name, column) all_columns[name] = column end ----@param adapter oil.Adapter ----@param defn oil.ColumnSpec ----@return nil|oil.ColumnDefinition +---@param adapter canola.Adapter +---@param defn canola.ColumnSpec +---@return nil|canola.ColumnDefinition M.get_column = function(adapter, defn) local name = util.split_config(defn) return all_columns[name] or adapter.get_column(name) end ----@param adapter_or_scheme string|oil.Adapter ----@return oil.ColumnSpec[] +---@param adapter_or_scheme string|canola.Adapter +---@return canola.ColumnSpec[] M.get_supported_columns = function(adapter_or_scheme) local adapter if type(adapter_or_scheme) == 'string' then @@ -53,15 +53,15 @@ M.get_supported_columns = function(adapter_or_scheme) return ret end -local EMPTY = { '-', 'OilEmpty' } +local EMPTY = { '-', 'CanolaEmpty' } M.EMPTY = EMPTY ----@param adapter oil.Adapter ----@param col_def oil.ColumnSpec ----@param entry oil.InternalEntry +---@param adapter canola.Adapter +---@param col_def canola.ColumnSpec +---@param entry canola.InternalEntry ---@param bufnr integer ----@return oil.TextChunk +---@return canola.TextChunk M.render_col = function(adapter, col_def, entry, bufnr) local name, conf = util.split_config(col_def) local column = M.get_column(adapter, name) @@ -90,9 +90,9 @@ M.render_col = function(adapter, col_def, entry, bufnr) return chunk end ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param line string ----@param col_def oil.ColumnSpec +---@param col_def canola.ColumnSpec ---@return nil|string ---@return nil|string M.parse_col = function(adapter, line, col_def) @@ -108,9 +108,9 @@ M.parse_col = function(adapter, line, col_def) end end ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param col_name string ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry ---@param parsed_value any ---@return boolean M.compare = function(adapter, col_name, entry, parsed_value) @@ -122,8 +122,8 @@ M.compare = function(adapter, col_name, entry, parsed_value) end end ----@param adapter oil.Adapter ----@param action oil.ChangeAction +---@param adapter canola.Adapter +---@param action canola.ChangeAction ---@return string M.render_change_action = function(adapter, action) local column = M.get_column(adapter, action.column) @@ -137,8 +137,8 @@ M.render_change_action = function(adapter, action) end end ----@param adapter oil.Adapter ----@param action oil.ChangeAction +---@param adapter canola.Adapter +---@param action canola.ChangeAction ---@param callback fun(err: nil|string) M.perform_change_action = function(adapter, action, callback) local column = M.get_column(adapter, action.column) @@ -205,7 +205,7 @@ local default_type_icons = { directory = 'dir', socket = 'sock', } ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry ---@return boolean local function is_entry_directory(entry) local type = entry[FIELD_TYPE] diff --git a/lua/oil/config.lua b/lua/canola/config.lua similarity index 70% rename from lua/oil/config.lua rename to lua/canola/config.lua index 7383920..607f4c0 100644 --- a/lua/oil/config.lua +++ b/lua/canola/config.lua @@ -1,21 +1,21 @@ local default_config = { - -- Oil will take over directory buffers (e.g. `vim .` or `:e src/`) + -- Canola will take over directory buffers (e.g. `vim .` or `:e src/`) -- Set to false if you want some other plugin (e.g. netrw) to open when you edit directories. default_file_explorer = true, -- Id is automatically added at the beginning, and name at the end - -- See :help oil-columns + -- See :help canola-columns columns = { 'icon', -- "permissions", -- "size", -- "mtime", }, - -- Buffer-local options to use for oil buffers + -- Buffer-local options to use for canola buffers buf_options = { buflisted = false, bufhidden = 'hide', }, - -- Window-local options to use for oil buffers + -- Window-local options to use for canola buffers win_options = { wrap = false, signcolumn = 'no', @@ -26,16 +26,16 @@ local default_config = { conceallevel = 3, concealcursor = 'nvic', }, - -- Send deleted files to the trash instead of permanently deleting them (:help oil-trash) + -- Send deleted files to the trash instead of permanently deleting them (:help canola-trash) delete_to_trash = false, - -- Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits) + -- Skip the confirmation popup for simple operations (:help canola.skip_confirm_for_simple_edits) skip_confirm_for_simple_edits = false, -- Selecting a new/moved/renamed file or directory will prompt you to save changes first -- (:help prompt_save_on_select_new_entry) prompt_save_on_select_new_entry = true, - -- Oil will automatically delete hidden buffers after this delay + -- Canola will automatically delete hidden buffers after this delay -- You can set the delay to false to disable cleanup entirely - -- Note that the cleanup process only starts when none of the oil buffers are currently displayed + -- Note that the cleanup process only starts when none of the canola buffers are currently displayed cleanup_delay_ms = 2000, lsp_file_methods = { -- Enable or disable LSP file operations @@ -46,17 +46,17 @@ local default_config = { -- Set to "unmodified" to only save unmodified buffers autosave_changes = false, }, - -- Constrain the cursor to the editable parts of the oil buffer + -- Constrain the cursor to the editable parts of the canola buffer -- Set to `false` to disable, or "name" to keep it on the file names constrain_cursor = 'editable', - -- Set to true to watch the filesystem for changes and reload oil + -- Set to true to watch the filesystem for changes and reload canola watch_for_changes = false, - -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap + -- Keymaps in canola buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap -- options with a `callback` (e.g. { callback = function() ... end, desc = "", mode = "n" }) -- Additionally, if it is a string that matches "actions.", - -- it will use the mapping at require("oil.actions"). + -- it will use the mapping at require("canola.actions"). -- Set to `false` to remove a keymap - -- See :help oil-actions for a list of all available actions + -- See :help canola-actions for a list of all available actions keymaps = { ['g?'] = { 'actions.show_help', mode = 'n' }, [''] = 'actions.select', @@ -96,7 +96,7 @@ local default_config = { case_insensitive = false, sort = { -- sort order can be "asc" or "desc" - -- see :help oil-columns to see which columns are sortable + -- see :help canola-columns to see which columns are sortable { 'type', 'asc' }, { 'name', 'asc' }, }, @@ -124,7 +124,7 @@ local default_config = { return false end, }, - -- Configuration for the floating window in oil.open_float + -- Configuration for the floating window in canola.open_float float = { -- Padding around the floating window padding = 2, @@ -135,7 +135,7 @@ local default_config = { win_options = { winblend = 0, }, - -- optionally override the oil buffers window title with custom function: fun(winid: integer): string + -- optionally override the canola buffers window title with custom function: fun(winid: integer): string get_win_title = nil, -- preview_split: Split direction: "auto", "left", "right", "above", "below". preview_split = 'auto', @@ -209,177 +209,177 @@ local default_config = { -- write their own adapters, and so there's no real reason to edit these config options. For that -- reason, I'm taking them out of the section above so they won't show up in the autogen docs. --- not "oil-s3://" on older neovim versions, since it doesn't open buffers correctly with a number +-- not "canola-s3://" on older neovim versions, since it doesn't open buffers correctly with a number -- in the name -local oil_s3_string = vim.fn.has('nvim-0.12') == 1 and 'oil-s3://' or 'oil-sss://' +local canola_s3_string = vim.fn.has('nvim-0.12') == 1 and 'canola-s3://' or 'canola-sss://' default_config.adapters = { - ['oil://'] = 'files', - ['oil-ssh://'] = 'ssh', - [oil_s3_string] = 's3', - ['oil-trash://'] = 'trash', + ['canola://'] = 'files', + ['canola-ssh://'] = 'ssh', + [canola_s3_string] = 's3', + ['canola-trash://'] = 'trash', } default_config.adapter_aliases = {} -- We want the function in the default config for documentation generation, but if we nil it out -- here we can get some performance wins default_config.view_options.highlight_filename = nil ----@class oil.Config +---@class canola.Config ---@field adapters table Hidden from SetupOpts ---@field adapter_aliases table Hidden from SetupOpts ---@field silence_scp_warning? boolean Undocumented option ---@field default_file_explorer boolean ----@field columns oil.ColumnSpec[] +---@field columns canola.ColumnSpec[] ---@field buf_options table ---@field win_options table ---@field delete_to_trash boolean ---@field skip_confirm_for_simple_edits boolean ---@field prompt_save_on_select_new_entry boolean ---@field cleanup_delay_ms integer ----@field lsp_file_methods oil.LspFileMethods +---@field lsp_file_methods canola.LspFileMethods ---@field constrain_cursor false|"name"|"editable" ---@field watch_for_changes boolean ---@field keymaps table ---@field use_default_keymaps boolean ----@field view_options oil.ViewOptions +---@field view_options canola.ViewOptions ---@field new_file_mode integer ---@field new_dir_mode integer ---@field extra_scp_args string[] ---@field extra_s3_args string[] ----@field git oil.GitOptions ----@field float oil.FloatWindowConfig ----@field preview_win oil.PreviewWindowConfig ----@field confirmation oil.ConfirmationWindowConfig ----@field progress oil.ProgressWindowConfig ----@field ssh oil.SimpleWindowConfig ----@field keymaps_help oil.SimpleWindowConfig +---@field git canola.GitOptions +---@field float canola.FloatWindowConfig +---@field preview_win canola.PreviewWindowConfig +---@field confirmation canola.ConfirmationWindowConfig +---@field progress canola.ProgressWindowConfig +---@field ssh canola.SimpleWindowConfig +---@field keymaps_help canola.SimpleWindowConfig local M = {} -- For backwards compatibility ----@alias oil.setupOpts oil.SetupOpts +---@alias canola.setupOpts canola.SetupOpts ----@class (exact) oil.SetupOpts ----@field default_file_explorer? boolean Oil will take over directory buffers (e.g. `vim .` or `:e src/`). Set to false if you still want to use netrw. ----@field columns? oil.ColumnSpec[] The columns to display. See :help oil-columns. ----@field buf_options? table Buffer-local options to use for oil buffers ----@field win_options? table Window-local options to use for oil buffers ----@field delete_to_trash? boolean Send deleted files to the trash instead of permanently deleting them (:help oil-trash). ----@field skip_confirm_for_simple_edits? boolean Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits). +---@class (exact) canola.SetupOpts +---@field default_file_explorer? boolean Canola will take over directory buffers (e.g. `vim .` or `:e src/`). Set to false if you still want to use netrw. +---@field columns? canola.ColumnSpec[] The columns to display. See :help canola-columns. +---@field buf_options? table Buffer-local options to use for canola buffers +---@field win_options? table Window-local options to use for canola buffers +---@field delete_to_trash? boolean Send deleted files to the trash instead of permanently deleting them (:help canola-trash). +---@field skip_confirm_for_simple_edits? boolean Skip the confirmation popup for simple operations (:help canola.skip_confirm_for_simple_edits). ---@field prompt_save_on_select_new_entry? boolean Selecting a new/moved/renamed file or directory will prompt you to save changes first (:help prompt_save_on_select_new_entry). ----@field cleanup_delay_ms? integer Oil will automatically delete hidden buffers after this delay. You can set the delay to false to disable cleanup entirely. Note that the cleanup process only starts when none of the oil buffers are currently displayed. ----@field lsp_file_methods? oil.SetupLspFileMethods Configure LSP file operation integration. ----@field constrain_cursor? false|"name"|"editable" Constrain the cursor to the editable parts of the oil buffer. Set to `false` to disable, or "name" to keep it on the file names. ----@field watch_for_changes? boolean Set to true to watch the filesystem for changes and reload oil. +---@field cleanup_delay_ms? integer Canola will automatically delete hidden buffers after this delay. You can set the delay to false to disable cleanup entirely. Note that the cleanup process only starts when none of the canola buffers are currently displayed. +---@field lsp_file_methods? canola.SetupLspFileMethods Configure LSP file operation integration. +---@field constrain_cursor? false|"name"|"editable" Constrain the cursor to the editable parts of the canola buffer. Set to `false` to disable, or "name" to keep it on the file names. +---@field watch_for_changes? boolean Set to true to watch the filesystem for changes and reload canola. ---@field keymaps? table ---@field use_default_keymaps? boolean Set to false to disable all of the above keymaps ----@field view_options? oil.SetupViewOptions Configure which files are shown and how they are shown. +---@field view_options? canola.SetupViewOptions Configure which files are shown and how they are shown. ---@field new_file_mode? integer Permission mode for new files in decimal (default 420 = 0644) ---@field new_dir_mode? integer Permission mode for new directories in decimal (default 493 = 0755) ---@field extra_scp_args? string[] Extra arguments to pass to SCP when moving/copying files over SSH ---@field extra_s3_args? string[] Extra arguments to pass to aws s3 when moving/copying files using aws s3 ----@field git? oil.SetupGitOptions EXPERIMENTAL support for performing file operations with git ----@field float? oil.SetupFloatWindowConfig Configuration for the floating window in oil.open_float ----@field preview_win? oil.SetupPreviewWindowConfig Configuration for the file preview window ----@field confirmation? oil.SetupConfirmationWindowConfig Configuration for the floating action confirmation window ----@field progress? oil.SetupProgressWindowConfig Configuration for the floating progress window ----@field ssh? oil.SetupSimpleWindowConfig Configuration for the floating SSH window ----@field keymaps_help? oil.SetupSimpleWindowConfig Configuration for the floating keymaps help window +---@field git? canola.SetupGitOptions EXPERIMENTAL support for performing file operations with git +---@field float? canola.SetupFloatWindowConfig Configuration for the floating window in canola.open_float +---@field preview_win? canola.SetupPreviewWindowConfig Configuration for the file preview window +---@field confirmation? canola.SetupConfirmationWindowConfig Configuration for the floating action confirmation window +---@field progress? canola.SetupProgressWindowConfig Configuration for the floating progress window +---@field ssh? canola.SetupSimpleWindowConfig Configuration for the floating SSH window +---@field keymaps_help? canola.SetupSimpleWindowConfig Configuration for the floating keymaps help window ----@class (exact) oil.LspFileMethods +---@class (exact) canola.LspFileMethods ---@field enabled boolean ---@field timeout_ms integer ---@field autosave_changes boolean|"unmodified" Set to true to autosave buffers that are updated with LSP willRenameFiles. Set to "unmodified" to only save unmodified buffers. ----@class (exact) oil.SetupLspFileMethods +---@class (exact) canola.SetupLspFileMethods ---@field enabled? boolean Enable or disable LSP file operations ---@field timeout_ms? integer Time to wait for LSP file operations to complete before skipping. ---@field autosave_changes? boolean|"unmodified" Set to true to autosave buffers that are updated with LSP willRenameFiles. Set to "unmodified" to only save unmodified buffers. ----@class (exact) oil.ViewOptions +---@class (exact) canola.ViewOptions ---@field show_hidden boolean ----@field is_hidden_file fun(name: string, bufnr: integer, entry: oil.Entry): boolean ----@field is_always_hidden fun(name: string, bufnr: integer, entry: oil.Entry): boolean +---@field is_hidden_file fun(name: string, bufnr: integer, entry: canola.Entry): boolean +---@field is_always_hidden fun(name: string, bufnr: integer, entry: canola.Entry): boolean ---@field natural_order boolean|"fast" ---@field case_insensitive boolean ----@field sort oil.SortSpec[] ----@field highlight_filename? fun(entry: oil.Entry, is_hidden: boolean, is_link_target: boolean, is_link_orphan: boolean, bufnr: integer): string|nil +---@field sort canola.SortSpec[] +---@field highlight_filename? fun(entry: canola.Entry, is_hidden: boolean, is_link_target: boolean, is_link_orphan: boolean, bufnr: integer): string|nil ----@class (exact) oil.SetupViewOptions +---@class (exact) canola.SetupViewOptions ---@field show_hidden? boolean Show files and directories that start with "." ---@field is_hidden_file? fun(name: string, bufnr: integer): boolean This function defines what is considered a "hidden" file ---@field is_always_hidden? fun(name: string, bufnr: integer): boolean This function defines what will never be shown, even when `show_hidden` is set ---@field natural_order? boolean|"fast" Sort file names with numbers in a more intuitive order for humans. Can be slow for large directories. ---@field case_insensitive? boolean Sort file and directory names case insensitive ----@field sort? oil.SortSpec[] Sort order for the file list ----@field highlight_filename? fun(entry: oil.Entry, is_hidden: boolean, is_link_target: boolean, is_link_orphan: boolean): string|nil Customize the highlight group for the file name +---@field sort? canola.SortSpec[] Sort order for the file list +---@field highlight_filename? fun(entry: canola.Entry, is_hidden: boolean, is_link_target: boolean, is_link_orphan: boolean): string|nil Customize the highlight group for the file name ----@class (exact) oil.SortSpec +---@class (exact) canola.SortSpec ---@field [1] string ---@field [2] "asc"|"desc" ----@class (exact) oil.GitOptions +---@class (exact) canola.GitOptions ---@field add fun(path: string): boolean ---@field mv fun(src_path: string, dest_path: string): boolean ---@field rm fun(path: string): boolean ----@class (exact) oil.SetupGitOptions +---@class (exact) canola.SetupGitOptions ---@field add? fun(path: string): boolean Return true to automatically git add a new file ---@field mv? fun(src_path: string, dest_path: string): boolean Return true to automatically git mv a moved file ---@field rm? fun(path: string): boolean Return true to automatically git rm a deleted file ----@class (exact) oil.WindowDimensionDualConstraint +---@class (exact) canola.WindowDimensionDualConstraint ---@field [1] number ---@field [2] number ----@alias oil.WindowDimension number|oil.WindowDimensionDualConstraint +---@alias canola.WindowDimension number|canola.WindowDimensionDualConstraint ----@class (exact) oil.WindowConfig ----@field max_width oil.WindowDimension ----@field min_width oil.WindowDimension +---@class (exact) canola.WindowConfig +---@field max_width canola.WindowDimension +---@field min_width canola.WindowDimension ---@field width? number ----@field max_height oil.WindowDimension ----@field min_height oil.WindowDimension +---@field max_height canola.WindowDimension +---@field min_height canola.WindowDimension ---@field height? number ---@field border string|string[] ---@field win_options table ----@class (exact) oil.SetupWindowConfig ----@field max_width? oil.WindowDimension Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. max_width = {100, 0.8} means "the lesser of 100 columns or 80% of total" ----@field min_width? oil.WindowDimension Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. min_width = {40, 0.4} means "the greater of 40 columns or 40% of total" +---@class (exact) canola.SetupWindowConfig +---@field max_width? canola.WindowDimension Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. max_width = {100, 0.8} means "the lesser of 100 columns or 80% of total" +---@field min_width? canola.WindowDimension Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. min_width = {40, 0.4} means "the greater of 40 columns or 40% of total" ---@field width? number Define an integer/float for the exact width of the preview window ----@field max_height? oil.WindowDimension Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. max_height = {80, 0.9} means "the lesser of 80 columns or 90% of total" ----@field min_height? oil.WindowDimension Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. min_height = {5, 0.1} means "the greater of 5 columns or 10% of total" +---@field max_height? canola.WindowDimension Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. max_height = {80, 0.9} means "the lesser of 80 columns or 90% of total" +---@field min_height? canola.WindowDimension Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%). Can be a single value or a list of mixed integer/float types. min_height = {5, 0.1} means "the greater of 5 columns or 10% of total" ---@field height? number Define an integer/float for the exact height of the preview window ---@field border? string|string[] Window border ---@field win_options? table ----@alias oil.PreviewMethod +---@alias canola.PreviewMethod ---| '"load"' # Load the previewed file into a buffer ---| '"scratch"' # Put the text into a scratch buffer to avoid LSP attaching ---| '"fast_scratch"' # Put only the visible text into a scratch buffer ----@class (exact) oil.PreviewWindowConfig +---@class (exact) canola.PreviewWindowConfig ---@field update_on_cursor_moved boolean ----@field preview_method oil.PreviewMethod +---@field preview_method canola.PreviewMethod ---@field disable_preview fun(filename: string): boolean ---@field win_options table ----@class (exact) oil.ConfirmationWindowConfig : oil.WindowConfig +---@class (exact) canola.ConfirmationWindowConfig : canola.WindowConfig ----@class (exact) oil.SetupPreviewWindowConfig +---@class (exact) canola.SetupPreviewWindowConfig ---@field update_on_cursor_moved? boolean Whether the preview window is automatically updated when the cursor is moved ---@field disable_preview? fun(filename: string): boolean A function that returns true to disable preview on a file e.g. to avoid lag ----@field preview_method? oil.PreviewMethod How to open the preview window +---@field preview_method? canola.PreviewMethod How to open the preview window ---@field win_options? table Window-local options to use for preview window buffers ----@class (exact) oil.SetupConfirmationWindowConfig : oil.SetupWindowConfig +---@class (exact) canola.SetupConfirmationWindowConfig : canola.SetupWindowConfig ----@class (exact) oil.ProgressWindowConfig : oil.WindowConfig +---@class (exact) canola.ProgressWindowConfig : canola.WindowConfig ---@field minimized_border string|string[] ----@class (exact) oil.SetupProgressWindowConfig : oil.SetupWindowConfig +---@class (exact) canola.SetupProgressWindowConfig : canola.SetupWindowConfig ---@field minimized_border? string|string[] The border for the minimized progress window ----@class (exact) oil.FloatWindowConfig +---@class (exact) canola.FloatWindowConfig ---@field padding integer ---@field max_width integer ---@field max_height integer @@ -389,7 +389,7 @@ local M = {} ---@field preview_split "auto"|"left"|"right"|"above"|"below" ---@field override fun(conf: table): table ----@class (exact) oil.SetupFloatWindowConfig +---@class (exact) canola.SetupFloatWindowConfig ---@field padding? integer ---@field max_width? integer ---@field max_height? integer @@ -399,14 +399,14 @@ local M = {} ---@field preview_split? "auto"|"left"|"right"|"above"|"below" Direction that the preview command will split the window ---@field override? fun(conf: table): table ----@class (exact) oil.SimpleWindowConfig +---@class (exact) canola.SimpleWindowConfig ---@field border string|string[] ----@class (exact) oil.SetupSimpleWindowConfig +---@class (exact) canola.SetupSimpleWindowConfig ---@field border? string|string[] Window border M.setup = function(opts) - opts = opts or vim.g.oil or {} + opts = opts or vim.g.canola or {} local new_conf = vim.tbl_deep_extend('keep', opts, default_config) if not new_conf.use_default_keymaps then @@ -452,7 +452,7 @@ M.setup = function(opts) new_conf.lsp_file_methods.autosave_changes = new_conf.lsp_rename_autosave new_conf.lsp_rename_autosave = nil vim.notify_once( - 'oil config value lsp_rename_autosave has moved to lsp_file_methods.autosave_changes.\nCompatibility will be removed on 2024-09-01.', + 'canola config value lsp_rename_autosave has moved to lsp_file_methods.autosave_changes.\nCompatibility will be removed on 2024-09-01.', vim.log.levels.WARN ) end @@ -474,7 +474,7 @@ M.setup = function(opts) end ---@param scheme nil|string ----@return nil|oil.Adapter +---@return nil|canola.Adapter M.get_adapter_by_scheme = function(scheme) if not scheme then return nil @@ -494,7 +494,7 @@ M.get_adapter_by_scheme = function(scheme) return nil end local ok - ok, adapter = pcall(require, string.format('oil.adapters.%s', name)) + ok, adapter = pcall(require, string.format('canola.adapters.%s', name)) if ok then adapter.name = name M._adapter_by_scheme[scheme] = adapter diff --git a/lua/oil/constants.lua b/lua/canola/constants.lua similarity index 63% rename from lua/oil/constants.lua rename to lua/canola/constants.lua index 3f5a38a..9427837 100644 --- a/lua/oil/constants.lua +++ b/lua/canola/constants.lua @@ -2,9 +2,9 @@ local M = {} ---Store entries as a list-like table for maximum space efficiency and retrieval speed. ---We use the constants below to index into the table. ----@alias oil.InternalEntry {[1]: integer, [2]: string, [3]: oil.EntryType, [4]: nil|table} +---@alias canola.InternalEntry {[1]: integer, [2]: string, [3]: canola.EntryType, [4]: nil|table} --- Indexes into oil.InternalEntry +-- Indexes into canola.InternalEntry M.FIELD_ID = 1 M.FIELD_NAME = 2 M.FIELD_TYPE = 3 diff --git a/lua/oil/fs.lua b/lua/canola/fs.lua similarity index 97% rename from lua/oil/fs.lua rename to lua/canola/fs.lua index 6cb084c..e7daa77 100644 --- a/lua/oil/fs.lua +++ b/lua/canola/fs.lua @@ -1,4 +1,4 @@ -local log = require('oil.log') +local log = require('canola.log') local M = {} local uv = vim.uv or vim.loop @@ -170,7 +170,7 @@ M.mkdirp = function(dir, mode) end ---@param dir string ----@param cb fun(err: nil|string, entries: nil|{type: oil.EntryType, name: string}) +---@param cb fun(err: nil|string, entries: nil|{type: canola.EntryType, name: string}) M.listdir = function(dir, cb) ---@diagnostic disable-next-line: param-type-mismatch, discard-returns uv.fs_opendir(dir, function(open_err, fd) @@ -205,7 +205,7 @@ M.listdir = function(dir, cb) end, 10000) end ----@param entry_type oil.EntryType +---@param entry_type canola.EntryType ---@param path string ---@param cb fun(err: nil|string) M.recursive_delete = function(entry_type, path, cb) @@ -285,7 +285,7 @@ local move_undofile = vim.schedule_wrap(function(src_path, dest_path, copy) ) end) ----@param entry_type oil.EntryType +---@param entry_type canola.EntryType ---@param src_path string ---@param dest_path string ---@param cb fun(err: nil|string) @@ -357,7 +357,7 @@ M.recursive_copy = function(entry_type, src_path, dest_path, cb) end) end ----@param entry_type oil.EntryType +---@param entry_type canola.EntryType ---@param src_path string ---@param dest_path string ---@param cb fun(err: nil|string) diff --git a/lua/oil/git.lua b/lua/canola/git.lua similarity index 97% rename from lua/oil/git.lua rename to lua/canola/git.lua index 9fab6e4..747c123 100644 --- a/lua/oil/git.lua +++ b/lua/canola/git.lua @@ -1,5 +1,5 @@ -- integration with git operations -local fs = require('oil.fs') +local fs = require('canola.fs') local M = {} @@ -75,7 +75,7 @@ M.rm = function(path, cb) end end ----@param entry_type oil.EntryType +---@param entry_type canola.EntryType ---@param src_path string ---@param dest_path string ---@param cb fun(err: nil|string) diff --git a/lua/oil/init.lua b/lua/canola/init.lua similarity index 70% rename from lua/oil/init.lua rename to lua/canola/init.lua index d3e6223..81837fa 100644 --- a/lua/oil/init.lua +++ b/lua/canola/init.lua @@ -1,44 +1,44 @@ local M = {} ----@class (exact) oil.Entry +---@class (exact) canola.Entry ---@field name string ----@field type oil.EntryType +---@field type canola.EntryType ---@field id nil|integer Will be nil if it hasn't been persisted to disk yet ---@field parsed_name nil|string ---@field meta nil|table ----@alias oil.EntryType uv.aliases.fs_types ----@alias oil.HlRange { [1]: string, [2]: integer, [3]: integer } A tuple of highlight group name, col_start, col_end ----@alias oil.HlTuple { [1]: string, [2]: string } A tuple of text, highlight group ----@alias oil.HlRangeTuple { [1]: string, [2]: oil.HlRange[] } A tuple of text, internal highlights ----@alias oil.TextChunk string|oil.HlTuple|oil.HlRangeTuple ----@alias oil.CrossAdapterAction "copy"|"move" +---@alias canola.EntryType uv.aliases.fs_types +---@alias canola.HlRange { [1]: string, [2]: integer, [3]: integer } A tuple of highlight group name, col_start, col_end +---@alias canola.HlTuple { [1]: string, [2]: string } A tuple of text, highlight group +---@alias canola.HlRangeTuple { [1]: string, [2]: canola.HlRange[] } A tuple of text, internal highlights +---@alias canola.TextChunk string|canola.HlTuple|canola.HlRangeTuple +---@alias canola.CrossAdapterAction "copy"|"move" ----@class (exact) oil.Adapter +---@class (exact) canola.Adapter ---@field name string The unique name of the adapter (this will be set automatically) ----@field list fun(path: string, column_defs: string[], cb: fun(err?: string, entries?: oil.InternalEntry[], fetch_more?: fun())) Async function to list a directory. +---@field list fun(path: string, column_defs: string[], cb: fun(err?: string, entries?: canola.InternalEntry[], fetch_more?: fun())) Async function to list a directory. ---@field is_modifiable fun(bufnr: integer): boolean Return true if this directory is modifiable (allows for directories with read-only permissions). ----@field get_column fun(name: string): nil|oil.ColumnDefinition If the adapter has any adapter-specific columns, return them when fetched by name. +---@field get_column fun(name: string): nil|canola.ColumnDefinition If the adapter has any adapter-specific columns, return them when fetched by name. ---@field get_parent? fun(bufname: string): string Get the parent url of the given buffer ----@field normalize_url fun(url: string, callback: fun(url: string)) Before oil opens a url it will be normalized. This allows for link following, path normalizing, and converting an oil file url to the actual path of a file. ----@field get_entry_path? fun(url: string, entry: oil.Entry, callback: fun(path: string)) Similar to normalize_url, but used when selecting an entry ----@field render_action? fun(action: oil.Action): string Render a mutation action for display in the preview window. Only needed if adapter is modifiable. ----@field perform_action? fun(action: oil.Action, cb: fun(err: nil|string)) Perform a mutation action. Only needed if adapter is modifiable. +---@field normalize_url fun(url: string, callback: fun(url: string)) Before canola opens a url it will be normalized. This allows for link following, path normalizing, and converting an canola file url to the actual path of a file. +---@field get_entry_path? fun(url: string, entry: canola.Entry, callback: fun(path: string)) Similar to normalize_url, but used when selecting an entry +---@field render_action? fun(action: canola.Action): string Render a mutation action for display in the preview window. Only needed if adapter is modifiable. +---@field perform_action? fun(action: canola.Action, cb: fun(err: nil|string)) Perform a mutation action. Only needed if adapter is modifiable. ---@field read_file? fun(bufnr: integer) Used for adapters that deal with remote/virtual files. Read the contents of the file into a buffer. ---@field write_file? fun(bufnr: integer) Used for adapters that deal with remote/virtual files. Write the contents of a buffer to the destination. ----@field supported_cross_adapter_actions? table Mapping of adapter name to enum for all other adapters that can be used as a src or dest for move/copy actions. ----@field filter_action? fun(action: oil.Action): boolean When present, filter out actions as they are created ----@field filter_error? fun(action: oil.ParseError): boolean When present, filter out errors from parsing a buffer +---@field supported_cross_adapter_actions? table Mapping of adapter name to enum for all other adapters that can be used as a src or dest for move/copy actions. +---@field filter_action? fun(action: canola.Action): boolean When present, filter out actions as they are created +---@field filter_error? fun(action: canola.ParseError): boolean When present, filter out errors from parsing a buffer ---Get the entry on a specific line (1-indexed) ---@param bufnr integer ---@param lnum integer ----@return nil|oil.Entry +---@return nil|canola.Entry M.get_entry_on_line = function(bufnr, lnum) - local columns = require('oil.columns') - local parser = require('oil.mutator.parser') - local util = require('oil.util') - if vim.bo[bufnr].filetype ~= 'oil' then + local columns = require('canola.columns') + local parser = require('canola.mutator.parser') + local util = require('canola.util') + if vim.bo[bufnr].filetype ~= 'canola' then return nil end local adapter = util.get_adapter(bufnr) @@ -87,22 +87,22 @@ M.get_entry_on_line = function(bufnr, lnum) end ---Get the entry currently under the cursor ----@return nil|oil.Entry +---@return nil|canola.Entry M.get_cursor_entry = function() local lnum = vim.api.nvim_win_get_cursor(0)[1] return M.get_entry_on_line(0, lnum) end ----Discard all changes made to oil buffers +---Discard all changes made to canola buffers M.discard_all_changes = function() - local view = require('oil.view') + local view = require('canola.view') for _, bufnr in ipairs(view.get_all_buffers()) do if vim.bo[bufnr].modified then view.render_buffer_async(bufnr, {}, function(err) if err then vim.notify( string.format( - 'Error rendering oil buffer %s: %s', + 'Error rendering canola buffer %s: %s', vim.api.nvim_buf_get_name(bufnr), err ), @@ -114,38 +114,38 @@ M.discard_all_changes = function() end end ----Change the display columns for oil ----@param cols oil.ColumnSpec[] +---Change the display columns for canola +---@param cols canola.ColumnSpec[] M.set_columns = function(cols) - require('oil.view').set_columns(cols) + require('canola.view').set_columns(cols) end ----Change the sort order for oil ----@param sort oil.SortSpec[] List of columns plus direction. See :help oil-columns to see which ones are sortable. +---Change the sort order for canola +---@param sort canola.SortSpec[] List of columns plus direction. See :help canola-columns to see which ones are sortable. ---@example ---- require("oil").set_sort({ { "type", "asc" }, { "size", "desc" } }) +--- require("canola").set_sort({ { "type", "asc" }, { "size", "desc" } }) M.set_sort = function(sort) - require('oil.view').set_sort(sort) + require('canola.view').set_sort(sort) end ----Change how oil determines if the file is hidden ----@param is_hidden_file fun(filename: string, bufnr: integer, entry: oil.Entry): boolean Return true if the file/dir should be hidden +---Change how canola determines if the file is hidden +---@param is_hidden_file fun(filename: string, bufnr: integer, entry: canola.Entry): boolean Return true if the file/dir should be hidden M.set_is_hidden_file = function(is_hidden_file) - require('oil.view').set_is_hidden_file(is_hidden_file) + require('canola.view').set_is_hidden_file(is_hidden_file) end ---Toggle hidden files and directories M.toggle_hidden = function() - require('oil.view').toggle_hidden() + require('canola.view').toggle_hidden() end ---Get the current directory ---@param bufnr? integer ---@return nil|string M.get_current_dir = function(bufnr) - local config = require('oil.config') - local fs = require('oil.fs') - local util = require('oil.util') + local config = require('canola.config') + local fs = require('canola.fs') + local util = require('canola.util') local buf_name = vim.api.nvim_buf_get_name(bufnr or 0) local scheme, path = util.parse_url(buf_name) if config.adapters[scheme] == 'files' then @@ -154,19 +154,19 @@ M.get_current_dir = function(bufnr) end end ----Get the oil url for a given directory +---Get the canola url for a given directory ---@private ---@param dir nil|string When nil, use the cwd ----@param use_oil_parent nil|boolean If in an oil buffer, return the parent (default true) +---@param use_canola_parent nil|boolean If in an canola buffer, return the parent (default true) ---@return string The parent url ---@return nil|string The basename (if present) of the file/dir we were just in -M.get_url_for_path = function(dir, use_oil_parent) - if use_oil_parent == nil then - use_oil_parent = true +M.get_url_for_path = function(dir, use_canola_parent) + if use_canola_parent == nil then + use_canola_parent = true end - local config = require('oil.config') - local fs = require('oil.fs') - local util = require('oil.util') + local config = require('canola.config') + local fs = require('canola.fs') + local util = require('canola.util') if vim.bo.filetype == 'netrw' and not dir then dir = vim.b.netrw_curdir end @@ -180,20 +180,20 @@ M.get_url_for_path = function(dir, use_oil_parent) return config.adapter_to_scheme.files .. path else local bufname = vim.api.nvim_buf_get_name(0) - return M.get_buffer_parent_url(bufname, use_oil_parent) + return M.get_buffer_parent_url(bufname, use_canola_parent) end end ---@private ---@param bufname string ----@param use_oil_parent boolean If in an oil buffer, return the parent +---@param use_canola_parent boolean If in an canola buffer, return the parent ---@return string ---@return nil|string -M.get_buffer_parent_url = function(bufname, use_oil_parent) - local config = require('oil.config') - local fs = require('oil.fs') - local pathutil = require('oil.pathutil') - local util = require('oil.util') +M.get_buffer_parent_url = function(bufname, use_canola_parent) + local config = require('canola.config') + local fs = require('canola.fs') + local pathutil = require('canola.pathutil') + local util = require('canola.util') local scheme, path = util.parse_url(bufname) if not scheme then local parent, basename @@ -219,7 +219,7 @@ M.get_buffer_parent_url = function(bufname, use_oil_parent) return vim.fn.getcwd() end - if not use_oil_parent then + if not use_canola_parent then return bufname end local adapter = assert(config.get_adapter_by_scheme(scheme)) @@ -239,19 +239,19 @@ M.get_buffer_parent_url = function(bufname, use_oil_parent) end end ----@class (exact) oil.OpenOpts ----@field preview? oil.OpenPreviewOpts When present, open the preview window after opening oil +---@class (exact) canola.OpenOpts +---@field preview? canola.OpenPreviewOpts When present, open the preview window after opening canola ----Open oil browser in a floating window +---Open canola browser in a floating window ---@param dir? string When nil, open the parent of the current buffer, or the cwd if current buffer is not a file ----@param opts? oil.OpenOpts ----@param cb? fun() Called after the oil buffer is ready +---@param opts? canola.OpenOpts +---@param cb? fun() Called after the canola buffer is ready M.open_float = function(dir, opts, cb) opts = opts or {} - local config = require('oil.config') - local layout = require('oil.layout') - local util = require('oil.util') - local view = require('oil.view') + local config = require('canola.config') + local layout = require('canola.layout') + local util = require('canola.util') + local view = require('canola.view') local parent_url, basename = M.get_url_for_path(dir) if basename then @@ -264,8 +264,8 @@ M.open_float = function(dir, opts, cb) local original_winid = vim.api.nvim_get_current_win() local winid = vim.api.nvim_open_win(bufnr, true, win_opts) - vim.w[winid].is_oil_win = true - vim.w[winid].oil_original_win = original_winid + vim.w[winid].is_canola_win = true + vim.w[winid].canola_original_win = original_winid for k, v in pairs(config.float.win_options) do vim.api.nvim_set_option_value(k, v, { scope = 'local', win = winid }) end @@ -273,8 +273,8 @@ M.open_float = function(dir, opts, cb) table.insert( autocmds, vim.api.nvim_create_autocmd('WinLeave', { - desc = 'Close floating oil window', - group = 'Oil', + desc = 'Close floating canola window', + group = 'Canola', callback = vim.schedule_wrap(function() if util.is_floating_win() or vim.fn.win_gettype() == 'command' then return @@ -294,7 +294,7 @@ M.open_float = function(dir, opts, cb) table.insert( autocmds, vim.api.nvim_create_autocmd('BufWinEnter', { - desc = 'Reset local oil window options when buffer changes', + desc = 'Reset local canola window options when buffer changes', pattern = '*', callback = function(params) local winbuf = params.buf @@ -340,12 +340,12 @@ M.open_float = function(dir, opts, cb) end end ----Open oil browser in a floating window, or close it if open +---Open canola browser in a floating window, or close it if open ---@param dir nil|string When nil, open the parent of the current buffer, or the cwd if current buffer is not a file ----@param opts? oil.OpenOpts ----@param cb? fun() Called after the oil buffer is ready +---@param opts? canola.OpenOpts +---@param cb? fun() Called after the canola buffer is ready M.toggle_float = function(dir, opts, cb) - if vim.w.is_oil_win then + if vim.w.is_canola_win then M.close() if cb then cb() @@ -355,32 +355,32 @@ M.toggle_float = function(dir, opts, cb) end end ----@param oil_bufnr? integer -local function update_preview_window(oil_bufnr) - oil_bufnr = oil_bufnr or 0 - local util = require('oil.util') - util.run_after_load(oil_bufnr, function() +---@param canola_bufnr? integer +local function update_preview_window(canola_bufnr) + canola_bufnr = canola_bufnr or 0 + local util = require('canola.util') + util.run_after_load(canola_bufnr, function() local cursor_entry = M.get_cursor_entry() local preview_win_id = util.get_preview_win() if cursor_entry and preview_win_id - and cursor_entry.id ~= vim.w[preview_win_id].oil_entry_id + and cursor_entry.id ~= vim.w[preview_win_id].canola_entry_id then M.open_preview() end end) end ----Open oil browser for a directory +---Open canola browser for a directory ---@param dir? string When nil, open the parent of the current buffer, or the cwd if current buffer is not a file ----@param opts? oil.OpenOpts ----@param cb? fun() Called after the oil buffer is ready +---@param opts? canola.OpenOpts +---@param cb? fun() Called after the canola buffer is ready M.open = function(dir, opts, cb) opts = opts or {} - local config = require('oil.config') - local util = require('oil.util') - local view = require('oil.view') + local config = require('canola.config') + local util = require('canola.util') + local view = require('canola.view') local parent_url, basename = M.get_url_for_path(dir) if basename then view.set_last_cursor(parent_url, basename) @@ -403,11 +403,11 @@ M.open = function(dir, opts, cb) update_preview_window() end ----@class oil.CloseOpts ----@field exit_if_last_buf? boolean Exit vim if this oil buffer is the last open buffer +---@class canola.CloseOpts +---@field exit_if_last_buf? boolean Exit vim if this canola buffer is the last open buffer ----Restore the buffer that was present when oil was opened ----@param opts? oil.CloseOpts +---Restore the buffer that was present when canola was opened +---@param opts? canola.CloseOpts M.close = function(opts) opts = opts or {} local mode = vim.api.nvim_get_mode().mode @@ -415,27 +415,27 @@ M.close = function(opts) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n', false) return end - -- If we're in a floating oil window, close it and try to restore focus to the original window - if vim.w.is_oil_win then - local original_winid = vim.w.oil_original_win + -- If we're in a floating canola window, close it and try to restore focus to the original window + if vim.w.is_canola_win then + local original_winid = vim.w.canola_original_win vim.api.nvim_win_close(0, true) if original_winid and vim.api.nvim_win_is_valid(original_winid) then vim.api.nvim_set_current_win(original_winid) end return end - local ok, bufnr = pcall(vim.api.nvim_win_get_var, 0, 'oil_original_buffer') + local ok, bufnr = pcall(vim.api.nvim_win_get_var, 0, 'canola_original_buffer') if ok and vim.api.nvim_buf_is_valid(bufnr) then vim.api.nvim_win_set_buf(0, bufnr) - if vim.w.oil_original_view then - vim.fn.winrestview(vim.w.oil_original_view) + if vim.w.canola_original_view then + vim.fn.winrestview(vim.w.canola_original_view) end return end -- Deleting the buffer closes all windows with that buffer open, so navigate to a different -- buffer first - local oilbuf = vim.api.nvim_get_current_buf() + local canolabuf = vim.api.nvim_get_current_buf() ok = pcall(vim.cmd.bprev) -- If `bprev` failed, there are no buffers open if not ok then @@ -446,22 +446,22 @@ M.close = function(opts) vim.cmd.enew() end end - vim.api.nvim_buf_delete(oilbuf, { force = true }) + vim.api.nvim_buf_delete(canolabuf, { force = true }) end ----@class oil.OpenPreviewOpts +---@class canola.OpenPreviewOpts ---@field vertical? boolean Open the buffer in a vertical split ---@field horizontal? boolean Open the buffer in a horizontal split ---@field split? "aboveleft"|"belowright"|"topleft"|"botright" Split modifier ---Preview the entry under the cursor in a split ----@param opts? oil.OpenPreviewOpts +---@param opts? canola.OpenPreviewOpts ---@param callback? fun(err: nil|string) Called once the preview window has been opened M.open_preview = function(opts, callback) opts = opts or {} - local config = require('oil.config') - local layout = require('oil.layout') - local util = require('oil.util') + local config = require('canola.config') + local layout = require('canola.layout') + local util = require('canola.util') local function finish(err) if err then @@ -501,7 +501,7 @@ M.open_preview = function(opts, callback) local root_win_opts, preview_win_opts = layout.split_window(0, config.float.preview_split, config.float.padding) - local win_opts_oil = { + local win_opts_canola = { relative = 'editor', width = root_win_opts.width, height = root_win_opts.height, @@ -510,7 +510,7 @@ M.open_preview = function(opts, callback) border = config.float.border, zindex = 45, } - vim.api.nvim_win_set_config(0, win_opts_oil) + vim.api.nvim_win_set_config(0, win_opts_canola) local win_opts = { relative = 'editor', width = preview_win_opts.width, @@ -530,7 +530,7 @@ M.open_preview = function(opts, callback) preview_win = vim.api.nvim_open_win(bufnr, true, win_opts) vim.api.nvim_set_option_value('previewwindow', true, { scope = 'local', win = preview_win }) - vim.api.nvim_win_set_var(preview_win, 'oil_preview', true) + vim.api.nvim_win_set_var(preview_win, 'canola_preview', true) vim.api.nvim_set_current_win(prev_win) elseif vim.fn.has('nvim-0.9') == 1 then vim.api.nvim_win_set_config(preview_win, { title = entry_title }) @@ -585,7 +585,7 @@ M.open_preview = function(opts, callback) filebufnr = vim.fn.bufadd(normalized_url) if entry_is_file and vim.fn.bufloaded(filebufnr) == 0 then vim.bo[filebufnr].bufhidden = 'wipe' - vim.b[filebufnr].oil_preview_buffer = true + vim.b[filebufnr].canola_preview_buffer = true end end @@ -602,17 +602,17 @@ M.open_preview = function(opts, callback) -- If we called open_preview during an autocmd, then the edit command may not trigger the -- BufReadCmd to load the buffer. So we need to do it manually. - if util.is_oil_bufnr(filebufnr) and not vim.b[filebufnr].oil_ready then - M.load_oil_buffer(filebufnr) + if util.is_canola_bufnr(filebufnr) and not vim.b[filebufnr].canola_ready then + M.load_canola_buffer(filebufnr) end vim.api.nvim_set_option_value('previewwindow', true, { scope = 'local', win = 0 }) - vim.api.nvim_win_set_var(0, 'oil_preview', true) + vim.api.nvim_win_set_var(0, 'canola_preview', true) for k, v in pairs(config.preview_win.win_options) do vim.api.nvim_set_option_value(k, v, { scope = 'local', win = preview_win }) end - vim.w.oil_entry_id = entry.id - vim.w.oil_source_win = prev_win + vim.w.canola_entry_id = entry.id + vim.w.canola_source_win = prev_win if has_multicursors then hack_set_win(prev_win) mc.restoreCursors() @@ -627,22 +627,22 @@ M.open_preview = function(opts, callback) end) end ----@class (exact) oil.SelectOpts +---@class (exact) canola.SelectOpts ---@field vertical? boolean Open the buffer in a vertical split ---@field horizontal? boolean Open the buffer in a horizontal split ---@field split? "aboveleft"|"belowright"|"topleft"|"botright" Split modifier ---@field tab? boolean Open the buffer in a new tab ----@field close? boolean Close the original oil buffer once selection is made +---@field close? boolean Close the original canola buffer once selection is made ---@field handle_buffer_callback? fun(buf_id: integer) If defined, all other buffer related options here would be ignored. This callback allows you to take over the process of opening the buffer yourself. ---Select the entry under the cursor ----@param opts nil|oil.SelectOpts +---@param opts nil|canola.SelectOpts ---@param callback nil|fun(err: nil|string) Called once all entries have been opened M.select = function(opts, callback) - local cache = require('oil.cache') - local config = require('oil.config') - local constants = require('oil.constants') - local util = require('oil.util') + local cache = require('canola.cache') + local config = require('canola.config') + local constants = require('canola.constants') + local util = require('canola.util') local FIELD_META = constants.FIELD_META opts = vim.tbl_extend('keep', opts or {}, {}) @@ -666,12 +666,12 @@ M.select = function(opts, callback) end local adapter = util.get_adapter(0) if not adapter then - return finish('Not an oil buffer') + return finish('Not an canola buffer') end local visual_range = util.get_visual_range() - ---@type oil.Entry[] + ---@type canola.Entry[] local entries = {} if visual_range then for i = visual_range.start_lnum, visual_range.end_lnum do @@ -723,7 +723,7 @@ M.select = function(opts, callback) end local prev_win = vim.api.nvim_get_current_win() - local oil_bufnr = vim.api.nvim_get_current_buf() + local canola_bufnr = vim.api.nvim_get_current_buf() -- Async iter over entries so we can normalize the url before opening local i = 1 @@ -742,14 +742,14 @@ M.select = function(opts, callback) end else -- Close floating window before opening a file - if vim.w.is_oil_win then + if vim.w.is_canola_win then M.close() end end -- Normalize the url before opening to prevent needing to rename them inside the BufReadCmd -- Renaming buffers during opening can lead to missed autocmds - util.get_edit_path(oil_bufnr, entry, function(normalized_url) + util.get_edit_path(canola_bufnr, entry, function(normalized_url) local mods = { vertical = opts.vertical, horizontal = opts.horizontal, @@ -760,7 +760,7 @@ M.select = function(opts, callback) local entry_is_file = not vim.endswith(normalized_url, '/') -- The :buffer command doesn't set buflisted=true - -- So do that for normal files or for oil dirs if config set buflisted=true + -- So do that for normal files or for canola dirs if config set buflisted=true if entry_is_file or config.buf_options.buflisted then vim.bo[filebufnr].buflisted = true end @@ -815,9 +815,9 @@ end ---@param bufnr integer ---@return boolean local function maybe_hijack_directory_buffer(bufnr) - local config = require('oil.config') - local fs = require('oil.fs') - local util = require('oil.util') + local config = require('canola.config') + local fs = require('canola.fs') + local util = require('canola.util') if not config.default_file_explorer then return false end @@ -839,147 +839,147 @@ end M._get_highlights = function() return { { - name = 'OilEmpty', + name = 'CanolaEmpty', link = 'Comment', desc = 'Empty column values', }, { - name = 'OilHidden', + name = 'CanolaHidden', link = 'Comment', - desc = 'Hidden entry in an oil buffer', + desc = 'Hidden entry in an canola buffer', }, { - name = 'OilDir', + name = 'CanolaDir', link = 'Directory', - desc = 'Directory names in an oil buffer', + desc = 'Directory names in an canola buffer', }, { - name = 'OilDirHidden', - link = 'OilHidden', - desc = 'Hidden directory names in an oil buffer', + name = 'CanolaDirHidden', + link = 'CanolaHidden', + desc = 'Hidden directory names in an canola buffer', }, { - name = 'OilDirIcon', - link = 'OilDir', + name = 'CanolaDirIcon', + link = 'CanolaDir', desc = 'Icon for directories', }, { - name = 'OilFileIcon', + name = 'CanolaFileIcon', link = nil, desc = 'Icon for files', }, { - name = 'OilSocket', + name = 'CanolaSocket', link = 'Keyword', - desc = 'Socket files in an oil buffer', + desc = 'Socket files in an canola buffer', }, { - name = 'OilSocketHidden', - link = 'OilHidden', - desc = 'Hidden socket files in an oil buffer', + name = 'CanolaSocketHidden', + link = 'CanolaHidden', + desc = 'Hidden socket files in an canola buffer', }, { - name = 'OilLink', + name = 'CanolaLink', link = nil, - desc = 'Soft links in an oil buffer', + desc = 'Soft links in an canola buffer', }, { - name = 'OilOrphanLink', + name = 'CanolaOrphanLink', link = nil, - desc = 'Orphaned soft links in an oil buffer', + desc = 'Orphaned soft links in an canola buffer', }, { - name = 'OilLinkHidden', - link = 'OilHidden', - desc = 'Hidden soft links in an oil buffer', + name = 'CanolaLinkHidden', + link = 'CanolaHidden', + desc = 'Hidden soft links in an canola buffer', }, { - name = 'OilOrphanLinkHidden', - link = 'OilLinkHidden', - desc = 'Hidden orphaned soft links in an oil buffer', + name = 'CanolaOrphanLinkHidden', + link = 'CanolaLinkHidden', + desc = 'Hidden orphaned soft links in an canola buffer', }, { - name = 'OilLinkTarget', + name = 'CanolaLinkTarget', link = 'Comment', desc = 'The target of a soft link', }, { - name = 'OilOrphanLinkTarget', + name = 'CanolaOrphanLinkTarget', link = 'DiagnosticError', desc = 'The target of an orphaned soft link', }, { - name = 'OilLinkTargetHidden', - link = 'OilHidden', + name = 'CanolaLinkTargetHidden', + link = 'CanolaHidden', desc = 'The target of a hidden soft link', }, { - name = 'OilOrphanLinkTargetHidden', - link = 'OilOrphanLinkTarget', + name = 'CanolaOrphanLinkTargetHidden', + link = 'CanolaOrphanLinkTarget', desc = 'The target of an hidden orphaned soft link', }, { - name = 'OilFile', + name = 'CanolaFile', link = nil, - desc = 'Normal files in an oil buffer', + desc = 'Normal files in an canola buffer', }, { - name = 'OilFileHidden', - link = 'OilHidden', - desc = 'Hidden normal files in an oil buffer', + name = 'CanolaFileHidden', + link = 'CanolaHidden', + desc = 'Hidden normal files in an canola buffer', }, { - name = 'OilExecutable', + name = 'CanolaExecutable', link = 'DiagnosticOk', - desc = 'Executable files in an oil buffer', + desc = 'Executable files in an canola buffer', }, { - name = 'OilExecutableHidden', - link = 'OilHidden', - desc = 'Hidden executable files in an oil buffer', + name = 'CanolaExecutableHidden', + link = 'CanolaHidden', + desc = 'Hidden executable files in an canola buffer', }, { - name = 'OilCreate', + name = 'CanolaCreate', link = 'DiagnosticInfo', - desc = 'Create action in the oil preview window', + desc = 'Create action in the canola preview window', }, { - name = 'OilDelete', + name = 'CanolaDelete', link = 'DiagnosticError', - desc = 'Delete action in the oil preview window', + desc = 'Delete action in the canola preview window', }, { - name = 'OilMove', + name = 'CanolaMove', link = 'DiagnosticWarn', - desc = 'Move action in the oil preview window', + desc = 'Move action in the canola preview window', }, { - name = 'OilCopy', + name = 'CanolaCopy', link = 'DiagnosticHint', - desc = 'Copy action in the oil preview window', + desc = 'Copy action in the canola preview window', }, { - name = 'OilChange', + name = 'CanolaChange', link = 'Special', - desc = 'Change action in the oil preview window', + desc = 'Change action in the canola preview window', }, { - name = 'OilRestore', - link = 'OilCreate', - desc = 'Restore (from the trash) action in the oil preview window', + name = 'CanolaRestore', + link = 'CanolaCreate', + desc = 'Restore (from the trash) action in the canola preview window', }, { - name = 'OilPurge', - link = 'OilDelete', - desc = 'Purge (Permanently delete a file from trash) action in the oil preview window', + name = 'CanolaPurge', + link = 'CanolaDelete', + desc = 'Purge (Permanently delete a file from trash) action in the canola preview window', }, { - name = 'OilTrash', - link = 'OilDelete', - desc = 'Trash (delete a file to trash) action in the oil preview window', + name = 'CanolaTrash', + link = 'CanolaDelete', + desc = 'Trash (delete a file to trash) action in the canola preview window', }, { - name = 'OilTrashSourcePath', + name = 'CanolaTrashSourcePath', link = 'Comment', desc = 'Virtual text that shows the original path of file in the trash', }, @@ -1023,28 +1023,28 @@ M.save = function(opts, cb) end end end - local mutator = require('oil.mutator') + local mutator = require('canola.mutator') mutator.try_write_changes(opts.confirm, cb) end local function restore_alt_buf() - if vim.bo.filetype == 'oil' then - require('oil.view').set_win_options() - vim.api.nvim_win_set_var(0, 'oil_did_enter', true) - elseif vim.w.oil_did_enter then - vim.api.nvim_win_del_var(0, 'oil_did_enter') - -- We are entering a non-oil buffer *after* having been in an oil buffer - local has_orig, orig_buffer = pcall(vim.api.nvim_win_get_var, 0, 'oil_original_buffer') + if vim.bo.filetype == 'canola' then + require('canola.view').set_win_options() + vim.api.nvim_win_set_var(0, 'canola_did_enter', true) + elseif vim.w.canola_did_enter then + vim.api.nvim_win_del_var(0, 'canola_did_enter') + -- We are entering a non-canola buffer *after* having been in an canola buffer + local has_orig, orig_buffer = pcall(vim.api.nvim_win_get_var, 0, 'canola_original_buffer') if has_orig and vim.api.nvim_buf_is_valid(orig_buffer) then if vim.api.nvim_get_current_buf() ~= orig_buffer then - -- If we are editing a new file after navigating around oil, set the alternate buffer - -- to be the last buffer we were in before opening oil + -- If we are editing a new file after navigating around canola, set the alternate buffer + -- to be the last buffer we were in before opening canola vim.fn.setreg('#', orig_buffer) else - -- If we are editing the same buffer that we started oil from, set the alternate to be - -- what it was before we opened oil + -- If we are editing the same buffer that we started canola from, set the alternate to be + -- what it was before we opened canola local has_orig_alt, alt_buffer = - pcall(vim.api.nvim_win_get_var, 0, 'oil_original_alternate') + pcall(vim.api.nvim_win_get_var, 0, 'canola_original_alternate') if has_orig_alt and vim.api.nvim_buf_is_valid(alt_buffer) then vim.fn.setreg('#', alt_buffer) end @@ -1055,12 +1055,12 @@ end ---@private ---@param bufnr integer -M.load_oil_buffer = function(bufnr) - local config = require('oil.config') - local keymap_util = require('oil.keymap_util') - local loading = require('oil.loading') - local util = require('oil.util') - local view = require('oil.view') +M.load_canola_buffer = function(bufnr) + local config = require('canola.config') + local keymap_util = require('canola.keymap_util') + local loading = require('canola.loading') + local util = require('canola.util') + local view = require('canola.view') local bufname = vim.api.nvim_buf_get_name(bufnr) local scheme, path = util.parse_url(bufname) if config.adapter_aliases[scheme] then @@ -1081,7 +1081,7 @@ M.load_oil_buffer = function(bufnr) -- directory, and can set the filetype early. This is helpful for adapters with a lot of latency -- (e.g. ssh) because it will set up the filetype keybinds at the *beginning* of the loading -- process. - vim.bo[bufnr].filetype = 'oil' + vim.bo[bufnr].filetype = 'canola' vim.bo[bufnr].buftype = 'acwrite' keymap_util.set_keymaps(config.keymaps, bufnr) end @@ -1131,17 +1131,17 @@ M.load_oil_buffer = function(bufnr) adapter.normalize_url(bufname, finish) end -local function close_preview_window_if_not_in_oil() - local util = require('oil.util') +local function close_preview_window_if_not_in_canola() + local util = require('canola.util') local preview_win_id = util.get_preview_win() - if not preview_win_id or not vim.w[preview_win_id].oil_entry_id then + if not preview_win_id or not vim.w[preview_win_id].canola_entry_id then return end - local oil_source_win = vim.w[preview_win_id].oil_source_win - if oil_source_win and vim.api.nvim_win_is_valid(oil_source_win) then - local src_buf = vim.api.nvim_win_get_buf(oil_source_win) - if util.is_oil_bufnr(src_buf) then + local canola_source_win = vim.w[preview_win_id].canola_source_win + if canola_source_win and vim.api.nvim_win_is_valid(canola_source_win) then + local src_buf = vim.api.nvim_win_get_buf(canola_source_win) + if util.is_canola_bufnr(src_buf) then return end end @@ -1151,16 +1151,16 @@ local function close_preview_window_if_not_in_oil() end local _on_key_ns = 0 ----Initialize oil ----@param opts oil.setupOpts|nil +---Initialize canola +---@param opts canola.setupOpts|nil M.setup = function(opts) - local Ringbuf = require('oil.ringbuf') - local config = require('oil.config') + local Ringbuf = require('canola.ringbuf') + local config = require('canola.config') config.setup(opts) set_colors() local callback = function(args) - local util = require('oil.util') + local util = require('canola.util') if args.smods.tab > 0 then vim.cmd.tabnew() end @@ -1182,7 +1182,7 @@ M.setup = function(opts) preview = true table.remove(args.fargs, i) elseif v == '--progress' then - local mutator = require('oil.mutator') + local mutator = require('canola.mutator') if mutator.is_mutating() then mutator.show_progress() else @@ -1210,7 +1210,7 @@ M.setup = function(opts) if trash then local url = M.get_url_for_path(path, false) local _, new_path = util.parse_url(url) - path = 'oil-trash://' .. new_path + path = 'canola-trash://' .. new_path end if preview then open_opts.preview = {} @@ -1218,11 +1218,16 @@ M.setup = function(opts) M[method](path, open_opts) end vim.api.nvim_create_user_command( - 'Oil', + 'Canola', callback, - { desc = 'Open oil file browser on a directory', nargs = '*', complete = 'dir', count = true } + { + desc = 'Open canola file browser on a directory', + nargs = '*', + complete = 'dir', + count = true, + } ) - local aug = vim.api.nvim_create_augroup('Oil', {}) + local aug = vim.api.nvim_create_augroup('Canola', {}) if config.default_file_explorer then vim.g.loaded_netrw = 1 @@ -1237,15 +1242,15 @@ M.setup = function(opts) local filetype_patterns = {} for scheme in pairs(config.adapters) do table.insert(patterns, scheme .. '*') - filetype_patterns[scheme .. '.*'] = { 'oil', { priority = 10 } } + filetype_patterns[scheme .. '.*'] = { 'canola', { priority = 10 } } end for scheme in pairs(config.adapter_aliases) do table.insert(patterns, scheme .. '*') - filetype_patterns[scheme .. '.*'] = { 'oil', { priority = 10 } } + filetype_patterns[scheme .. '.*'] = { 'canola', { priority = 10 } } end local scheme_pattern = table.concat(patterns, ',') -- We need to add these patterns to the filetype matcher so the filetype doesn't get overridden - -- by other patterns. See https://github.com/stevearc/oil.nvim/issues/47 + -- by other patterns. See https://github.com/stevearc/canola.nvim/issues/47 vim.filetype.add({ pattern = filetype_patterns, }) @@ -1257,7 +1262,7 @@ M.setup = function(opts) end, _on_key_ns) end vim.api.nvim_create_autocmd('ColorScheme', { - desc = 'Set default oil highlights', + desc = 'Set default canola highlights', group = aug, pattern = '*', callback = set_colors, @@ -1267,7 +1272,7 @@ M.setup = function(opts) pattern = scheme_pattern, nested = true, callback = function(params) - M.load_oil_buffer(params.buf) + M.load_canola_buffer(params.buf) end, }) vim.api.nvim_create_autocmd('BufWriteCmd', { @@ -1312,45 +1317,45 @@ M.setup = function(opts) group = aug, pattern = '*', callback = function() - local util = require('oil.util') - if not util.is_oil_bufnr(0) then - vim.w.oil_original_buffer = vim.api.nvim_get_current_buf() - vim.w.oil_original_view = vim.fn.winsaveview() + local util = require('canola.util') + if not util.is_canola_bufnr(0) then + vim.w.canola_original_buffer = vim.api.nvim_get_current_buf() + vim.w.canola_original_view = vim.fn.winsaveview() ---@diagnostic disable-next-line: param-type-mismatch - vim.w.oil_original_alternate = vim.fn.bufnr('#') + vim.w.canola_original_alternate = vim.fn.bufnr('#') end end, }) vim.api.nvim_create_autocmd('BufEnter', { - desc = 'Set/unset oil window options and restore alternate buffer', + desc = 'Set/unset canola window options and restore alternate buffer', group = aug, pattern = '*', callback = function() - local util = require('oil.util') + local util = require('canola.util') local bufname = vim.api.nvim_buf_get_name(0) local scheme = util.parse_url(bufname) - local is_oil_buf = scheme and config.adapters[scheme] - -- We want to filter out oil buffers that are not directories (i.e. ssh files) - local is_oil_dir_or_unknown = (vim.bo.filetype == 'oil' or vim.bo.filetype == '') - if is_oil_buf and is_oil_dir_or_unknown then - local view = require('oil.view') + local is_canola_buf = scheme and config.adapters[scheme] + -- We want to filter out canola buffers that are not directories (i.e. ssh files) + local is_canola_dir_or_unknown = (vim.bo.filetype == 'canola' or vim.bo.filetype == '') + if is_canola_buf and is_canola_dir_or_unknown then + local view = require('canola.view') view.maybe_set_cursor() - -- While we are in an oil buffer, set the alternate file to the buffer we were in prior to - -- opening oil - local has_orig, orig_buffer = pcall(vim.api.nvim_win_get_var, 0, 'oil_original_buffer') + -- While we are in an canola buffer, set the alternate file to the buffer we were in prior to + -- opening canola + local has_orig, orig_buffer = pcall(vim.api.nvim_win_get_var, 0, 'canola_original_buffer') if has_orig and vim.api.nvim_buf_is_valid(orig_buffer) then vim.fn.setreg('#', orig_buffer) end view.set_win_options() - vim.w.oil_did_enter = true + vim.w.canola_did_enter = true elseif vim.fn.isdirectory(bufname) == 0 then - -- Only run this logic if we are *not* in an oil buffer (and it's not a directory, which - -- will be replaced by an oil:// url) - -- Oil buffers have to run it in BufReadCmd after confirming they are a directory or a file + -- Only run this logic if we are *not* in an canola buffer (and it's not a directory, which + -- will be replaced by a canola:// url) + -- Canola buffers have to run it in BufReadCmd after confirming they are a directory or a file restore_alt_buf() end - close_preview_window_if_not_in_oil() + close_preview_window_if_not_in_canola() end, }) @@ -1360,9 +1365,9 @@ M.setup = function(opts) pattern = '*', callback = function() -- If we have entered a "preview" buffer in a non-preview window, reset bufhidden - if vim.b.oil_preview_buffer and not vim.wo.previewwindow then + if vim.b.canola_preview_buffer and not vim.wo.previewwindow then vim.bo.bufhidden = vim.api.nvim_get_option_value('bufhidden', { scope = 'global' }) - vim.b.oil_preview_buffer = nil + vim.b.canola_preview_buffer = nil end end, }) @@ -1374,30 +1379,30 @@ M.setup = function(opts) once = true, callback = function() vim.notify( - 'If you are trying to browse using Oil, use oil-ssh:// instead of scp://\nSet `silence_scp_warning = true` in oil.setup() to disable this message.\nSee https://github.com/stevearc/oil.nvim/issues/27 for more information.', + 'If you are trying to browse using Canola, use canola-ssh:// instead of scp://\nSet `silence_scp_warning = true` in canola.setup() to disable this message.\nSee https://github.com/stevearc/canola.nvim/issues/27 for more information.', vim.log.levels.WARN ) end, }) end vim.api.nvim_create_autocmd('WinNew', { - desc = 'Restore window options when splitting an oil window', + desc = 'Restore window options when splitting an canola window', group = aug, pattern = '*', nested = true, callback = function(params) - local util = require('oil.util') - if not util.is_oil_bufnr(params.buf) or vim.w.oil_did_enter then + local util = require('canola.util') + if not util.is_canola_bufnr(params.buf) or vim.w.canola_did_enter then return end - -- This new window is a split off of an oil window. We need to transfer the window + -- This new window is a split off of an canola window. We need to transfer the window -- variables. First, locate the parent window local parent_win -- First search windows in this tab, then search all windows local winids = vim.list_extend(vim.api.nvim_tabpage_list_wins(0), vim.api.nvim_list_wins()) for _, winid in ipairs(winids) do if vim.api.nvim_win_is_valid(winid) then - if vim.w[winid].oil_did_enter then + if vim.w[winid].canola_did_enter then parent_win = winid break end @@ -1405,40 +1410,40 @@ M.setup = function(opts) end if not parent_win then vim.notify( - 'Oil split could not find parent window. Please try to replicate whatever you just did and report a bug on github', + 'Canola split could not find parent window. Please try to replicate whatever you just did and report a bug on github', vim.log.levels.WARN ) return end -- Then transfer over the relevant window vars - vim.w.oil_did_enter = true - vim.w.oil_original_buffer = vim.w[parent_win].oil_original_buffer - vim.w.oil_original_view = vim.w[parent_win].oil_original_view - vim.w.oil_original_alternate = vim.w[parent_win].oil_original_alternate + vim.w.canola_did_enter = true + vim.w.canola_original_buffer = vim.w[parent_win].canola_original_buffer + vim.w.canola_original_view = vim.w[parent_win].canola_original_view + vim.w.canola_original_alternate = vim.w[parent_win].canola_original_alternate end, }) - -- mksession doesn't save oil buffers in a useful way. We have to manually load them after a - -- session finishes loading. See https://github.com/stevearc/oil.nvim/issues/29 + -- mksession doesn't save canola buffers in a useful way. We have to manually load them after a + -- session finishes loading. See https://github.com/stevearc/canola.nvim/issues/29 vim.api.nvim_create_autocmd('SessionLoadPost', { - desc = 'Load oil buffers after a session is loaded', + desc = 'Load canola buffers after a session is loaded', group = aug, pattern = '*', callback = function(params) if vim.g.SessionLoad ~= 1 then return end - local util = require('oil.util') + local util = require('canola.util') local scheme = util.parse_url(params.file) if config.adapters[scheme] and vim.api.nvim_buf_line_count(params.buf) == 1 then - M.load_oil_buffer(params.buf) + M.load_canola_buffer(params.buf) end end, }) if config.default_file_explorer then vim.api.nvim_create_autocmd('BufAdd', { - desc = 'Detect directory buffer and open oil file browser', + desc = 'Detect directory buffer and open canola file browser', group = aug, pattern = '*', nested = true, @@ -1449,7 +1454,7 @@ M.setup = function(opts) for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do if maybe_hijack_directory_buffer(bufnr) and vim.v.vim_did_enter == 1 then - M.load_oil_buffer(bufnr) + M.load_canola_buffer(bufnr) end end end diff --git a/lua/oil/keymap_util.lua b/lua/canola/keymap_util.lua similarity index 94% rename from lua/oil/keymap_util.lua rename to lua/canola/keymap_util.lua index 8d62c93..8c398c3 100644 --- a/lua/oil/keymap_util.lua +++ b/lua/canola/keymap_util.lua @@ -1,7 +1,7 @@ -local actions = require('oil.actions') -local config = require('oil.config') -local layout = require('oil.layout') -local util = require('oil.util') +local actions = require('canola.actions') +local config = require('canola.config') +local layout = require('canola.layout') +local util = require('canola.util') local M = {} ---@param rhs string|table|fun() @@ -13,7 +13,7 @@ local function resolve(rhs) local action_name = vim.split(rhs, '.', { plain = true })[2] local action = actions[action_name] if not action then - vim.notify('[oil.nvim] Unknown action name: ' .. action_name, vim.log.levels.ERROR) + vim.notify('[canola.nvim] Unknown action name: ' .. action_name, vim.log.levels.ERROR) end return resolve(action) elseif type(rhs) == 'table' then @@ -121,7 +121,7 @@ M.show_help = function(keymaps) local bufnr = vim.api.nvim_create_buf(false, true) vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines) - local ns = vim.api.nvim_create_namespace('Oil') + local ns = vim.api.nvim_create_namespace('Canola') for _, hl in ipairs(highlights) do local hl_group, lnum, start_col, end_col = unpack(hl) vim.api.nvim_buf_set_extmark(bufnr, ns, lnum - 1, start_col, { diff --git a/lua/oil/layout.lua b/lua/canola/layout.lua similarity index 95% rename from lua/oil/layout.lua rename to lua/canola/layout.lua index 0f32fcd..b8d3167 100644 --- a/lua/oil/layout.lua +++ b/lua/canola/layout.lua @@ -98,7 +98,7 @@ M.calculate_height = function(desired_height, opts) ) end ----@class (exact) oil.WinLayout +---@class (exact) canola.WinLayout ---@field width integer ---@field height integer ---@field row integer @@ -106,7 +106,7 @@ end ---@return vim.api.keyset.win_config M.get_fullscreen_win_opts = function() - local config = require('oil.config') + local config = require('canola.config') local total_width = M.get_editor_width() local total_height = M.get_editor_height() @@ -141,15 +141,15 @@ end ---@param winid integer ---@param direction "above"|"below"|"left"|"right"|"auto" ---@param gap integer ----@return oil.WinLayout root_dim New dimensions of the original window ----@return oil.WinLayout new_dim New dimensions of the new window +---@return canola.WinLayout root_dim New dimensions of the original window +---@return canola.WinLayout new_dim New dimensions of the new window M.split_window = function(winid, direction, gap) if direction == 'auto' then direction = vim.o.splitright and 'right' or 'left' end local float_config = vim.api.nvim_win_get_config(winid) - ---@type oil.WinLayout + ---@type canola.WinLayout local dim_root = { width = float_config.width, height = float_config.height, diff --git a/lua/oil/loading.lua b/lua/canola/loading.lua similarity index 98% rename from lua/oil/loading.lua rename to lua/canola/loading.lua index 633af6e..17b2119 100644 --- a/lua/oil/loading.lua +++ b/lua/canola/loading.lua @@ -1,4 +1,4 @@ -local util = require('oil.util') +local util = require('canola.util') local M = {} local timers = {} diff --git a/lua/oil/log.lua b/lua/canola/log.lua similarity index 92% rename from lua/oil/log.lua rename to lua/canola/log.lua index a16394b..c49b346 100644 --- a/lua/oil/log.lua +++ b/lua/canola/log.lua @@ -11,14 +11,14 @@ Log.level = vim.log.levels.WARN ---@return string Log.get_logfile = function() - local fs = require('oil.fs') + local fs = require('canola.fs') local ok, stdpath = pcall(vim.fn.stdpath, 'log') if not ok then stdpath = vim.fn.stdpath('cache') end assert(type(stdpath) == 'string') - return fs.join(stdpath, 'oil.log') + return fs.join(stdpath, 'canola.log') end ---@param level integer @@ -73,11 +73,11 @@ local function initialize() end local parent = vim.fs.dirname(filepath) - require('oil.fs').mkdirp(parent) + require('canola.fs').mkdirp(parent) local logfile, openerr = io.open(filepath, 'a+') if not logfile then - local err_msg = string.format('Failed to open oil.nvim log file: %s', openerr) + local err_msg = string.format('Failed to open canola.nvim log file: %s', openerr) vim.notify(err_msg, vim.log.levels.ERROR) else write = function(line) diff --git a/lua/oil/lsp/helpers.lua b/lua/canola/lsp/helpers.lua similarity index 95% rename from lua/oil/lsp/helpers.lua rename to lua/canola/lsp/helpers.lua index cadeca1..ad6442d 100644 --- a/lua/oil/lsp/helpers.lua +++ b/lua/canola/lsp/helpers.lua @@ -1,11 +1,11 @@ -local config = require('oil.config') -local fs = require('oil.fs') -local util = require('oil.util') -local workspace = require('oil.lsp.workspace') +local config = require('canola.config') +local fs = require('canola.fs') +local util = require('canola.util') +local workspace = require('canola.lsp.workspace') local M = {} ----@param actions oil.Action[] +---@param actions canola.Action[] ---@return fun() did_perform Call this function when the file operations have been completed M.will_perform_file_operations = function(actions) local moves = {} diff --git a/lua/oil/lsp/workspace.lua b/lua/canola/lsp/workspace.lua similarity index 99% rename from lua/oil/lsp/workspace.lua rename to lua/canola/lsp/workspace.lua index a0e26bb..5c5b4ec 100644 --- a/lua/oil/lsp/workspace.lua +++ b/lua/canola/lsp/workspace.lua @@ -1,4 +1,4 @@ -local fs = require('oil.fs') +local fs = require('canola.fs') local ms = require('vim.lsp.protocol').Methods if vim.fn.has('nvim-0.10') == 0 then ms = { diff --git a/lua/oil/mutator/confirmation.lua b/lua/canola/mutator/confirmation.lua similarity index 91% rename from lua/oil/mutator/confirmation.lua rename to lua/canola/mutator/confirmation.lua index 0aff7a7..9ed6525 100644 --- a/lua/oil/mutator/confirmation.lua +++ b/lua/canola/mutator/confirmation.lua @@ -1,10 +1,10 @@ -local columns = require('oil.columns') -local config = require('oil.config') -local layout = require('oil.layout') -local util = require('oil.util') +local columns = require('canola.columns') +local config = require('canola.config') +local layout = require('canola.layout') +local util = require('canola.util') local M = {} ----@param actions oil.Action[] +---@param actions canola.Action[] ---@return boolean local function is_simple_edit(actions) local num_create = 0 @@ -53,7 +53,7 @@ local function render_lines(winid, bufnr, lines) }) end ----@param actions oil.Action[] +---@param actions canola.Action[] ---@param should_confirm nil|boolean ---@param cb fun(proceed: boolean) M.show = vim.schedule_wrap(function(actions, should_confirm, cb) @@ -77,7 +77,7 @@ M.show = vim.schedule_wrap(function(actions, should_confirm, cb) local adapter = util.get_adapter_for_action(action) local line if action.type == 'change' then - ---@cast action oil.ChangeAction + ---@cast action canola.ChangeAction line = columns.render_change_action(adapter, action) else line = adapter.render_action(action) @@ -105,11 +105,14 @@ M.show = vim.schedule_wrap(function(actions, should_confirm, cb) border = config.confirmation.border, }) if not ok then - vim.notify(string.format('Error showing oil preview window: %s', winid), vim.log.levels.ERROR) + vim.notify( + string.format('Error showing canola preview window: %s', winid), + vim.log.levels.ERROR + ) cb(false) end - vim.bo[bufnr].filetype = 'oil_preview' - vim.bo[bufnr].syntax = 'oil_preview' + vim.bo[bufnr].filetype = 'canola_preview' + vim.bo[bufnr].syntax = 'canola_preview' for k, v in pairs(config.confirmation.win_options) do vim.api.nvim_set_option_value(k, v, { scope = 'local', win = winid }) end diff --git a/lua/oil/mutator/init.lua b/lua/canola/mutator/init.lua similarity index 88% rename from lua/oil/mutator/init.lua rename to lua/canola/mutator/init.lua index 8e03340..34cf2b1 100644 --- a/lua/oil/mutator/init.lua +++ b/lua/canola/mutator/init.lua @@ -1,60 +1,60 @@ -local Progress = require('oil.mutator.progress') -local Trie = require('oil.mutator.trie') -local cache = require('oil.cache') -local columns = require('oil.columns') -local config = require('oil.config') -local confirmation = require('oil.mutator.confirmation') -local constants = require('oil.constants') -local fs = require('oil.fs') -local lsp_helpers = require('oil.lsp.helpers') -local oil = require('oil') -local parser = require('oil.mutator.parser') -local util = require('oil.util') -local view = require('oil.view') +local Progress = require('canola.mutator.progress') +local Trie = require('canola.mutator.trie') +local cache = require('canola.cache') +local canola = require('canola') +local columns = require('canola.columns') +local config = require('canola.config') +local confirmation = require('canola.mutator.confirmation') +local constants = require('canola.constants') +local fs = require('canola.fs') +local lsp_helpers = require('canola.lsp.helpers') +local parser = require('canola.mutator.parser') +local util = require('canola.util') +local view = require('canola.view') local M = {} local FIELD_NAME = constants.FIELD_NAME local FIELD_TYPE = constants.FIELD_TYPE ----@alias oil.Action oil.CreateAction|oil.DeleteAction|oil.MoveAction|oil.CopyAction|oil.ChangeAction +---@alias canola.Action canola.CreateAction|canola.DeleteAction|canola.MoveAction|canola.CopyAction|canola.ChangeAction ----@class (exact) oil.CreateAction +---@class (exact) canola.CreateAction ---@field type "create" ---@field url string ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field link nil|string ----@class (exact) oil.DeleteAction +---@class (exact) canola.DeleteAction ---@field type "delete" ---@field url string ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ----@class (exact) oil.MoveAction +---@class (exact) canola.MoveAction ---@field type "move" ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field src_url string ---@field dest_url string ----@class (exact) oil.CopyAction +---@class (exact) canola.CopyAction ---@field type "copy" ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field src_url string ---@field dest_url string ----@class (exact) oil.ChangeAction +---@class (exact) canola.ChangeAction ---@field type "change" ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field url string ---@field column string ---@field value any ----@param all_diffs table ----@return oil.Action[] +---@param all_diffs table +---@return canola.Action[] M.create_actions_from_diffs = function(all_diffs) - ---@type oil.Action[] + ---@type canola.Action[] local actions = {} - ---@type table + ---@type table local diff_by_id = setmetatable({}, { __index = function(t, key) local list = {} @@ -69,7 +69,7 @@ M.create_actions_from_diffs = function(all_diffs) -- > foo/bar/b.txt local seen_creates = {} - ---@param action oil.Action + ---@param action canola.Action local function add_action(action) local adapter = assert(config.get_adapter_by_scheme(action.dest_url or action.url)) if not adapter.filter_action or adapter.filter_action(action) then @@ -195,8 +195,8 @@ M.create_actions_from_diffs = function(all_diffs) return M.enforce_action_order(actions) end ----@param actions oil.Action[] ----@return oil.Action[] +---@param actions canola.Action[] +---@return canola.Action[] M.enforce_action_order = function(actions) local src_trie = Trie.new() local dest_trie = Trie.new() @@ -220,7 +220,7 @@ M.enforce_action_order = function(actions) ---Gets the dependencies of a particular action. Effectively dynamically calculates the dependency ---"edges" of the graph. - ---@param action oil.Action + ---@param action canola.Action local function get_deps(action) local ret = {} if action.type == 'delete' then @@ -278,8 +278,8 @@ M.enforce_action_order = function(actions) return ret end - ---@return nil|oil.Action The leaf action - ---@return nil|oil.Action When no leaves found, this is the last action in the loop + ---@return nil|canola.Action The leaf action + ---@return nil|canola.Action When no leaves found, this is the last action in the loop local function find_leaf(action, seen) if not seen then seen = {} @@ -321,7 +321,7 @@ M.enforce_action_order = function(actions) -- We've detected a move cycle (e.g. MOVE /a -> /b + MOVE /b -> /a) -- Split one of the moves and retry local intermediate_url = - string.format('%s__oil_tmp_%05d', loop_action.src_url, math.random(999999)) + string.format('%s__canola_tmp_%05d', loop_action.src_url, math.random(999999)) local move_1 = { type = 'move', entry_type = loop_action.entry_type, @@ -383,12 +383,12 @@ end local progress ----@param actions oil.Action[] +---@param actions canola.Action[] ---@param cb fun(err: nil|string) M.process_actions = function(actions, cb) vim.api.nvim_exec_autocmds( 'User', - { pattern = 'OilActionsPre', modeline = false, data = { actions = actions } } + { pattern = 'CanolaActionsPre', modeline = false, data = { actions = actions } } ) local did_complete = nil @@ -422,7 +422,7 @@ M.process_actions = function(actions, cb) progress = nil vim.api.nvim_exec_autocmds( 'User', - { pattern = 'OilActionsPost', modeline = false, data = { err = err, actions = actions } } + { pattern = 'CanolaActionsPost', modeline = false, data = { err = err, actions = actions } } ) cb(err) end @@ -473,7 +473,7 @@ M.process_actions = function(actions, cb) end end) if action.type == 'change' then - ---@cast action oil.ChangeAction + ---@cast action canola.ChangeAction columns.perform_change_action(adapter, action, callback) else adapter.perform_action(action, callback) @@ -509,7 +509,7 @@ M.try_write_changes = function(confirm, cb) local was_modified = vim.bo.modified local buffers = view.get_all_buffers() local all_diffs = {} - ---@type table + ---@type table local all_errors = {} mutation_in_progress = true @@ -537,7 +537,7 @@ M.try_write_changes = function(confirm, cb) mutation_in_progress = false end - local ns = vim.api.nvim_create_namespace('Oil') + local ns = vim.api.nvim_create_namespace('Canola') vim.diagnostic.reset(ns) if not vim.tbl_isempty(all_errors) then for bufnr, errors in pairs(all_errors) do @@ -564,7 +564,7 @@ M.try_write_changes = function(confirm, cb) end) end unlock() - cb('Error parsing oil buffers') + cb('Error parsing canola buffers') return end @@ -581,12 +581,12 @@ M.try_write_changes = function(confirm, cb) vim.schedule_wrap(function(err) view.unlock_buffers() if err then - err = string.format('[oil] Error applying actions: %s', err) - view.rerender_all_oil_buffers(nil, function() + err = string.format('[canola] Error applying actions: %s', err) + view.rerender_all_canola_buffers(nil, function() cb(err) end) else - local current_entry = oil.get_cursor_entry() + local current_entry = canola.get_cursor_entry() if current_entry then -- get the entry under the cursor and make sure the cursor stays on it view.set_last_cursor( @@ -594,10 +594,10 @@ M.try_write_changes = function(confirm, cb) vim.split(current_entry.parsed_name or current_entry.name, '/')[1] ) end - view.rerender_all_oil_buffers(nil, function(render_err) + view.rerender_all_canola_buffers(nil, function(render_err) vim.api.nvim_exec_autocmds( 'User', - { pattern = 'OilMutationComplete', modeline = false } + { pattern = 'CanolaMutationComplete', modeline = false } ) cb(render_err) end) diff --git a/lua/oil/mutator/parser.lua b/lua/canola/mutator/parser.lua similarity index 90% rename from lua/oil/mutator/parser.lua rename to lua/canola/mutator/parser.lua index 45f7239..8a9e278 100644 --- a/lua/oil/mutator/parser.lua +++ b/lua/canola/mutator/parser.lua @@ -1,10 +1,10 @@ -local cache = require('oil.cache') -local columns = require('oil.columns') -local config = require('oil.config') -local constants = require('oil.constants') -local fs = require('oil.fs') -local util = require('oil.util') -local view = require('oil.view') +local cache = require('canola.cache') +local columns = require('canola.columns') +local config = require('canola.config') +local constants = require('canola.constants') +local fs = require('canola.fs') +local util = require('canola.util') +local view = require('canola.view') local M = {} local FIELD_ID = constants.FIELD_ID @@ -12,23 +12,23 @@ local FIELD_NAME = constants.FIELD_NAME local FIELD_TYPE = constants.FIELD_TYPE local FIELD_META = constants.FIELD_META ----@alias oil.Diff oil.DiffNew|oil.DiffDelete|oil.DiffChange +---@alias canola.Diff canola.DiffNew|canola.DiffDelete|canola.DiffChange ----@class (exact) oil.DiffNew +---@class (exact) canola.DiffNew ---@field type "new" ---@field name string ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field id nil|integer ---@field link nil|string ----@class (exact) oil.DiffDelete +---@class (exact) canola.DiffDelete ---@field type "delete" ---@field name string ---@field id integer ----@class (exact) oil.DiffChange +---@class (exact) canola.DiffChange ---@field type "change" ----@field entry_type oil.EntryType +---@field entry_type canola.EntryType ---@field name string ---@field column string ---@field value any @@ -57,16 +57,16 @@ local function compare_link_target(meta, parsed_entry) return meta_name == parsed_name end ----@class (exact) oil.ParseResult +---@class (exact) canola.ParseResult ---@field data table Parsed entry data ---@field ranges table Locations of the various columns ----@field entry nil|oil.InternalEntry If the entry already exists +---@field entry nil|canola.InternalEntry If the entry already exists ---Parse a single line in a buffer ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param line string ----@param column_defs oil.ColumnSpec[] ----@return nil|oil.ParseResult +---@param column_defs canola.ColumnSpec[] +---@return nil|canola.ParseResult ---@return nil|string Error M.parse_line = function(adapter, line, column_defs) local ret = {} @@ -142,18 +142,18 @@ M.parse_line = function(adapter, line, column_defs) return { data = ret, entry = entry, ranges = ranges } end ----@class (exact) oil.ParseError +---@class (exact) canola.ParseError ---@field lnum integer ---@field col integer ---@field message string ---@param bufnr integer ----@return oil.Diff[] diffs ----@return oil.ParseError[] errors Parsing errors +---@return canola.Diff[] diffs +---@return canola.ParseError[] errors Parsing errors M.parse = function(bufnr) - ---@type oil.Diff[] + ---@type canola.Diff[] local diffs = {} - ---@type oil.ParseError[] + ---@type canola.ParseError[] local errors = {} local bufname = vim.api.nvim_buf_get_name(bufnr) local adapter = util.get_adapter(bufnr, true) diff --git a/lua/oil/mutator/progress.lua b/lua/canola/mutator/progress.lua similarity index 92% rename from lua/oil/mutator/progress.lua rename to lua/canola/mutator/progress.lua index 81b6b5c..4a74dbc 100644 --- a/lua/oil/mutator/progress.lua +++ b/lua/canola/mutator/progress.lua @@ -1,8 +1,8 @@ -local columns = require('oil.columns') -local config = require('oil.config') -local layout = require('oil.layout') -local loading = require('oil.loading') -local util = require('oil.util') +local columns = require('canola.columns') +local config = require('canola.config') +local layout = require('canola.layout') +local loading = require('canola.loading') +local util = require('canola.util') local Progress = {} local FPS = 20 @@ -68,7 +68,7 @@ function Progress:show(opts) style = 'minimal', border = config.progress.border, }) - vim.bo[self.bufnr].filetype = 'oil_progress' + vim.bo[self.bufnr].filetype = 'canola_progress' for k, v in pairs(config.progress.win_options) do vim.api.nvim_set_option_value(k, v, { scope = 'local', win = self.winid }) end @@ -121,7 +121,7 @@ function Progress:_render() if self.min_bufnr and vim.api.nvim_buf_is_valid(self.min_bufnr) then util.render_text( self.min_bufnr, - { string.format('%sOil: %s', self.spinner, self.count) }, + { string.format('%sCanola: %s', self.spinner, self.count) }, { winid = self.min_winid, h_align = 'left' } ) end @@ -189,17 +189,17 @@ function Progress:minimize() self.min_bufnr = bufnr self.min_winid = winid self:_render() - vim.notify_once('Restore progress window with :Oil --progress') + vim.notify_once('Restore progress window with :Canola --progress') end ----@param action oil.Action +---@param action canola.Action ---@param idx integer ---@param total integer function Progress:set_action(action, idx, total) local adapter = util.get_adapter_for_action(action) local change_line if action.type == 'change' then - ---@cast action oil.ChangeAction + ---@cast action canola.ChangeAction change_line = columns.render_change_action(adapter, action) else change_line = adapter.render_action(action) diff --git a/lua/oil/mutator/trie.lua b/lua/canola/mutator/trie.lua similarity index 91% rename from lua/oil/mutator/trie.lua rename to lua/canola/mutator/trie.lua index 95ab979..9dbf6d1 100644 --- a/lua/oil/mutator/trie.lua +++ b/lua/canola/mutator/trie.lua @@ -1,13 +1,13 @@ -local util = require('oil.util') +local util = require('canola.util') ----@class (exact) oil.Trie ----@field new fun(): oil.Trie +---@class (exact) canola.Trie +---@field new fun(): canola.Trie ---@field private root table local Trie = {} ----@return oil.Trie +---@return canola.Trie Trie.new = function() - ---@type oil.Trie + ---@type canola.Trie return setmetatable({ root = { values = {}, children = {} }, }, { @@ -80,7 +80,7 @@ end ---Add the first action that affects a parent path of the url ---@param url string ----@param ret oil.InternalEntry[] +---@param ret canola.InternalEntry[] function Trie:accum_first_parents_of(url, ret) local pieces = self:_url_to_path_pieces(url) local containers = { self.root } @@ -117,8 +117,8 @@ end ---Add all actions affecting children of the url ---@param url string ----@param ret oil.InternalEntry[] ----@param filter nil|fun(entry: oil.Action): boolean +---@param ret canola.InternalEntry[] +---@param filter nil|fun(entry: canola.Action): boolean function Trie:accum_children_of(url, ret, filter) local pieces = self:_url_to_path_pieces(url) local current = self.root @@ -137,8 +137,8 @@ end ---Add all actions at a specific path ---@param url string ----@param ret oil.InternalEntry[] ----@param filter? fun(entry: oil.Action): boolean +---@param ret canola.InternalEntry[] +---@param filter? fun(entry: canola.Action): boolean function Trie:accum_actions_at(url, ret, filter) local pieces = self:_url_to_path_pieces(url) local current = self.root diff --git a/lua/oil/pathutil.lua b/lua/canola/pathutil.lua similarity index 100% rename from lua/oil/pathutil.lua rename to lua/canola/pathutil.lua diff --git a/lua/oil/ringbuf.lua b/lua/canola/ringbuf.lua similarity index 96% rename from lua/oil/ringbuf.lua rename to lua/canola/ringbuf.lua index 66cd912..ced0907 100644 --- a/lua/oil/ringbuf.lua +++ b/lua/canola/ringbuf.lua @@ -1,4 +1,4 @@ ----@class oil.Ringbuf +---@class canola.Ringbuf ---@field private size integer ---@field private tail integer ---@field private buf string[] diff --git a/lua/oil/shell.lua b/lua/canola/shell.lua similarity index 100% rename from lua/oil/shell.lua rename to lua/canola/shell.lua diff --git a/lua/oil/util.lua b/lua/canola/util.lua similarity index 91% rename from lua/oil/util.lua rename to lua/canola/util.lua index 3703d1a..2231470 100644 --- a/lua/oil/util.lua +++ b/lua/canola/util.lua @@ -1,5 +1,5 @@ -local config = require('oil.config') -local constants = require('oil.constants') +local config = require('canola.config') +local constants = require('canola.constants') local M = {} @@ -8,7 +8,7 @@ local FIELD_NAME = constants.FIELD_NAME local FIELD_TYPE = constants.FIELD_TYPE local FIELD_META = constants.FIELD_META ----@alias oil.IconProvider fun(type: string, name: string, conf: table?, ft: string?): (icon: string, hl: string) +---@alias canola.IconProvider fun(type: string, name: string, conf: table?, ft: string?): (icon: string, hl: string) ---@param url string ---@return nil|string @@ -77,13 +77,13 @@ end ---@param bufnr integer ---@param silent? boolean ----@return nil|oil.Adapter +---@return nil|canola.Adapter M.get_adapter = function(bufnr, silent) local bufname = vim.api.nvim_buf_get_name(bufnr) local adapter = config.get_adapter_by_scheme(bufname) if not adapter and not silent then vim.notify_once( - string.format("[oil] could not find adapter for buffer '%s://'", bufname), + string.format("[canola] could not find adapter for buffer '%s://'", bufname), vim.log.levels.ERROR ) end @@ -92,7 +92,7 @@ end ---@param text string ---@param width integer|nil ----@param align oil.ColumnAlign +---@param align canola.ColumnAlign ---@return string padded_text ---@return integer left_padding M.pad_align = function(text, width, align) @@ -135,8 +135,8 @@ M.tbl_slice = function(tbl, start_idx, end_idx) return ret end ----@param entry oil.InternalEntry ----@return oil.Entry +---@param entry canola.InternalEntry +---@return canola.Entry M.export_entry = function(entry) return { name = entry[FIELD_NAME], @@ -244,7 +244,7 @@ end ---@param url string ---@return string[] local function get_possible_buffer_names_from_url(url) - local fs = require('oil.fs') + local fs = require('canola.fs') local scheme, path = M.parse_url(url) if config.adapters[scheme] == 'files' then assert(path) @@ -253,7 +253,7 @@ local function get_possible_buffer_names_from_url(url) return { url } end ----@param entry_type oil.EntryType +---@param entry_type canola.EntryType ---@param src_url string ---@param dest_url string M.update_moved_buffers = function(entry_type, src_url, dest_url) @@ -271,7 +271,7 @@ M.update_moved_buffers = function(entry_type, src_url, dest_url) for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do local bufname = vim.api.nvim_buf_get_name(bufnr) if vim.startswith(bufname, src_url) then - -- Handle oil directory buffers + -- Handle canola directory buffers vim.api.nvim_buf_set_name(bufnr, dest_url .. bufname:sub(src_url:len() + 1)) elseif bufname ~= '' and vim.bo[bufnr].buftype == '' then -- Handle regular buffers @@ -309,11 +309,11 @@ M.split_config = function(name_or_config) end end ----@alias oil.ColumnAlign "left"|"center"|"right" +---@alias canola.ColumnAlign "left"|"center"|"right" ----@param lines oil.TextChunk[][] +---@param lines canola.TextChunk[][] ---@param col_width integer[] ----@param col_align? oil.ColumnAlign[] +---@param col_align? canola.ColumnAlign[] ---@return string[] ---@return any[][] List of highlights {group, lnum, col_start, col_end} M.render_table = function(lines, col_width, col_align) @@ -364,7 +364,7 @@ end ---@param bufnr integer ---@param highlights any[][] List of highlights {group, lnum, col_start, col_end} M.set_highlights = function(bufnr, highlights) - local ns = vim.api.nvim_create_namespace('Oil') + local ns = vim.api.nvim_create_namespace('Canola') vim.api.nvim_buf_clear_namespace(bufnr, ns, 0, -1) for _, hl in ipairs(highlights) do local group, line, col_start, col_end = unpack(hl) @@ -381,7 +381,7 @@ end ---@return string M.addslash = function(path, os_slash) local slash = '/' - if os_slash and require('oil.fs').is_windows then + if os_slash and require('canola.fs').is_windows then slash = '\\' end @@ -413,7 +413,7 @@ M.get_title = function(winid) if config.adapters[scheme] == 'files' then assert(path) - local fs = require('oil.fs') + local fs = require('canola.fs') title = vim.fn.fnamemodify(fs.posix_to_os_path(path), ':~') end return title @@ -445,7 +445,7 @@ M.add_title_to_win = function(winid, opts) col = vim.api.nvim_win_get_width(winid) - 1 - width elseif opts.align ~= 'left' then vim.notify( - string.format("Unknown oil window title alignment: '%s'", opts.align), + string.format("Unknown canola window title alignment: '%s'", opts.align), vim.log.levels.ERROR ) end @@ -470,7 +470,7 @@ M.add_title_to_win = function(winid, opts) vim.bo[bufnr].bufhidden = 'wipe' local update_autocmd = vim.api.nvim_create_autocmd('BufWinEnter', { - desc = 'Update oil floating window title when buffer changes', + desc = 'Update canola floating window title when buffer changes', pattern = '*', callback = function(params) local winbuf = params.buf @@ -500,7 +500,7 @@ M.add_title_to_win = function(winid, opts) end, }) vim.api.nvim_create_autocmd('WinClosed', { - desc = 'Close oil floating window title when floating window closes', + desc = 'Close canola floating window title when floating window closes', pattern = tostring(winid), callback = function() if title_winid and vim.api.nvim_win_is_valid(title_winid) then @@ -522,9 +522,9 @@ M.add_title_to_win = function(winid, opts) ) end ----@param action oil.Action ----@return oil.Adapter ----@return nil|oil.CrossAdapterAction +---@param action canola.Action +---@return canola.Adapter +---@return nil|canola.CrossAdapterAction M.get_adapter_for_action = function(action) local adapter = assert(config.get_adapter_by_scheme(action.url or action.src_url)) if action.dest_url then @@ -675,12 +675,12 @@ end ---@param bufnr integer ---@return boolean -M.is_oil_bufnr = function(bufnr) +M.is_canola_bufnr = function(bufnr) local filetype = vim.bo[bufnr].filetype - if filetype == 'oil' then + if filetype == 'canola' then return true elseif filetype ~= '' then - -- If the filetype is set and is NOT "oil", then it's not an oil buffer + -- If the filetype is set and is NOT "canola", then it's not an canola buffer return false end local scheme = M.parse_url(vim.api.nvim_buf_get_name(bufnr)) @@ -713,7 +713,7 @@ M.get_preview_win = function(opts) if vim.api.nvim_win_is_valid(winid) and vim.wo[winid].previewwindow - and (opts.include_not_owned or vim.w[winid]['oil_preview']) + and (opts.include_not_owned or vim.w[winid]['canola_preview']) then return winid end @@ -722,9 +722,9 @@ end ---@return fun() restore Function that restores the cursor M.hide_cursor = function() - vim.api.nvim_set_hl(0, 'OilPreviewCursor', { nocombine = true, blend = 100 }) + vim.api.nvim_set_hl(0, 'CanolaPreviewCursor', { nocombine = true, blend = 100 }) local original_guicursor = vim.go.guicursor - vim.go.guicursor = 'a:OilPreviewCursor/OilPreviewCursor' + vim.go.guicursor = 'a:CanolaPreviewCursor/CanolaPreviewCursor' return function() -- HACK: see https://github.com/neovim/neovim/issues/21018 @@ -758,12 +758,12 @@ M.buf_get_win = function(bufnr, preferred_win) return nil end ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param url string ---@param opts {columns?: string[], no_cache?: boolean} ----@param callback fun(err: nil|string, entries: nil|oil.InternalEntry[]) +---@param callback fun(err: nil|string, entries: nil|canola.InternalEntry[]) M.adapter_list_all = function(adapter, url, opts, callback) - local cache = require('oil.cache') + local cache = require('canola.cache') if not opts.no_cache then local entries = cache.list_url(url) if not vim.tbl_isempty(entries) then @@ -787,15 +787,15 @@ M.adapter_list_all = function(adapter, url, opts, callback) end) end ----Send files from the current oil directory to quickfix +---Send files from the current canola directory to quickfix ---based on the provided options. ---@param opts {target?: "qflist"|"loclist", action?: "r"|"a", only_matching_search?: boolean} M.send_to_quickfix = function(opts) if type(opts) ~= 'table' then opts = {} end - local oil = require('oil') - local dir = oil.get_current_dir() + local canola = require('canola') + local dir = canola.get_current_dir() if type(dir) ~= 'string' then return end @@ -806,7 +806,7 @@ M.send_to_quickfix = function(opts) local match_all = not opts.only_matching_search local qf_entries = {} for i = range.start_lnum, range.end_lnum do - local entry = oil.get_entry_on_line(0, i) + local entry = canola.get_entry_on_line(0, i) if entry and entry.type == 'file' and (match_all or M.is_matching(entry)) then local qf_entry = { filename = dir .. entry.name, @@ -818,11 +818,11 @@ M.send_to_quickfix = function(opts) end end if #qf_entries == 0 then - vim.notify('[oil] No entries found to send to quickfix', vim.log.levels.WARN) + vim.notify('[canola] No entries found to send to quickfix', vim.log.levels.WARN) return end vim.api.nvim_exec_autocmds('QuickFixCmdPre', {}) - local qf_title = 'oil files' + local qf_title = 'canola files' local action = opts.action == 'a' and 'a' or 'r' if opts.target == 'loclist' then vim.fn.setloclist(0, {}, action, { title = qf_title, items = qf_entries }) @@ -856,7 +856,7 @@ M.get_visual_range = function() return { start_lnum = start_lnum, end_lnum = end_lnum } end ----@param entry oil.Entry +---@param entry canola.Entry ---@return boolean M.is_matching = function(entry) -- if search highlightig is not enabled, all files are considered to match @@ -875,11 +875,11 @@ M.run_after_load = function(bufnr, callback) if bufnr == 0 then bufnr = vim.api.nvim_get_current_buf() end - if vim.b[bufnr].oil_ready then + if vim.b[bufnr].canola_ready then callback() else vim.api.nvim_create_autocmd('User', { - pattern = 'OilEnter', + pattern = 'CanolaEnter', callback = function(args) if args.data.buf == bufnr then vim.api.nvim_buf_call(bufnr, callback) @@ -890,7 +890,7 @@ M.run_after_load = function(bufnr, callback) end end ----@param entry oil.Entry +---@param entry canola.Entry ---@return boolean M.is_directory = function(entry) local is_directory = entry.type == 'directory' @@ -904,11 +904,11 @@ M.is_directory = function(entry) end ---Get the :edit path for an entry ----@param bufnr integer The oil buffer that contains the entry ----@param entry oil.Entry +---@param bufnr integer The canola buffer that contains the entry +---@param entry canola.Entry ---@param callback fun(normalized_url: string) M.get_edit_path = function(bufnr, entry, callback) - local pathutil = require('oil.pathutil') + local pathutil = require('canola.pathutil') local bufname = vim.api.nvim_buf_get_name(bufnr) local scheme, dir = M.parse_url(bufname) @@ -930,7 +930,7 @@ M.get_edit_path = function(bufnr, entry, callback) end --- Check for an icon provider and return a common icon provider API ----@return (oil.IconProvider)? +---@return (canola.IconProvider)? M.get_icon_provider = function() -- prefer mini.icons local _, mini_icons = pcall(require, 'mini.icons') @@ -954,20 +954,20 @@ M.get_icon_provider = function() return function(type, name, conf, ft) if type == 'directory' then local icon, hl = nonicons.get('file-directory-fill') - return icon or (conf and conf.directory or ''), hl or 'OilDirIcon' + return icon or (conf and conf.directory or ''), hl or 'CanolaDirIcon' end if ft then local ft_icon, ft_hl = nonicons.get_icon_by_filetype(ft) if ft_icon then - return ft_icon, ft_hl or 'OilFileIcon' + return ft_icon, ft_hl or 'CanolaFileIcon' end end local icon, hl = nonicons.get_icon(name) if icon then - return icon, hl or 'OilFileIcon' + return icon, hl or 'CanolaFileIcon' end local fallback, fallback_hl = nonicons.get('file') - return fallback or (conf and conf.default_file or ''), fallback_hl or 'OilFileIcon' + return fallback or (conf and conf.default_file or ''), fallback_hl or 'CanolaFileIcon' end end @@ -979,7 +979,7 @@ M.get_icon_provider = function() return function(type, name, conf, ft) if type == 'directory' then - return conf and conf.directory or '', 'OilDirIcon' + return conf and conf.directory or '', 'CanolaDirIcon' else if ft then local ft_icon, ft_hl = devicons.get_icon_by_filetype(ft) @@ -988,7 +988,7 @@ M.get_icon_provider = function() end end local icon, hl = devicons.get_icon(name) - hl = hl or 'OilFileIcon' + hl = hl or 'CanolaFileIcon' icon = icon or (conf and conf.default_file or '') return icon, hl end @@ -997,7 +997,7 @@ end ---Read a buffer into a scratch buffer and apply syntactic highlighting when possible ---@param path string The path to the file to read ----@param preview_method oil.PreviewMethod +---@param preview_method canola.PreviewMethod ---@return nil|integer M.read_file_to_scratch_buffer = function(path, preview_method) local bufnr = vim.api.nvim_create_buf(false, true) @@ -1032,7 +1032,7 @@ M.read_file_to_scratch_buffer = function(path, preview_method) -- Replace the scratch buffer with a real buffer if we enter it vim.api.nvim_create_autocmd('BufEnter', { - desc = 'oil.nvim replace scratch buffer with real buffer', + desc = 'canola.nvim replace scratch buffer with real buffer', buffer = bufnr, callback = function() local winid = vim.api.nvim_get_current_win() @@ -1045,7 +1045,7 @@ M.read_file_to_scratch_buffer = function(path, preview_method) -- preview if vim.wo.previewwindow then vim.bo.bufhidden = 'wipe' - vim.b.oil_preview_buffer = true + vim.b.canola_preview_buffer = true end end end) diff --git a/lua/oil/view.lua b/lua/canola/view.lua similarity index 88% rename from lua/oil/view.lua rename to lua/canola/view.lua index e477009..faad884 100644 --- a/lua/oil/view.lua +++ b/lua/canola/view.lua @@ -1,12 +1,12 @@ local uv = vim.uv or vim.loop -local cache = require('oil.cache') -local columns = require('oil.columns') -local config = require('oil.config') -local constants = require('oil.constants') -local fs = require('oil.fs') -local keymap_util = require('oil.keymap_util') -local loading = require('oil.loading') -local util = require('oil.util') +local cache = require('canola.cache') +local columns = require('canola.columns') +local config = require('canola.config') +local constants = require('canola.constants') +local fs = require('canola.fs') +local keymap_util = require('canola.keymap_util') +local loading = require('canola.loading') +local util = require('canola.util') local M = {} local FIELD_ID = constants.FIELD_ID @@ -18,7 +18,7 @@ local FIELD_META = constants.FIELD_META local last_cursor_entry = {} ---@param bufnr integer ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry ---@return boolean display ---@return boolean is_hidden Whether the file is classified as a hidden file M.should_display = function(bufnr, entry) @@ -41,7 +41,7 @@ end ---Set the cursor to the last_cursor_entry if one exists M.maybe_set_cursor = function() - local oil = require('oil') + local canola = require('canola') local bufname = vim.api.nvim_buf_get_name(0) local entry_name = last_cursor_entry[bufname] if not entry_name then @@ -49,7 +49,7 @@ M.maybe_set_cursor = function() end local line_count = vim.api.nvim_buf_line_count(0) for lnum = 1, line_count do - local entry = oil.get_entry_on_line(0, lnum) + local entry = canola.get_entry_on_line(0, lnum) if entry and entry.name == entry_name then local line = vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, true)[1] local id_str = line:match('^/(%d+)') @@ -101,18 +101,18 @@ M.toggle_hidden = function() vim.notify('Cannot toggle hidden files when you have unsaved changes', vim.log.levels.WARN) else config.view_options.show_hidden = not config.view_options.show_hidden - M.rerender_all_oil_buffers({ refetch = false }) + M.rerender_all_canola_buffers({ refetch = false }) end end ----@param is_hidden_file fun(filename: string, bufnr: integer, entry: oil.Entry): boolean +---@param is_hidden_file fun(filename: string, bufnr: integer, entry: canola.Entry): boolean M.set_is_hidden_file = function(is_hidden_file) local any_modified = are_any_modified() if any_modified then vim.notify('Cannot change is_hidden_file when you have unsaved changes', vim.log.levels.WARN) else config.view_options.is_hidden_file = is_hidden_file - M.rerender_all_oil_buffers({ refetch = false }) + M.rerender_all_canola_buffers({ refetch = false }) end end @@ -123,7 +123,7 @@ M.set_columns = function(cols) else config.columns = cols -- TODO only refetch if we don't have all the necessary data for the columns - M.rerender_all_oil_buffers({ refetch = true }) + M.rerender_all_canola_buffers({ refetch = true }) end end @@ -134,15 +134,15 @@ M.set_sort = function(new_sort) else config.view_options.sort = new_sort -- TODO only refetch if we don't have all the necessary data for the columns - M.rerender_all_oil_buffers({ refetch = true }) + M.rerender_all_canola_buffers({ refetch = true }) end end ----@class oil.ViewData +---@class canola.ViewData ---@field fs_event? any uv_fs_event_t -- List of bufnrs ----@type table +---@type table local session = {} ---@return integer[] @@ -151,7 +151,7 @@ M.get_all_buffers = function() end local buffers_locked = false ----Make all oil buffers nomodifiable +---Make all canola buffers nomodifiable M.lock_buffers = function() buffers_locked = true for bufnr in pairs(session) do @@ -161,7 +161,7 @@ M.lock_buffers = function() end end ----Restore normal modifiable settings for oil buffers +---Restore normal modifiable settings for canola buffers M.unlock_buffers = function() buffers_locked = false for bufnr in pairs(session) do @@ -177,8 +177,8 @@ end ---@param opts? table ---@param callback? fun(err: nil|string) ---@note ---- This DISCARDS ALL MODIFICATIONS a user has made to oil buffers -M.rerender_all_oil_buffers = function(opts, callback) +--- This DISCARDS ALL MODIFICATIONS a user has made to canola buffers +M.rerender_all_canola_buffers = function(opts, callback) opts = opts or {} local buffers = M.get_all_buffers() local hidden_buffers = {} @@ -193,7 +193,7 @@ M.rerender_all_oil_buffers = function(opts, callback) local cb = util.cb_collect(#buffers, callback or function() end) for _, bufnr in ipairs(buffers) do if hidden_buffers[bufnr] then - vim.b[bufnr].oil_dirty = opts + vim.b[bufnr].canola_dirty = opts -- We also need to mark this as nomodified so it doesn't interfere with quitting vim vim.bo[bufnr].modified = false vim.schedule(cb) @@ -219,7 +219,7 @@ M.set_win_options = function() end end ----Get a list of visible oil buffers and a list of hidden oil buffers +---Get a list of visible canola buffers and a list of hidden canola buffers ---@note --- If any buffers are modified, return values are nil ---@return nil|integer[] visible @@ -244,7 +244,7 @@ local function get_visible_hidden_buffers() return visible_buffers, vim.tbl_keys(hidden_buffers) end ----Delete unmodified, hidden oil buffers and if none remain, clear the cache +---Delete unmodified, hidden canola buffers and if none remain, clear the cache M.delete_hidden_buffers = function() local visible_buffers, hidden_buffers = get_visible_hidden_buffers() if @@ -261,7 +261,7 @@ M.delete_hidden_buffers = function() cache.clear_everything() end ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param ranges table ---@return integer local function get_first_mutable_column_col(adapter, ranges) @@ -278,12 +278,12 @@ local function get_first_mutable_column_col(adapter, ranges) end --- @param bufnr integer ---- @param adapter oil.Adapter +--- @param adapter canola.Adapter --- @param mode false|"name"|"editable" --- @param cur integer[] --- @return integer[] | nil local function calc_constrained_cursor_pos(bufnr, adapter, mode, cur) - local parser = require('oil.mutator.parser') + local parser = require('canola.mutator.parser') local line = vim.api.nvim_buf_get_lines(bufnr, cur[1] - 1, cur[1], true)[1] local column_defs = columns.get_supported_columns(adapter) local result = parser.parse_line(adapter, line, column_defs) @@ -346,14 +346,14 @@ local function redraw_trash_virtual_text(bufnr) if not vim.api.nvim_buf_is_valid(bufnr) or not vim.api.nvim_buf_is_loaded(bufnr) then return end - local parser = require('oil.mutator.parser') + local parser = require('canola.mutator.parser') local adapter = util.get_adapter(bufnr, true) if not adapter or adapter.name ~= 'trash' then return end local _, buf_path = util.parse_url(vim.api.nvim_buf_get_name(bufnr)) local os_path = fs.posix_to_os_path(assert(buf_path)) - local ns = vim.api.nvim_create_namespace('OilVtext') + local ns = vim.api.nvim_create_namespace('CanolaVtext') vim.api.nvim_buf_clear_namespace(bufnr, ns, 0, -1) local column_defs = columns.get_supported_columns(adapter) for lnum, line in ipairs(vim.api.nvim_buf_get_lines(bufnr, 0, -1, true)) do @@ -361,14 +361,14 @@ local function redraw_trash_virtual_text(bufnr) local entry = result and result.entry if entry then local meta = entry[FIELD_META] - ---@type nil|oil.TrashInfo + ---@type nil|canola.TrashInfo local trash_info = meta and meta.trash_info if trash_info then vim.api.nvim_buf_set_extmark(bufnr, ns, lnum - 1, 0, { virt_text = { { '➜ ' .. fs.shorten_path(trash_info.original_path, os_path), - 'OilTrashSourcePath', + 'CanolaTrashSourcePath', }, }, }) @@ -387,13 +387,13 @@ M.initialize = function(bufnr) end vim.api.nvim_clear_autocmds({ buffer = bufnr, - group = 'Oil', + group = 'Canola', }) vim.bo[bufnr].buftype = 'acwrite' vim.bo[bufnr].readonly = false vim.bo[bufnr].swapfile = false - vim.bo[bufnr].syntax = 'oil' - vim.bo[bufnr].filetype = 'oil' + vim.bo[bufnr].syntax = 'canola' + vim.bo[bufnr].filetype = 'canola' vim.b[bufnr].EditorConfig_disable = 1 session[bufnr] = session[bufnr] or {} for k, v in pairs(config.buf_options) do @@ -402,15 +402,15 @@ M.initialize = function(bufnr) vim.api.nvim_buf_call(bufnr, M.set_win_options) vim.api.nvim_create_autocmd('BufHidden', { - desc = 'Delete oil buffers when no longer in use', - group = 'Oil', + desc = 'Delete canola buffers when no longer in use', + group = 'Canola', nested = true, buffer = bufnr, callback = function() -- First wait a short time (100ms) for the buffer change to settle vim.defer_fn(function() local visible_buffers = get_visible_hidden_buffers() - -- Only delete oil buffers if none of them are visible + -- Only delete canola buffers if none of them are visible if visible_buffers and vim.tbl_isempty(visible_buffers) then -- Check if cleanup is enabled if type(config.cleanup_delay_ms) == 'number' then @@ -427,7 +427,7 @@ M.initialize = function(bufnr) end, }) vim.api.nvim_create_autocmd('BufUnload', { - group = 'Oil', + group = 'Canola', nested = true, once = true, buffer = bufnr, @@ -440,20 +440,20 @@ M.initialize = function(bufnr) end, }) vim.api.nvim_create_autocmd('BufEnter', { - group = 'Oil', + group = 'Canola', buffer = bufnr, callback = function(args) - local opts = vim.b[args.buf].oil_dirty + local opts = vim.b[args.buf].canola_dirty if opts then - vim.b[args.buf].oil_dirty = nil + vim.b[args.buf].canola_dirty = nil M.render_buffer_async(args.buf, opts) end end, }) local timer vim.api.nvim_create_autocmd('InsertEnter', { - desc = 'Constrain oil cursor position', - group = 'Oil', + desc = 'Constrain canola cursor position', + group = 'Canola', buffer = bufnr, callback = function() -- For some reason the cursor bounces back to its original position, @@ -462,11 +462,11 @@ M.initialize = function(bufnr) end, }) vim.api.nvim_create_autocmd({ 'CursorMoved', 'ModeChanged' }, { - desc = 'Update oil preview window', - group = 'Oil', + desc = 'Update canola preview window', + group = 'Canola', buffer = bufnr, callback = function() - local oil = require('oil') + local canola = require('canola') if vim.wo.previewwindow then return end @@ -491,14 +491,14 @@ M.initialize = function(bufnr) if vim.api.nvim_get_current_buf() ~= bufnr then return end - local entry = oil.get_cursor_entry() + local entry = canola.get_cursor_entry() -- Don't update in visual mode. Visual mode implies editing not browsing, -- and updating the preview can cause flicker and stutter. if entry and not util.is_visual_mode() then local winid = util.get_preview_win() if winid then - if entry.id ~= vim.w[winid].oil_entry_id then - oil.open_preview() + if entry.id ~= vim.w[winid].canola_entry_id then + canola.open_preview() end end end @@ -532,8 +532,8 @@ M.initialize = function(bufnr) fs_event:stop() return end - local mutator = require('oil.mutator') - if err or vim.bo[bufnr].modified or vim.b[bufnr].oil_dirty or mutator.is_mutating() then + local mutator = require('canola.mutator') + if err or vim.bo[bufnr].modified or vim.b[bufnr].canola_dirty or mutator.is_mutating() then return end @@ -546,7 +546,7 @@ M.initialize = function(bufnr) end -- If it is not currently visible, mark it as dirty - vim.b[bufnr].oil_dirty = {} + vim.b[bufnr].canola_dirty = {} end) ) session[bufnr].fs_event = fs_event @@ -557,7 +557,7 @@ M.initialize = function(bufnr) local debounce_timer = assert(uv.new_timer()) local pending = false vim.api.nvim_create_autocmd('TextChanged', { - desc = 'Update oil virtual text of original path', + desc = 'Update canola virtual text of original path', buffer = bufnr, callback = function() -- Respond immediately to prevent flickering, the set the timer for a "cooldown period" @@ -583,23 +583,23 @@ M.initialize = function(bufnr) M.render_buffer_async(bufnr, {}, function(err) if err then vim.notify( - string.format('Error rendering oil buffer %s: %s', vim.api.nvim_buf_get_name(bufnr), err), + string.format('Error rendering canola buffer %s: %s', vim.api.nvim_buf_get_name(bufnr), err), vim.log.levels.ERROR ) else - vim.b[bufnr].oil_ready = true + vim.b[bufnr].canola_ready = true vim.api.nvim_exec_autocmds( 'User', - { pattern = 'OilEnter', modeline = false, data = { buf = bufnr } } + { pattern = 'CanolaEnter', modeline = false, data = { buf = bufnr } } ) end end) keymap_util.set_keymaps(config.keymaps, bufnr) end ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param num_entries integer ----@return fun(a: oil.InternalEntry, b: oil.InternalEntry): boolean +---@return fun(a: canola.InternalEntry, b: canola.InternalEntry): boolean local function get_sort_function(adapter, num_entries) local idx_funs = {} local sort_config = config.view_options.sort @@ -676,7 +676,7 @@ local function render_buffer(bufnr, opts) local entry_list = vim.tbl_values(entries) -- Only sort the entries once we have them all - if not vim.b[bufnr].oil_rendering then + if not vim.b[bufnr].canola_rendering then table.sort(entry_list, get_sort_function(adapter, #entry_list)) end @@ -776,13 +776,13 @@ local function get_link_text(name, meta) end ---@private ----@param entry oil.InternalEntry +---@param entry canola.InternalEntry ---@param column_defs table[] ---@param col_width integer[] ----@param adapter oil.Adapter +---@param adapter canola.Adapter ---@param is_hidden boolean ---@param bufnr integer ----@return oil.TextChunk[] +---@return canola.TextChunk[] M.format_entry_cols = function(entry, column_defs, col_width, adapter, is_hidden, bufnr) local name = entry[FIELD_NAME] local meta = entry[FIELD_META] @@ -857,9 +857,9 @@ M.format_entry_cols = function(entry, column_defs, col_width, adapter, is_hidden end if entry_type == 'directory' then - table.insert(cols, { name .. '/', 'OilDir' .. hl_suffix }) + table.insert(cols, { name .. '/', 'CanolaDir' .. hl_suffix }) elseif entry_type == 'socket' then - table.insert(cols, { name, 'OilSocket' .. hl_suffix }) + table.insert(cols, { name, 'CanolaSocket' .. hl_suffix }) elseif entry_type == 'link' then if not link_name then link_name, link_target = get_link_text(name, meta) @@ -867,23 +867,23 @@ M.format_entry_cols = function(entry, column_defs, col_width, adapter, is_hidden local is_orphan = not (meta and meta.link_stat) if not link_name_hl then if highlight_as_executable then - link_name_hl = 'OilExecutable' .. hl_suffix + link_name_hl = 'CanolaExecutable' .. hl_suffix else - link_name_hl = (is_orphan and 'OilOrphanLink' or 'OilLink') .. hl_suffix + link_name_hl = (is_orphan and 'CanolaOrphanLink' or 'CanolaLink') .. hl_suffix end end table.insert(cols, { link_name, link_name_hl }) if link_target then if not link_target_hl then - link_target_hl = (is_orphan and 'OilOrphanLinkTarget' or 'OilLinkTarget') .. hl_suffix + link_target_hl = (is_orphan and 'CanolaOrphanLinkTarget' or 'CanolaLinkTarget') .. hl_suffix end table.insert(cols, { link_target, link_target_hl }) end elseif highlight_as_executable then - table.insert(cols, { name, 'OilExecutable' .. hl_suffix }) + table.insert(cols, { name, 'CanolaExecutable' .. hl_suffix }) else - table.insert(cols, { name, 'OilFile' .. hl_suffix }) + table.insert(cols, { name, 'CanolaFile' .. hl_suffix }) end return cols @@ -916,7 +916,7 @@ M.render_buffer_async = function(bufnr, opts, caller_callback) if not err then vim.api.nvim_exec_autocmds( 'User', - { pattern = 'OilReadPost', modeline = false, data = { buf = bufnr } } + { pattern = 'CanolaReadPost', modeline = false, data = { buf = bufnr } } ) end if caller_callback then @@ -933,7 +933,7 @@ M.render_buffer_async = function(bufnr, opts, caller_callback) end -- If we're already rendering, queue up another rerender after it's complete - if vim.b[bufnr].oil_rendering then + if vim.b[bufnr].canola_rendering then if not pending_renders[bufnr] then pending_renders[bufnr] = { callback } elseif callback then @@ -943,13 +943,13 @@ M.render_buffer_async = function(bufnr, opts, caller_callback) end local bufname = vim.api.nvim_buf_get_name(bufnr) - vim.b[bufnr].oil_rendering = true + vim.b[bufnr].canola_rendering = true local _, dir = util.parse_url(bufname) -- Undo should not return to a blank buffer -- Method taken from :h clear-undo vim.bo[bufnr].undolevels = -1 local handle_error = vim.schedule_wrap(function(message) - vim.b[bufnr].oil_rendering = false + vim.b[bufnr].canola_rendering = false vim.bo[bufnr].undolevels = vim.api.nvim_get_option_value('undolevels', { scope = 'global' }) util.render_text(bufnr, { 'Error: ' .. message }) if pending_renders[bufnr] then @@ -965,12 +965,12 @@ M.render_buffer_async = function(bufnr, opts, caller_callback) end end) if not dir then - handle_error(string.format("Could not parse oil url '%s'", bufname)) + handle_error(string.format("Could not parse canola url '%s'", bufname)) return end local adapter = util.get_adapter(bufnr, true) if not adapter then - handle_error(string.format("[oil] no adapter for buffer '%s'", bufname)) + handle_error(string.format("[canola] no adapter for buffer '%s'", bufname)) return end local start_ms = uv.hrtime() / 1e6 @@ -984,7 +984,7 @@ M.render_buffer_async = function(bufnr, opts, caller_callback) if not vim.api.nvim_buf_is_valid(bufnr) then return end - vim.b[bufnr].oil_rendering = false + vim.b[bufnr].canola_rendering = false loading.set_loading(bufnr, false) render_buffer(bufnr, { jump = true }) M.set_last_cursor(bufname, nil) diff --git a/lua/oil/adapters/trash.lua b/lua/oil/adapters/trash.lua deleted file mode 100644 index 9ec3e52..0000000 --- a/lua/oil/adapters/trash.lua +++ /dev/null @@ -1,9 +0,0 @@ -local fs = require('oil.fs') - -if fs.is_mac then - return require('oil.adapters.trash.mac') -elseif fs.is_windows then - return require('oil.adapters.trash.windows') -else - return require('oil.adapters.trash.freedesktop') -end diff --git a/lua/resession/extensions/oil.lua b/lua/resession/extensions/canola.lua similarity index 76% rename from lua/resession/extensions/oil.lua rename to lua/resession/extensions/canola.lua index b3ba754..8bbfe86 100644 --- a/lua/resession/extensions/oil.lua +++ b/lua/resession/extensions/canola.lua @@ -1,7 +1,7 @@ local M = {} M.is_win_supported = function(winid, bufnr) - return vim.bo[bufnr].filetype == 'oil' + return vim.bo[bufnr].filetype == 'canola' end M.save_win = function(winid) @@ -11,7 +11,7 @@ M.save_win = function(winid) end M.load_win = function(winid, config) - require('oil').open(config.bufname) + require('canola').open(config.bufname) end return M diff --git a/perf/bootstrap.lua b/perf/bootstrap.lua index 19e17e8..86c170e 100644 --- a/perf/bootstrap.lua +++ b/perf/bootstrap.lua @@ -4,8 +4,8 @@ vim.opt.runtimepath:prepend('.') local bm = require('benchmark') bm.sandbox() ----@module 'oil' ----@type oil.SetupOpts +---@module 'canola' +---@type canola.SetupOpts local setup_opts = { -- columns = { "icon", "permissions", "size", "mtime" }, } @@ -21,36 +21,36 @@ require('benchmark.files').create_files(TEST_DIR, 'file %d.txt', DIR_SIZE) -- selene: allow(global_usage) function _G.jit_profile() - require('oil').setup(setup_opts) + require('canola').setup(setup_opts) local finish = bm.jit_profile({ filename = TEST_DIR .. '/profile.txt' }) - bm.wait_for_user_event('OilEnter', function() + bm.wait_for_user_event('CanolaEnter', function() finish() end) - require('oil').open(TEST_DIR) + require('canola').open(TEST_DIR) end -- selene: allow(global_usage) function _G.flame_profile() local start, stop = bm.flame_profile({ - pattern = 'oil*', + pattern = 'canola*', filename = 'profile.json', }) - require('oil').setup(setup_opts) + require('canola').setup(setup_opts) start() - bm.wait_for_user_event('OilEnter', function() + bm.wait_for_user_event('CanolaEnter', function() stop(function() vim.cmd.qall({ mods = { silent = true } }) end) end) - require('oil').open(TEST_DIR) + require('canola').open(TEST_DIR) end -- selene: allow(global_usage) function _G.benchmark() - require('oil').setup(setup_opts) - bm.run({ title = 'oil.nvim', iterations = ITERATIONS, warm_up = WARM_UP }, function(callback) - bm.wait_for_user_event('OilEnter', callback) - require('oil').open(TEST_DIR) + require('canola').setup(setup_opts) + bm.run({ title = 'canola.nvim', iterations = ITERATIONS, warm_up = WARM_UP }, function(callback) + bm.wait_for_user_event('CanolaEnter', callback) + require('canola').open(TEST_DIR) end, function(times) local avg = bm.avg(times, { trim_outliers = OUTLIERS }) local std_dev = bm.std_dev(times, { trim_outliers = OUTLIERS }) diff --git a/plugin/canola.lua b/plugin/canola.lua new file mode 100644 index 0000000..ee1c0b7 --- /dev/null +++ b/plugin/canola.lua @@ -0,0 +1,3 @@ +if vim.g.canola ~= nil then + require('canola').setup() +end diff --git a/plugin/oil.lua b/plugin/oil.lua deleted file mode 100644 index bcb530d..0000000 --- a/plugin/oil.lua +++ /dev/null @@ -1,3 +0,0 @@ -if vim.g.oil ~= nil then - require('oil').setup() -end diff --git a/spec/altbuf_spec.lua b/spec/altbuf_spec.lua index cd2cf4b..b74a5e2 100644 --- a/spec/altbuf_spec.lua +++ b/spec/altbuf_spec.lua @@ -1,5 +1,5 @@ -local fs = require('oil.fs') -local oil = require('oil') +local canola = require('canola') +local fs = require('canola.fs') local test_util = require('spec.test_util') describe('Alternate buffer', function() @@ -9,27 +9,27 @@ describe('Alternate buffer', function() it('sets previous buffer as alternate', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate when editing url file', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) local readme = fs.join(vim.fn.getcwd(), 'README.md') - vim.cmd.edit({ args = { 'oil://' .. fs.os_to_posix_path(readme) } }) + vim.cmd.edit({ args = { 'canola://' .. fs.os_to_posix_path(readme) } }) test_util.wait_for_autocmd('BufEnter') assert.equals(readme, vim.api.nvim_buf_get_name(0)) assert.equals('foo', vim.fn.expand('#')) end) - it('sets previous buffer as alternate when editing oil://', function() + it('sets previous buffer as alternate when editing canola://', function() vim.cmd.edit({ args = { 'foo' } }) - vim.cmd.edit({ args = { 'oil://' .. fs.os_to_posix_path(vim.fn.getcwd()) } }) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + vim.cmd.edit({ args = { 'canola://' .. fs.os_to_posix_path(vim.fn.getcwd()) } }) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) @@ -37,8 +37,8 @@ describe('Alternate buffer', function() it('preserves alternate buffer if editing the same file', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) @@ -46,71 +46,71 @@ describe('Alternate buffer', function() it('preserves alternate buffer if discarding changes', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.close() + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.close() assert.equals('bar', vim.fn.expand('%')) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate after multi-dir hops', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) - it('sets previous buffer as alternate when inside oil buffer', function() + it('sets previous buffer as alternate when inside canola buffer', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) - oil.open() + canola.open() assert.equals('bar', vim.fn.expand('#')) end) - it('preserves alternate when traversing oil dirs', function() + it('preserves alternate when traversing canola dirs', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.wait(1000, function() - return oil.get_cursor_entry() + return canola.get_cursor_entry() end, 10) vim.api.nvim_win_set_cursor(0, { 1, 1 }) - oil.select() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.select() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate when opening preview', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.wait(1000, function() - return oil.get_cursor_entry() + return canola.get_cursor_entry() end, 10) vim.api.nvim_win_set_cursor(0, { 1, 1 }) - oil.open_preview() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open_preview() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) end) describe('floating window', function() it('sets previous buffer as alternate', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open_float() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open_float() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.api.nvim_win_close(0, true) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) @@ -119,8 +119,8 @@ describe('Alternate buffer', function() it('preserves alternate buffer if editing the same file', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) - oil.open_float() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open_float() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.api.nvim_win_close(0, true) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) @@ -129,19 +129,19 @@ describe('Alternate buffer', function() it('preserves alternate buffer if discarding changes', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) - oil.open_float() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.close() + canola.open_float() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.close() assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate when traversing to a new file', function() vim.cmd.edit({ args = { 'foo' } }) - oil.open_float() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open_float() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) test_util.feedkeys({ '/LICENSE' }, 10) - oil.select() + canola.select() test_util.wait_for_autocmd('BufEnter') assert.equals('LICENSE', vim.fn.expand('%:.')) assert.equals('foo', vim.fn.expand('#')) diff --git a/spec/close_spec.lua b/spec/close_spec.lua index 0e15ab7..dc4138e 100644 --- a/spec/close_spec.lua +++ b/spec/close_spec.lua @@ -1,4 +1,4 @@ -local oil = require('oil') +local canola = require('canola') local test_util = require('spec.test_util') describe('close', function() @@ -10,35 +10,35 @@ describe('close', function() end) it('does not close buffer from visual mode', function() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.equals('oil', vim.bo.filetype) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.equals('canola', vim.bo.filetype) test_util.feedkeys({ 'V' }, 10) - oil.close() - assert.equals('oil', vim.bo.filetype) + canola.close() + assert.equals('canola', vim.bo.filetype) test_util.feedkeys({ '' }, 10) end) it('does not close buffer from operator-pending mode', function() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.equals('oil', vim.bo.filetype) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.equals('canola', vim.bo.filetype) vim.api.nvim_feedkeys('d', 'n', false) vim.wait(20) local mode = vim.api.nvim_get_mode().mode if mode:match('^no') then - oil.close() - assert.equals('oil', vim.bo.filetype) + canola.close() + assert.equals('canola', vim.bo.filetype) end vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n', false) vim.wait(20) end) it('closes buffer from normal mode', function() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.equals('oil', vim.bo.filetype) - oil.close() - assert.not_equals('oil', vim.bo.filetype) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.equals('canola', vim.bo.filetype) + canola.close() + assert.not_equals('canola', vim.bo.filetype) end) end) diff --git a/spec/config_spec.lua b/spec/config_spec.lua index c565c72..bb37e41 100644 --- a/spec/config_spec.lua +++ b/spec/config_spec.lua @@ -1,26 +1,26 @@ -local config = require('oil.config') +local config = require('canola.config') describe('config', function() after_each(function() - vim.g.oil = nil + vim.g.canola = nil end) - it('falls back to vim.g.oil when setup() is called with no args', function() - vim.g.oil = { delete_to_trash = true, cleanup_delay_ms = 5000 } + it('falls back to vim.g.canola when setup() is called with no args', function() + vim.g.canola = { delete_to_trash = true, cleanup_delay_ms = 5000 } config.setup() assert.is_true(config.delete_to_trash) assert.equals(5000, config.cleanup_delay_ms) end) - it('uses defaults when neither opts nor vim.g.oil is set', function() - vim.g.oil = nil + it('uses defaults when neither opts nor vim.g.canola is set', function() + vim.g.canola = nil config.setup() assert.is_false(config.delete_to_trash) assert.equals(2000, config.cleanup_delay_ms) end) - it('prefers explicit opts over vim.g.oil', function() - vim.g.oil = { delete_to_trash = true } + it('prefers explicit opts over vim.g.canola', function() + vim.g.canola = { delete_to_trash = true } config.setup({ delete_to_trash = false }) assert.is_false(config.delete_to_trash) end) diff --git a/spec/files_spec.lua b/spec/files_spec.lua index 299b434..7c430f3 100644 --- a/spec/files_spec.lua +++ b/spec/files_spec.lua @@ -1,5 +1,5 @@ local TmpDir = require('spec.tmpdir') -local files = require('oil.adapters.files') +local files = require('canola.adapters.files') local test_util = require('spec.test_util') describe('files adapter', function() @@ -26,7 +26,7 @@ describe('files adapter', function() it('Creates files', function() local err = test_util.await(files.perform_action, 2, { - url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt', + url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt', entry_type = 'file', type = 'create', }) @@ -38,7 +38,7 @@ describe('files adapter', function() it('Creates directories', function() local err = test_util.await(files.perform_action, 2, { - url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a', + url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a', entry_type = 'directory', type = 'create', }) @@ -50,7 +50,7 @@ describe('files adapter', function() it('Deletes files', function() tmpdir:create({ 'a.txt' }) - local url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' + local url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' local err = test_util.await(files.perform_action, 2, { url = url, entry_type = 'file', @@ -62,7 +62,7 @@ describe('files adapter', function() it('Deletes directories', function() tmpdir:create({ 'a/' }) - local url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' + local url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' local err = test_util.await(files.perform_action, 2, { url = url, entry_type = 'directory', @@ -74,8 +74,8 @@ describe('files adapter', function() it('Moves files', function() tmpdir:create({ 'a.txt' }) - local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' - local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' + local src_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' + local dest_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' local err = test_util.await(files.perform_action, 2, { src_url = src_url, dest_url = dest_url, @@ -90,8 +90,8 @@ describe('files adapter', function() it('Moves directories', function() tmpdir:create({ 'a/a.txt' }) - local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' - local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' + local src_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' + local dest_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' local err = test_util.await(files.perform_action, 2, { src_url = src_url, dest_url = dest_url, @@ -107,8 +107,8 @@ describe('files adapter', function() it('Copies files', function() tmpdir:create({ 'a.txt' }) - local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' - local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' + local src_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a.txt' + local dest_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b.txt' local err = test_util.await(files.perform_action, 2, { src_url = src_url, dest_url = dest_url, @@ -124,8 +124,8 @@ describe('files adapter', function() it('Recursively copies directories', function() tmpdir:create({ 'a/a.txt' }) - local src_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' - local dest_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' + local src_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'a' + local dest_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'b' local err = test_util.await(files.perform_action, 2, { src_url = src_url, dest_url = dest_url, @@ -141,22 +141,22 @@ describe('files adapter', function() }) end) - it('Editing a new oil://path/ creates an oil buffer', function() - local tmpdir_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' + it('Editing a new canola://path/ creates an canola buffer', function() + local tmpdir_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' vim.cmd.edit({ args = { tmpdir_url } }) - test_util.wait_oil_ready() - local new_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'newdir' + test_util.wait_canola_ready() + local new_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'newdir' vim.cmd.edit({ args = { new_url } }) - test_util.wait_oil_ready() - assert.equals('oil', vim.bo.filetype) + test_util.wait_canola_ready() + assert.equals('canola', vim.bo.filetype) assert.equals(new_url .. '/', vim.api.nvim_buf_get_name(0)) end) - it('Editing a new oil://file.rb creates a normal buffer', function() - local tmpdir_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' + it('Editing a new canola://file.rb creates a normal buffer', function() + local tmpdir_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. '/' vim.cmd.edit({ args = { tmpdir_url } }) test_util.wait_for_autocmd('BufReadPost') - local new_url = 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'file.rb' + local new_url = 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') .. 'file.rb' vim.cmd.edit({ args = { new_url } }) test_util.wait_for_autocmd('BufReadPost') assert.equals('ruby', vim.bo.filetype) diff --git a/spec/manual_progress.lua b/spec/manual_progress.lua index 593a748..3842674 100644 --- a/spec/manual_progress.lua +++ b/spec/manual_progress.lua @@ -1,5 +1,5 @@ -- Manual test for minimizing/restoring progress window -local Progress = require('oil.mutator.progress') +local Progress = require('canola.mutator.progress') local progress = Progress.new() @@ -13,7 +13,7 @@ for i = 1, 10, 1 do vim.defer_fn(function() progress:set_action({ type = 'create', - url = string.format('oil:///tmp/test_%d.txt', i), + url = string.format('canola:///tmp/test_%d.txt', i), entry_type = 'file', }, i, 10) end, (i - 1) * 1000) diff --git a/spec/move_rename_spec.lua b/spec/move_rename_spec.lua index 5b7348b..7b2d5a5 100644 --- a/spec/move_rename_spec.lua +++ b/spec/move_rename_spec.lua @@ -1,6 +1,6 @@ -local fs = require('oil.fs') +local fs = require('canola.fs') local test_util = require('spec.test_util') -local util = require('oil.util') +local util = require('canola.util') describe('update_moved_buffers', function() after_each(function() @@ -8,51 +8,51 @@ describe('update_moved_buffers', function() end) it('Renames moved buffers', function() - vim.cmd.edit({ args = { 'oil-test:///foo/bar.txt' } }) - util.update_moved_buffers('file', 'oil-test:///foo/bar.txt', 'oil-test:///foo/baz.txt') - assert.equals('oil-test:///foo/baz.txt', vim.api.nvim_buf_get_name(0)) + vim.cmd.edit({ args = { 'canola-test:///foo/bar.txt' } }) + util.update_moved_buffers('file', 'canola-test:///foo/bar.txt', 'canola-test:///foo/baz.txt') + assert.equals('canola-test:///foo/baz.txt', vim.api.nvim_buf_get_name(0)) end) it('Renames moved buffers when they are normal files', function() - local tmpdir = fs.join(vim.loop.fs_realpath(vim.fn.stdpath('cache')), 'oil', 'test') + local tmpdir = fs.join(vim.loop.fs_realpath(vim.fn.stdpath('cache')), 'canola', 'test') local testfile = fs.join(tmpdir, 'foo.txt') vim.cmd.edit({ args = { testfile } }) util.update_moved_buffers( 'file', - 'oil://' .. fs.os_to_posix_path(testfile), - 'oil://' .. fs.os_to_posix_path(fs.join(tmpdir, 'bar.txt')) + 'canola://' .. fs.os_to_posix_path(testfile), + 'canola://' .. fs.os_to_posix_path(fs.join(tmpdir, 'bar.txt')) ) assert.equals(fs.join(tmpdir, 'bar.txt'), vim.api.nvim_buf_get_name(0)) end) it('Renames directories', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) - util.update_moved_buffers('directory', 'oil-test:///foo/', 'oil-test:///bar/') - assert.equals('oil-test:///bar/', vim.api.nvim_buf_get_name(0)) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) + util.update_moved_buffers('directory', 'canola-test:///foo/', 'canola-test:///bar/') + assert.equals('canola-test:///bar/', vim.api.nvim_buf_get_name(0)) end) it('Renames subdirectories', function() - vim.cmd.edit({ args = { 'oil-test:///foo/bar/' } }) - util.update_moved_buffers('directory', 'oil-test:///foo/', 'oil-test:///baz/') - assert.equals('oil-test:///baz/bar/', vim.api.nvim_buf_get_name(0)) + vim.cmd.edit({ args = { 'canola-test:///foo/bar/' } }) + util.update_moved_buffers('directory', 'canola-test:///foo/', 'canola-test:///baz/') + assert.equals('canola-test:///baz/bar/', vim.api.nvim_buf_get_name(0)) end) it('Renames subfiles', function() - vim.cmd.edit({ args = { 'oil-test:///foo/bar.txt' } }) - util.update_moved_buffers('directory', 'oil-test:///foo/', 'oil-test:///baz/') - assert.equals('oil-test:///baz/bar.txt', vim.api.nvim_buf_get_name(0)) + vim.cmd.edit({ args = { 'canola-test:///foo/bar.txt' } }) + util.update_moved_buffers('directory', 'canola-test:///foo/', 'canola-test:///baz/') + assert.equals('canola-test:///baz/bar.txt', vim.api.nvim_buf_get_name(0)) end) it('Renames subfiles when they are normal files', function() - local tmpdir = fs.join(vim.loop.fs_realpath(vim.fn.stdpath('cache')), 'oil', 'test') + local tmpdir = fs.join(vim.loop.fs_realpath(vim.fn.stdpath('cache')), 'canola', 'test') local foo = fs.join(tmpdir, 'foo') local bar = fs.join(tmpdir, 'bar') local testfile = fs.join(foo, 'foo.txt') vim.cmd.edit({ args = { testfile } }) util.update_moved_buffers( 'directory', - 'oil://' .. fs.os_to_posix_path(foo), - 'oil://' .. fs.os_to_posix_path(bar) + 'canola://' .. fs.os_to_posix_path(foo), + 'canola://' .. fs.os_to_posix_path(bar) ) assert.equals(fs.join(bar, 'foo.txt'), vim.api.nvim_buf_get_name(0)) end) diff --git a/spec/mutator_spec.lua b/spec/mutator_spec.lua index 74ce935..2060b6d 100644 --- a/spec/mutator_spec.lua +++ b/spec/mutator_spec.lua @@ -1,7 +1,7 @@ -local cache = require('oil.cache') -local constants = require('oil.constants') -local mutator = require('oil.mutator') -local test_adapter = require('oil.adapters.test') +local cache = require('canola.cache') +local constants = require('canola.constants') +local mutator = require('canola.mutator') +local test_adapter = require('canola.adapters.test') local test_util = require('spec.test_util') local FIELD_ID = constants.FIELD_ID @@ -15,7 +15,7 @@ describe('mutator', function() describe('build actions', function() it('empty diffs produce no actions', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local actions = mutator.create_actions_from_diffs({ [bufnr] = {}, @@ -24,7 +24,7 @@ describe('mutator', function() end) it('constructs CREATE actions', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'new', name = 'a.txt', entry_type = 'file' }, @@ -36,14 +36,14 @@ describe('mutator', function() { type = 'create', entry_type = 'file', - url = 'oil-test:///foo/a.txt', + url = 'canola-test:///foo/a.txt', }, }, actions) end) it('constructs DELETE actions', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'delete', name = 'a.txt', id = file[FIELD_ID] }, @@ -55,14 +55,14 @@ describe('mutator', function() { type = 'delete', entry_type = 'file', - url = 'oil-test:///foo/a.txt', + url = 'canola-test:///foo/a.txt', }, }, actions) end) it('constructs COPY actions', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'new', name = 'b.txt', entry_type = 'file', id = file[FIELD_ID] }, @@ -74,15 +74,15 @@ describe('mutator', function() { type = 'copy', entry_type = 'file', - src_url = 'oil-test:///foo/a.txt', - dest_url = 'oil-test:///foo/b.txt', + src_url = 'canola-test:///foo/a.txt', + dest_url = 'canola-test:///foo/b.txt', }, }, actions) end) it('constructs MOVE actions', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'delete', name = 'a.txt', id = file[FIELD_ID] }, @@ -95,15 +95,15 @@ describe('mutator', function() { type = 'move', entry_type = 'file', - src_url = 'oil-test:///foo/a.txt', - dest_url = 'oil-test:///foo/b.txt', + src_url = 'canola-test:///foo/a.txt', + dest_url = 'canola-test:///foo/b.txt', }, }, actions) end) it('correctly orders MOVE + CREATE', function() local file = test_adapter.test_set('/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///' } }) + vim.cmd.edit({ args = { 'canola-test:///' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'delete', name = 'a.txt', id = file[FIELD_ID] }, @@ -117,13 +117,13 @@ describe('mutator', function() { type = 'move', entry_type = 'file', - src_url = 'oil-test:///a.txt', - dest_url = 'oil-test:///b.txt', + src_url = 'canola-test:///a.txt', + dest_url = 'canola-test:///b.txt', }, { type = 'create', entry_type = 'file', - url = 'oil-test:///a.txt', + url = 'canola-test:///a.txt', }, }, actions) end) @@ -131,7 +131,7 @@ describe('mutator', function() it('resolves MOVE loops', function() local afile = test_adapter.test_set('/a.txt', 'file') local bfile = test_adapter.test_set('/b.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///' } }) + vim.cmd.edit({ args = { 'canola-test:///' } }) local bufnr = vim.api.nvim_get_current_buf() local diffs = { { type = 'delete', name = 'a.txt', id = afile[FIELD_ID] }, @@ -143,25 +143,25 @@ describe('mutator', function() local actions = mutator.create_actions_from_diffs({ [bufnr] = diffs, }) - local tmp_url = 'oil-test:///a.txt__oil_tmp_510852' + local tmp_url = 'canola-test:///a.txt__canola_tmp_510852' assert.are.same({ { type = 'move', entry_type = 'file', - src_url = 'oil-test:///a.txt', + src_url = 'canola-test:///a.txt', dest_url = tmp_url, }, { type = 'move', entry_type = 'file', - src_url = 'oil-test:///b.txt', - dest_url = 'oil-test:///a.txt', + src_url = 'canola-test:///b.txt', + dest_url = 'canola-test:///a.txt', }, { type = 'move', entry_type = 'file', src_url = tmp_url, - dest_url = 'oil-test:///b.txt', + dest_url = 'canola-test:///b.txt', }, }, actions) end) @@ -171,11 +171,11 @@ describe('mutator', function() it('Creates files inside dir before move', function() local move = { type = 'move', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///b', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///b', entry_type = 'directory', } - local create = { type = 'create', url = 'oil-test:///a/hi.txt', entry_type = 'file' } + local create = { type = 'create', url = 'canola-test:///a/hi.txt', entry_type = 'file' } local actions = { move, create } local ordered_actions = mutator.enforce_action_order(actions) assert.are.same({ create, move }, ordered_actions) @@ -184,11 +184,11 @@ describe('mutator', function() it('Moves file out of parent before deleting parent', function() local move = { type = 'move', - src_url = 'oil-test:///a/b.txt', - dest_url = 'oil-test:///b.txt', + src_url = 'canola-test:///a/b.txt', + dest_url = 'canola-test:///b.txt', entry_type = 'file', } - local delete = { type = 'delete', url = 'oil-test:///a', entry_type = 'directory' } + local delete = { type = 'delete', url = 'canola-test:///a', entry_type = 'directory' } local actions = { delete, move } local ordered_actions = mutator.enforce_action_order(actions) assert.are.same({ move, delete }, ordered_actions) @@ -197,14 +197,14 @@ describe('mutator', function() it('Handles parent child move ordering', function() local move1 = { type = 'move', - src_url = 'oil-test:///a/b', - dest_url = 'oil-test:///b', + src_url = 'canola-test:///a/b', + dest_url = 'canola-test:///b', entry_type = 'directory', } local move2 = { type = 'move', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///b/a', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///b/a', entry_type = 'directory', } local actions = { move2, move1 } @@ -215,13 +215,13 @@ describe('mutator', function() it('Handles a delete inside a moved folder', function() local del = { type = 'delete', - url = 'oil-test:///a/b.txt', + url = 'canola-test:///a/b.txt', entry_type = 'file', } local move = { type = 'move', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///b', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///b', entry_type = 'directory', } local actions = { move, del } @@ -232,8 +232,8 @@ describe('mutator', function() it('Detects move directory loops', function() local move = { type = 'move', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///a/b', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///a/b', entry_type = 'directory', } assert.has_error(function() @@ -244,8 +244,8 @@ describe('mutator', function() it('Detects copy directory loops', function() local move = { type = 'copy', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///a/b', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///a/b', entry_type = 'directory', } assert.has_error(function() @@ -256,8 +256,8 @@ describe('mutator', function() it('Detects nested copy directory loops', function() local move = { type = 'copy', - src_url = 'oil-test:///a', - dest_url = 'oil-test:///a/b/a', + src_url = 'canola-test:///a', + dest_url = 'canola-test:///a/b/a', entry_type = 'directory', } assert.has_error(function() @@ -267,10 +267,10 @@ describe('mutator', function() describe('change', function() it('applies CHANGE after CREATE', function() - local create = { type = 'create', url = 'oil-test:///a/hi.txt', entry_type = 'file' } + local create = { type = 'create', url = 'canola-test:///a/hi.txt', entry_type = 'file' } local change = { type = 'change', - url = 'oil-test:///a/hi.txt', + url = 'canola-test:///a/hi.txt', entry_type = 'file', column = 'TEST', value = 'TEST', @@ -283,13 +283,13 @@ describe('mutator', function() it('applies CHANGE after COPY src', function() local copy = { type = 'copy', - src_url = 'oil-test:///a/hi.txt', - dest_url = 'oil-test:///b.txt', + src_url = 'canola-test:///a/hi.txt', + dest_url = 'canola-test:///b.txt', entry_type = 'file', } local change = { type = 'change', - url = 'oil-test:///a/hi.txt', + url = 'canola-test:///a/hi.txt', entry_type = 'file', column = 'TEST', value = 'TEST', @@ -302,13 +302,13 @@ describe('mutator', function() it('applies CHANGE after COPY dest', function() local copy = { type = 'copy', - src_url = 'oil-test:///b.txt', - dest_url = 'oil-test:///a/hi.txt', + src_url = 'canola-test:///b.txt', + dest_url = 'canola-test:///a/hi.txt', entry_type = 'file', } local change = { type = 'change', - url = 'oil-test:///a/hi.txt', + url = 'canola-test:///a/hi.txt', entry_type = 'file', column = 'TEST', value = 'TEST', @@ -321,13 +321,13 @@ describe('mutator', function() it('applies CHANGE after MOVE dest', function() local move = { type = 'move', - src_url = 'oil-test:///b.txt', - dest_url = 'oil-test:///a/hi.txt', + src_url = 'canola-test:///b.txt', + dest_url = 'canola-test:///a/hi.txt', entry_type = 'file', } local change = { type = 'change', - url = 'oil-test:///a/hi.txt', + url = 'canola-test:///a/hi.txt', entry_type = 'file', column = 'TEST', value = 'TEST', @@ -342,10 +342,10 @@ describe('mutator', function() describe('perform actions', function() it('creates new entries', function() local actions = { - { type = 'create', url = 'oil-test:///a.txt', entry_type = 'file' }, + { type = 'create', url = 'canola-test:///a.txt', entry_type = 'file' }, } test_util.await(mutator.process_actions, 2, actions) - local files = cache.list_url('oil-test:///') + local files = cache.list_url('canola-test:///') assert.are.same({ ['a.txt'] = { [FIELD_ID] = 1, @@ -358,10 +358,10 @@ describe('mutator', function() it('deletes entries', function() local file = test_adapter.test_set('/a.txt', 'file') local actions = { - { type = 'delete', url = 'oil-test:///a.txt', entry_type = 'file' }, + { type = 'delete', url = 'canola-test:///a.txt', entry_type = 'file' }, } test_util.await(mutator.process_actions, 2, actions) - local files = cache.list_url('oil-test:///') + local files = cache.list_url('canola-test:///') assert.are.same({}, files) assert.is_nil(cache.get_entry_by_id(file[FIELD_ID])) assert.has_error(function() @@ -374,13 +374,13 @@ describe('mutator', function() local actions = { { type = 'move', - src_url = 'oil-test:///a.txt', - dest_url = 'oil-test:///b.txt', + src_url = 'canola-test:///a.txt', + dest_url = 'canola-test:///b.txt', entry_type = 'file', }, } test_util.await(mutator.process_actions, 2, actions) - local files = cache.list_url('oil-test:///') + local files = cache.list_url('canola-test:///') local new_entry = { [FIELD_ID] = file[FIELD_ID], [FIELD_TYPE] = 'file', @@ -390,7 +390,7 @@ describe('mutator', function() ['b.txt'] = new_entry, }, files) assert.are.same(new_entry, cache.get_entry_by_id(file[FIELD_ID])) - assert.equals('oil-test:///', cache.get_parent_url(file[FIELD_ID])) + assert.equals('canola-test:///', cache.get_parent_url(file[FIELD_ID])) end) it('copies entries', function() @@ -398,13 +398,13 @@ describe('mutator', function() local actions = { { type = 'copy', - src_url = 'oil-test:///a.txt', - dest_url = 'oil-test:///b.txt', + src_url = 'canola-test:///a.txt', + dest_url = 'canola-test:///b.txt', entry_type = 'file', }, } test_util.await(mutator.process_actions, 2, actions) - local files = cache.list_url('oil-test:///') + local files = cache.list_url('canola-test:///') local new_entry = { [FIELD_ID] = file[FIELD_ID] + 1, [FIELD_TYPE] = 'file', diff --git a/spec/parser_spec.lua b/spec/parser_spec.lua index 563c001..ffc638b 100644 --- a/spec/parser_spec.lua +++ b/spec/parser_spec.lua @@ -1,9 +1,9 @@ -local constants = require('oil.constants') -local parser = require('oil.mutator.parser') -local test_adapter = require('oil.adapters.test') +local constants = require('canola.constants') +local parser = require('canola.mutator.parser') +local test_adapter = require('canola.adapters.test') local test_util = require('spec.test_util') -local util = require('oil.util') -local view = require('oil.view') +local util = require('canola.util') +local view = require('canola.view') local FIELD_ID = constants.FIELD_ID local FIELD_META = constants.FIELD_META @@ -19,7 +19,7 @@ describe('parser', function() end) it('detects new files', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { 'a.txt', @@ -29,7 +29,7 @@ describe('parser', function() end) it('detects new directories', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { 'foo/', @@ -39,7 +39,7 @@ describe('parser', function() end) it('detects new links', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { 'a.txt -> b.txt', @@ -53,7 +53,7 @@ describe('parser', function() it('detects deleted files', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, {}) local diffs = parser.parse(bufnr) @@ -64,7 +64,7 @@ describe('parser', function() it('detects deleted directories', function() local dir = test_adapter.test_set('/foo/bar', 'directory') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, {}) local diffs = parser.parse(bufnr) @@ -76,7 +76,7 @@ describe('parser', function() it('detects deleted links', function() local file = test_adapter.test_set('/foo/a.txt', 'link') file[FIELD_META] = { link = 'b.txt' } - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, {}) local diffs = parser.parse(bufnr) @@ -87,7 +87,7 @@ describe('parser', function() it('ignores empty lines', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() local cols = view.format_entry_cols(file, {}, {}, test_adapter, false) local lines = util.render_table({ cols }, {}) @@ -99,7 +99,7 @@ describe('parser', function() end) it('errors on missing filename', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { '/008', @@ -116,7 +116,7 @@ describe('parser', function() end) it('errors on empty dirname', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { '/008 /', @@ -133,7 +133,7 @@ describe('parser', function() end) it('errors on duplicate names', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { 'foo', @@ -152,7 +152,7 @@ describe('parser', function() it('errors on duplicate names for existing files', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { 'a.txt', @@ -170,7 +170,7 @@ describe('parser', function() end) it('ignores new dirs with empty name', function() - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { '/', @@ -181,7 +181,7 @@ describe('parser', function() it('parses a rename as a delete + new', function() local file = test_adapter.test_set('/foo/a.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { string.format('/%d b.txt', file[FIELD_ID]), @@ -195,7 +195,7 @@ describe('parser', function() it('detects a new trailing slash as a delete + create', function() local file = test_adapter.test_set('/foo', 'file') - vim.cmd.edit({ args = { 'oil-test:///' } }) + vim.cmd.edit({ args = { 'canola-test:///' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { string.format('/%d foo/', file[FIELD_ID]), @@ -210,7 +210,7 @@ describe('parser', function() it('detects renamed files that conflict', function() local afile = test_adapter.test_set('/foo/a.txt', 'file') local bfile = test_adapter.test_set('/foo/b.txt', 'file') - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { string.format('/%d a.txt', bfile[FIELD_ID]), @@ -238,7 +238,7 @@ describe('parser', function() it('views link targets with trailing slashes as the same', function() local file = test_adapter.test_set('/foo/mydir', 'link') file[FIELD_META] = { link = 'dir/' } - vim.cmd.edit({ args = { 'oil-test:///foo/' } }) + vim.cmd.edit({ args = { 'canola-test:///foo/' } }) local bufnr = vim.api.nvim_get_current_buf() set_lines(bufnr, { string.format('/%d mydir/ -> dir/', file[FIELD_ID]), diff --git a/spec/path_spec.lua b/spec/path_spec.lua index ab83fe4..f066d1c 100644 --- a/spec/path_spec.lua +++ b/spec/path_spec.lua @@ -1,4 +1,4 @@ -local pathutil = require('oil.pathutil') +local pathutil = require('canola.pathutil') describe('pathutil', function() it('calculates parent path', function() local cases = { diff --git a/spec/preview_spec.lua b/spec/preview_spec.lua index 030332d..137c9f9 100644 --- a/spec/preview_spec.lua +++ b/spec/preview_spec.lua @@ -1,9 +1,9 @@ local TmpDir = require('spec.tmpdir') -local oil = require('oil') +local canola = require('canola') local test_util = require('spec.test_util') -local util = require('oil.util') +local util = require('canola.util') -describe('oil preview', function() +describe('canola preview', function() local tmpdir before_each(function() tmpdir = TmpDir.new() @@ -17,8 +17,8 @@ describe('oil preview', function() it('opens preview window', function() tmpdir:create({ 'a.txt' }) - test_util.oil_open(tmpdir.path) - test_util.await(oil.open_preview, 2) + test_util.canola_open(tmpdir.path) + test_util.await(canola.open_preview, 2) local preview_win = util.get_preview_win() assert.not_nil(preview_win) assert(preview_win) @@ -29,7 +29,7 @@ describe('oil preview', function() it('opens preview window when open(preview={})', function() tmpdir:create({ 'a.txt' }) - test_util.oil_open(tmpdir.path, { preview = {} }) + test_util.canola_open(tmpdir.path, { preview = {} }) local preview_win = util.get_preview_win() assert.not_nil(preview_win) assert(preview_win) diff --git a/spec/regression_spec.lua b/spec/regression_spec.lua index bfa5e53..fddb1f8 100644 --- a/spec/regression_spec.lua +++ b/spec/regression_spec.lua @@ -1,8 +1,8 @@ local TmpDir = require('spec.tmpdir') -local actions = require('oil.actions') -local oil = require('oil') +local actions = require('canola.actions') +local canola = require('canola') local test_util = require('spec.test_util') -local view = require('oil.view') +local view = require('canola.view') describe('regression tests', function() local tmpdir @@ -21,29 +21,29 @@ describe('regression tests', function() vim.cmd.edit({ args = { 'README.md' } }) vim.cmd.vsplit() vim.cmd.edit({ args = { '%:p:h' } }) - assert.equals('oil', vim.bo.filetype) + assert.equals('canola', vim.bo.filetype) vim.cmd.wincmd({ args = { 'p' } }) assert.equals('markdown', vim.bo.filetype) vim.cmd.edit({ args = { '%:p:h' } }) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.equals('oil', vim.bo.filetype) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.equals('canola', vim.bo.filetype) end) it('places the cursor on correct entry when opening on file', function() vim.cmd.edit({ args = { '.' } }) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - local entry = oil.get_cursor_entry() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + local entry = canola.get_cursor_entry() assert.not_nil(entry) assert.not_equals('README.md', entry and entry.name) vim.cmd.edit({ args = { 'README.md' } }) view.delete_hidden_buffers() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - entry = oil.get_cursor_entry() + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + entry = canola.get_cursor_entry() assert.equals('README.md', entry and entry.name) end) - it("doesn't close floating windows oil didn't open itself", function() + it("doesn't close floating windows canola didn't open itself", function() local winid = vim.api.nvim_open_win(vim.fn.bufadd('README.md'), true, { relative = 'editor', row = 1, @@ -51,21 +51,21 @@ describe('regression tests', function() width = 100, height = 100, }) - oil.open() + canola.open() vim.wait(10) - oil.close() + canola.close() vim.wait(10) assert.equals(winid, vim.api.nvim_get_current_win()) end) - it("doesn't close splits on oil.close", function() + it("doesn't close splits on canola.close", function() vim.cmd.edit({ args = { 'README.md' } }) vim.cmd.vsplit() local winid = vim.api.nvim_get_current_win() local bufnr = vim.api.nvim_get_current_buf() - oil.open() + canola.open() vim.wait(10) - oil.close() + canola.close() vim.wait(10) assert.equals(2, #vim.api.nvim_tabpage_list_wins(0)) assert.equals(winid, vim.api.nvim_get_current_win()) @@ -73,24 +73,24 @@ describe('regression tests', function() end) it('Returns to empty buffer on close', function() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - oil.close() - assert.not_equals('oil', vim.bo.filetype) + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + canola.close() + assert.not_equals('canola', vim.bo.filetype) assert.equals('', vim.api.nvim_buf_get_name(0)) end) it('All buffers set nomodified after save', function() tmpdir:create({ 'a.txt' }) - vim.cmd.edit({ args = { 'oil://' .. vim.fn.fnamemodify(tmpdir.path, ':p') } }) + vim.cmd.edit({ args = { 'canola://' .. vim.fn.fnamemodify(tmpdir.path, ':p') } }) local first_dir = vim.api.nvim_get_current_buf() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) test_util.feedkeys({ 'dd', 'itest/', '' }, 10) vim.wait(1000, function() return vim.bo.modifiable end, 10) test_util.feedkeys({ 'p' }, 10) - oil.save({ confirm = false }) + canola.save({ confirm = false }) vim.wait(1000, function() return vim.bo.modifiable end, 10) @@ -102,11 +102,11 @@ describe('regression tests', function() it("refreshing buffer doesn't lose track of it", function() vim.cmd.edit({ args = { '.' } }) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) local bufnr = vim.api.nvim_get_current_buf() vim.cmd.edit({ bang = true }) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.are.same({ bufnr }, require('oil.view').get_all_buffers()) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.are.same({ bufnr }, require('canola.view').get_all_buffers()) end) it('can copy a file multiple times', function() @@ -126,8 +126,8 @@ describe('regression tests', function() it('can open files from floating window', function() tmpdir:create({ 'a.txt' }) - oil.open_float(tmpdir.path) - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + canola.open_float(tmpdir.path) + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) actions.select.callback() vim.wait(1000, function() return vim.fn.expand('%:t') == 'a.txt' diff --git a/spec/select_spec.lua b/spec/select_spec.lua index 47c95ac..6708618 100644 --- a/spec/select_spec.lua +++ b/spec/select_spec.lua @@ -1,52 +1,52 @@ -local oil = require('oil') +local canola = require('canola') local test_util = require('spec.test_util') -describe('oil select', function() +describe('canola select', function() after_each(function() test_util.reset_editor() end) it('opens file under cursor', function() - test_util.oil_open() + test_util.canola_open() vim.cmd.normal({ args = { 'G' } }) - test_util.await(oil.select, 2) + test_util.await(canola.select, 2) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) - assert.not_equals('oil', vim.bo.filetype) + assert.not_equals('canola', vim.bo.filetype) end) it('opens file in new tab', function() - test_util.oil_open() + test_util.canola_open() local tabpage = vim.api.nvim_get_current_tabpage() - test_util.await(oil.select, 2, { tab = true }) + test_util.await(canola.select, 2, { tab = true }) assert.equals(2, #vim.api.nvim_list_tabpages()) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(tabpage, vim.api.nvim_get_current_tabpage()) end) it('opens file in new split', function() - test_util.oil_open() + test_util.canola_open() local winid = vim.api.nvim_get_current_win() - test_util.await(oil.select, 2, { vertical = true }) + test_util.await(canola.select, 2, { vertical = true }) assert.equals(1, #vim.api.nvim_list_tabpages()) assert.equals(2, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(winid, vim.api.nvim_get_current_win()) end) it('opens multiple files in new tabs', function() - test_util.oil_open() + test_util.canola_open() vim.api.nvim_feedkeys('Vj', 'x', true) local tabpage = vim.api.nvim_get_current_tabpage() - test_util.await(oil.select, 2, { tab = true }) + test_util.await(canola.select, 2, { tab = true }) assert.equals(3, #vim.api.nvim_list_tabpages()) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(tabpage, vim.api.nvim_get_current_tabpage()) end) it('opens multiple files in new splits', function() - test_util.oil_open() + test_util.canola_open() vim.api.nvim_feedkeys('Vj', 'x', true) local winid = vim.api.nvim_get_current_win() - test_util.await(oil.select, 2, { vertical = true }) + test_util.await(canola.select, 2, { vertical = true }) assert.equals(1, #vim.api.nvim_list_tabpages()) assert.equals(3, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(winid, vim.api.nvim_get_current_win()) @@ -56,20 +56,20 @@ describe('oil select', function() it('same window', function() vim.cmd.edit({ args = { 'foo' } }) local bufnr = vim.api.nvim_get_current_buf() - test_util.oil_open() + test_util.canola_open() vim.cmd.normal({ args = { 'G' } }) - test_util.await(oil.select, 2, { close = true }) + test_util.await(canola.select, 2, { close = true }) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.not_equals(bufnr, vim.api.nvim_get_current_buf()) - assert.not_equals('oil', vim.bo.filetype) + assert.not_equals('canola', vim.bo.filetype) end) it('split', function() vim.cmd.edit({ args = { 'foo' } }) local bufnr = vim.api.nvim_get_current_buf() local winid = vim.api.nvim_get_current_win() - test_util.oil_open() - test_util.await(oil.select, 2, { vertical = true, close = true }) + test_util.canola_open() + test_util.await(canola.select, 2, { vertical = true, close = true }) assert.equals(2, #vim.api.nvim_tabpage_list_wins(0)) assert.equals(bufnr, vim.api.nvim_win_get_buf(winid)) end) @@ -78,8 +78,8 @@ describe('oil select', function() vim.cmd.edit({ args = { 'foo' } }) local bufnr = vim.api.nvim_get_current_buf() local tabpage = vim.api.nvim_get_current_tabpage() - test_util.oil_open() - test_util.await(oil.select, 2, { tab = true, close = true }) + test_util.canola_open() + test_util.await(canola.select, 2, { tab = true, close = true }) assert.equals(1, #vim.api.nvim_tabpage_list_wins(0)) assert.equals(2, #vim.api.nvim_list_tabpages()) vim.api.nvim_set_current_tabpage(tabpage) diff --git a/spec/test_util.lua b/spec/test_util.lua index 57f81b1..3afdf75 100644 --- a/spec/test_util.lua +++ b/spec/test_util.lua @@ -1,13 +1,13 @@ -local cache = require('oil.cache') -local test_adapter = require('oil.adapters.test') -local util = require('oil.util') +local cache = require('canola.cache') +local test_adapter = require('canola.adapters.test') +local util = require('canola.util') local M = {} M.reset_editor = function() - require('oil').setup({ + require('canola').setup({ columms = {}, adapters = { - ['oil-test://'] = 'test', + ['canola-test://'] = 'test', }, prompt_save_on_select_new_entry = false, }) @@ -53,8 +53,8 @@ M.await_throwiferr = function(fn, nargs, ...) return throwiferr(M.await(fn, nargs, ...)) end -M.oil_open = function(...) - M.await(require('oil').open, 3, ...) +M.canola_open = function(...) + M.await(require('canola').open, 3, ...) end M.wait_for_autocmd = function(autocmd) @@ -81,7 +81,7 @@ M.wait_for_autocmd = function(autocmd) end end -M.wait_oil_ready = function() +M.wait_canola_ready = function() local ready = false util.run_after_load( 0, @@ -93,7 +93,7 @@ M.wait_oil_ready = function() return ready end, 10) if not ready then - error('wait_oil_ready timed out') + error('wait_canola_ready timed out') end end @@ -113,34 +113,34 @@ M.feedkeys = function(actions, timestep) end M.actions = { - ---Open oil and wait for it to finish rendering + ---Open canola and wait for it to finish rendering ---@param args string[] open = function(args) vim.schedule(function() - vim.cmd.Oil({ args = args }) - if vim.b.oil_ready then + vim.cmd.Canola({ args = args }) + if vim.b.canola_ready then vim.api.nvim_exec_autocmds('User', { - pattern = 'OilEnter', + pattern = 'CanolaEnter', modeline = false, data = { buf = vim.api.nvim_get_current_buf() }, }) end end) - M.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) + M.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) end, ---Save all changes and wait for operation to complete save = function() - vim.schedule_wrap(require('oil').save)({ confirm = false }) - M.wait_for_autocmd({ 'User', pattern = 'OilMutationComplete' }) + vim.schedule_wrap(require('canola').save)({ confirm = false }) + M.wait_for_autocmd({ 'User', pattern = 'CanolaMutationComplete' }) end, ---@param bufnr? integer reload = function(bufnr) - M.await(require('oil.view').render_buffer_async, 3, bufnr or 0) + M.await(require('canola.view').render_buffer_async, 3, bufnr or 0) end, - ---Move cursor to a file or directory in an oil buffer + ---Move cursor to a file or directory in an canola buffer ---@param filename string focus = function(filename) local lines = vim.api.nvim_buf_get_lines(0, 0, -1, true) @@ -155,13 +155,13 @@ M.actions = { end, } ----Get the raw list of filenames from an unmodified oil buffer +---Get the raw list of filenames from an unmodified canola buffer ---@param bufnr? integer ---@return string[] M.parse_entries = function(bufnr) bufnr = bufnr or 0 if vim.bo[bufnr].modified then - error("parse_entries doesn't work on a modified oil buffer") + error("parse_entries doesn't work on a modified canola buffer") end local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, true) return vim.tbl_map(function(line) diff --git a/spec/tmpdir.lua b/spec/tmpdir.lua index 00a04fd..42dd44e 100644 --- a/spec/tmpdir.lua +++ b/spec/tmpdir.lua @@ -1,4 +1,4 @@ -local fs = require('oil.fs') +local fs = require('canola.fs') local test_util = require('spec.test_util') ---@param path string @@ -25,7 +25,7 @@ end local TmpDir = {} TmpDir.new = function() - local path, err = vim.loop.fs_mkdtemp('oil_test_XXXXXXXXX') + local path, err = vim.loop.fs_mkdtemp('canola_test_XXXXXXXXX') if not path then error(err) end diff --git a/spec/trash_spec.lua b/spec/trash_spec.lua index b34b40b..f3db67f 100644 --- a/spec/trash_spec.lua +++ b/spec/trash_spec.lua @@ -6,10 +6,10 @@ describe('freedesktop', function() local tmphome local home = vim.env.XDG_DATA_HOME before_each(function() - require('oil.config').delete_to_trash = true + require('canola.config').delete_to_trash = true tmpdir = TmpDir.new() tmphome = TmpDir.new() - package.loaded['oil.adapters.trash'] = require('oil.adapters.trash.freedesktop') + package.loaded['canola.adapters.trash'] = require('canola.adapters.trash.freedesktop') vim.env.XDG_DATA_HOME = tmphome.path end) after_each(function() @@ -21,7 +21,7 @@ describe('freedesktop', function() tmphome:dispose() end test_util.reset_editor() - package.loaded['oil.adapters.trash'] = nil + package.loaded['canola.adapters.trash'] = nil end) it('files can be moved to the trash', function() diff --git a/spec/url_spec.lua b/spec/url_spec.lua index 46b7af7..68dfc3f 100644 --- a/spec/url_spec.lua +++ b/spec/url_spec.lua @@ -1,19 +1,26 @@ -local oil = require('oil') -local util = require('oil.util') +local canola = require('canola') +local util = require('canola.util') describe('url', function() it('get_url_for_path', function() local cases = { - { '', 'oil://' .. util.addslash(vim.fn.getcwd()) }, - { 'term://~/oil.nvim//52953:/bin/sh', 'oil://' .. vim.loop.os_homedir() .. '/oil.nvim/' }, - { '/foo/bar.txt', 'oil:///foo/', 'bar.txt' }, - { 'oil:///foo/bar.txt', 'oil:///foo/', 'bar.txt' }, - { 'oil:///', 'oil:///' }, - { 'oil-ssh://user@hostname:8888//bar.txt', 'oil-ssh://user@hostname:8888//', 'bar.txt' }, - { 'oil-ssh://user@hostname:8888//', 'oil-ssh://user@hostname:8888//' }, + { '', 'canola://' .. util.addslash(vim.fn.getcwd()) }, + { + 'term://~/canola.nvim//52953:/bin/sh', + 'canola://' .. vim.loop.os_homedir() .. '/canola.nvim/', + }, + { '/foo/bar.txt', 'canola:///foo/', 'bar.txt' }, + { 'canola:///foo/bar.txt', 'canola:///foo/', 'bar.txt' }, + { 'canola:///', 'canola:///' }, + { + 'canola-ssh://user@hostname:8888//bar.txt', + 'canola-ssh://user@hostname:8888//', + 'bar.txt', + }, + { 'canola-ssh://user@hostname:8888//', 'canola-ssh://user@hostname:8888//' }, } for _, case in ipairs(cases) do local input, expected, expected_basename = unpack(case) - local output, basename = oil.get_buffer_parent_url(input, true) + local output, basename = canola.get_buffer_parent_url(input, true) assert.equals(expected, output, string.format('Parent url for path "%s" failed', input)) assert.equals( expected_basename, diff --git a/spec/util_spec.lua b/spec/util_spec.lua index 5796398..bb8fce9 100644 --- a/spec/util_spec.lua +++ b/spec/util_spec.lua @@ -1,4 +1,4 @@ -local util = require('oil.util') +local util = require('canola.util') describe('util', function() it('url_escape', function() local cases = { diff --git a/spec/win_options_spec.lua b/spec/win_options_spec.lua index f62aa83..54f94f2 100644 --- a/spec/win_options_spec.lua +++ b/spec/win_options_spec.lua @@ -1,4 +1,4 @@ -local oil = require('oil') +local canola = require('canola') local test_util = require('spec.test_util') describe('window options', function() @@ -8,28 +8,28 @@ describe('window options', function() it('Restores window options on close', function() vim.cmd.edit({ args = { 'README.md' } }) - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) - oil.close() + canola.close() assert.equals('auto', vim.o.signcolumn) end) it('Restores window options on edit', function() - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) vim.cmd.edit({ args = { 'README.md' } }) assert.equals('auto', vim.o.signcolumn) end) it('Restores window options on split ', function() - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) vim.cmd.split({ args = { 'README.md' } }) assert.equals('auto', vim.o.signcolumn) end) it('Restores window options on split', function() - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) vim.cmd.split() vim.cmd.edit({ args = { 'README.md' } }) @@ -37,29 +37,29 @@ describe('window options', function() end) it('Restores window options on tabnew ', function() - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) vim.cmd.tabnew({ args = { 'README.md' } }) assert.equals('auto', vim.o.signcolumn) end) it('Restores window options on tabnew', function() - test_util.oil_open() + test_util.canola_open() assert.equals('no', vim.o.signcolumn) vim.cmd.tabnew() vim.cmd.edit({ args = { 'README.md' } }) assert.equals('auto', vim.o.signcolumn) end) - it('Sets the window options when re-entering oil buffer', function() - oil.open() - test_util.wait_for_autocmd({ 'User', pattern = 'OilEnter' }) - assert.truthy(vim.w.oil_did_enter) + it('Sets the window options when re-entering canola buffer', function() + canola.open() + test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) + assert.truthy(vim.w.canola_did_enter) vim.cmd.edit({ args = { 'README.md' } }) - assert.falsy(vim.w.oil_did_enter) - oil.open() - assert.truthy(vim.w.oil_did_enter) + assert.falsy(vim.w.canola_did_enter) + canola.open() + assert.truthy(vim.w.canola_did_enter) vim.cmd.vsplit() - assert.truthy(vim.w.oil_did_enter) + assert.truthy(vim.w.canola_did_enter) end) end) diff --git a/syntax/canola.vim b/syntax/canola.vim new file mode 100644 index 0000000..330abc7 --- /dev/null +++ b/syntax/canola.vim @@ -0,0 +1,7 @@ +if exists("b:current_syntax") + finish +endif + +syn match canolaId /^\/\d* / conceal + +let b:current_syntax = "canola" diff --git a/syntax/canola_preview.vim b/syntax/canola_preview.vim new file mode 100644 index 0000000..2473f1e --- /dev/null +++ b/syntax/canola_preview.vim @@ -0,0 +1,15 @@ +if exists("b:current_syntax") + finish +endif + +syn match canolaCreate /^CREATE\( BUCKET\)\? / +syn match canolaMove /^ MOVE / +syn match canolaDelete /^DELETE\( BUCKET\)\? / +syn match canolaCopy /^ COPY / +syn match canolaChange /^CHANGE / +" Trash operations +syn match canolaRestore /^RESTORE / +syn match canolaPurge /^ PURGE / +syn match canolaTrash /^ TRASH / + +let b:current_syntax = "canola_preview" diff --git a/syntax/oil.vim b/syntax/oil.vim deleted file mode 100644 index 0f2a4a3..0000000 --- a/syntax/oil.vim +++ /dev/null @@ -1,7 +0,0 @@ -if exists("b:current_syntax") - finish -endif - -syn match oilId /^\/\d* / conceal - -let b:current_syntax = "oil" diff --git a/syntax/oil_preview.vim b/syntax/oil_preview.vim deleted file mode 100644 index 2f14df9..0000000 --- a/syntax/oil_preview.vim +++ /dev/null @@ -1,15 +0,0 @@ -if exists("b:current_syntax") - finish -endif - -syn match oilCreate /^CREATE\( BUCKET\)\? / -syn match oilMove /^ MOVE / -syn match oilDelete /^DELETE\( BUCKET\)\? / -syn match oilCopy /^ COPY / -syn match oilChange /^CHANGE / -" Trash operations -syn match oilRestore /^RESTORE / -syn match oilPurge /^ PURGE / -syn match oilTrash /^ TRASH / - -let b:current_syntax = "oil_preview"