feat: trash support for linux and mac (#165)
* wip: skeleton code for trash adapter * refactor: split trash implementation for mac and linux * fix: ensure we create the .Trash/$uid dir * feat: code complete linux trash implementation * doc: write up trash features * feat: code complete mac trash implementation * cleanup: remove previous, terrible, undocumented trash feature * fix: always disabled trash * feat: show original path of trashed files * doc: add a note about calling actions directly * fix: bugs in trash implementation * fix: schedule_wrap in mac trash * doc: fix typo and line wrapping * fix: parsing of arguments to :Oil command * doc: small documentation tweaks * doc: fix awkward wording in the toggle_trash action * fix: warning on Windows when delete_to_trash = true * feat: :Oil --trash can open specific trash directories * fix: show all trash files in device root * fix: trash mtime should be sortable * fix: shorten_path handles optional trailing slash * refactor: overhaul the UI * fix: keep trash original path vtext from stacking * refactor: replace disable_changes with an error filter * fix: shorten path names in home directory relative to root * doc: small README format changes * cleanup: remove unnecessary preserve_undo logic * test: add a functional test for the freedesktop trash adapter * test: more functional tests for trash * fix: schedule a callback to avoid main loop error * refactor: clean up mutator logic * doc: some comments and type annotations
This commit is contained in:
parent
d8f0d91b10
commit
6175bd6462
27 changed files with 1580 additions and 229 deletions
|
|
@ -1,6 +1,9 @@
|
|||
local oil = require("oil")
|
||||
local util = require("oil.util")
|
||||
|
||||
-- TODO remove after https://github.com/folke/neodev.nvim/pull/163 lands
|
||||
---@diagnostic disable: inject-field
|
||||
|
||||
local M = {}
|
||||
|
||||
M.show_help = {
|
||||
|
|
@ -302,6 +305,35 @@ M.change_sort = {
|
|||
end,
|
||||
}
|
||||
|
||||
M.toggle_trash = {
|
||||
desc = "Jump to and from the trash for the current directory",
|
||||
callback = function()
|
||||
local fs = require("oil.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
|
||||
-- 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
|
||||
if src_bufnr and vim.api.nvim_buf_is_valid(src_bufnr) then
|
||||
url = vim.api.nvim_buf_get_name(src_bufnr)
|
||||
end
|
||||
end
|
||||
else
|
||||
vim.notify("No trash found for buffer", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
vim.cmd.edit({ args = { url } })
|
||||
vim.b.oil_trash_toggle_src = bufnr
|
||||
end,
|
||||
}
|
||||
|
||||
---List actions for documentation generation
|
||||
---@private
|
||||
M._get_actions = function()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue