refactor: rename oil to canola across entire codebase (#70)
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.
This commit is contained in:
parent
67ad0632a6
commit
0d3088f57e
70 changed files with 1571 additions and 1555 deletions
|
|
@ -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({
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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()
|
||||
9
lua/canola/adapters/trash.lua
Normal file
9
lua/canola/adapters/trash.lua
Normal file
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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()
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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<url, Map<entry name, oil.InternalEntry>>
|
||||
---@type table<string, table<string, oil.InternalEntry>>
|
||||
-- Map<url, Map<entry name, canola.InternalEntry>>
|
||||
---@type table<string, table<string, canola.InternalEntry>>
|
||||
local url_directory = {}
|
||||
|
||||
---@type table<integer, oil.InternalEntry>
|
||||
---@type table<integer, canola.InternalEntry>
|
||||
local entries_by_id = {}
|
||||
|
||||
---@type table<integer, string>
|
||||
|
|
@ -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<string, oil.InternalEntry>
|
||||
---@return table<string, canola.InternalEntry>
|
||||
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)
|
||||
|
|
@ -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('<Esc>', 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
|
||||
|
|
@ -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]
|
||||
|
|
@ -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.<name>",
|
||||
-- it will use the mapping at require("oil.actions").<name>
|
||||
-- it will use the mapping at require("canola.actions").<name>
|
||||
-- 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' },
|
||||
['<CR>'] = '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<string, string> Hidden from SetupOpts
|
||||
---@field adapter_aliases table<string, string> 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<string, any>
|
||||
---@field win_options table<string, any>
|
||||
---@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<string, any>
|
||||
---@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<string, any> Buffer-local options to use for oil buffers
|
||||
---@field win_options? table<string, any> 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<string, any> Buffer-local options to use for canola buffers
|
||||
---@field win_options? table<string, any> 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<string, any>
|
||||
---@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<string, any>
|
||||
|
||||
---@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<string, any>
|
||||
|
||||
---@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<string, any>
|
||||
|
||||
---@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<string, any> 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
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -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, {
|
||||
|
|
@ -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,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
local util = require('oil.util')
|
||||
local util = require('canola.util')
|
||||
local M = {}
|
||||
|
||||
local timers = {}
|
||||
|
|
@ -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)
|
||||
|
|
@ -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 = {}
|
||||
|
|
@ -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 = {
|
||||
|
|
@ -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
|
||||
|
|
@ -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<integer, oil.Diff[]>
|
||||
---@return oil.Action[]
|
||||
---@param all_diffs table<integer, canola.Diff[]>
|
||||
---@return canola.Action[]
|
||||
M.create_actions_from_diffs = function(all_diffs)
|
||||
---@type oil.Action[]
|
||||
---@type canola.Action[]
|
||||
local actions = {}
|
||||
|
||||
---@type table<integer, oil.Diff[]>
|
||||
---@type table<integer, canola.Diff[]>
|
||||
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<integer, oil.ParseError[]>
|
||||
---@type table<integer, canola.ParseError[]>
|
||||
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)
|
||||
|
|
@ -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<string, integer[]> 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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
---@class oil.Ringbuf
|
||||
---@class canola.Ringbuf
|
||||
---@field private size integer
|
||||
---@field private tail integer
|
||||
---@field private buf string[]
|
||||
|
|
@ -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)
|
||||
|
|
@ -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<integer, oil.ViewData>
|
||||
---@type table<integer, canola.ViewData>
|
||||
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<string, integer[]>
|
||||
---@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)
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue