fix: preserve the alternate buffer (#20)

This commit is contained in:
Steven Arcangeli 2023-01-07 12:23:47 -08:00
parent 6d0b6ac43c
commit e4c4110022
4 changed files with 108 additions and 11 deletions

49
tests/altbuf_spec.lua Normal file
View file

@ -0,0 +1,49 @@
local oil = require("oil")
local test_util = require("tests.test_util")
local fs = require("oil.fs")
describe("Alternate buffer", function()
after_each(function()
test_util.reset_editor()
end)
it("sets previous buffer as alternate", function()
vim.cmd.edit({ args = { "foo" } })
oil.open()
vim.cmd.edit({ args = { "bar" } })
assert.equals("foo", vim.fn.expand("#"))
end)
it("sets previous buffer as alternate when editing oil://", function()
vim.cmd.edit({ args = { "foo" } })
vim.cmd.edit({ args = { "oil://" .. fs.os_to_posix_path(vim.fn.getcwd()) } })
vim.cmd.edit({ args = { "bar" } })
assert.equals("foo", vim.fn.expand("#"))
end)
it("preserves alternate buffer if editing the same file", function()
vim.cmd.edit({ args = { "foo" } })
vim.cmd.edit({ args = { "bar" } })
oil.open()
vim.cmd.edit({ args = { "bar" } })
assert.equals("foo", vim.fn.expand("#"))
end)
it("preserves alternate buffer if discarding changes", function()
vim.cmd.edit({ args = { "foo" } })
vim.cmd.edit({ args = { "bar" } })
oil.open()
oil.close()
assert.equals("foo", vim.fn.expand("#"))
end)
it("sets previous buffer as alternate after multi-dir hops", function()
vim.cmd.edit({ args = { "foo" } })
oil.open()
oil.open()
oil.open()
oil.open()
vim.cmd.edit({ args = { "bar" } })
assert.equals("foo", vim.fn.expand("#"))
end)
end)

19
tests/test_util.lua Normal file
View file

@ -0,0 +1,19 @@
local M = {}
M.reset_editor = function()
require("oil").setup({})
vim.cmd.tabonly({ mods = { silent = true } })
for i, winid in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
if i > 1 then
vim.api.nvim_win_close(winid, true)
end
end
vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(false, true))
for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_get_option(bufnr, "buflisted") then
vim.api.nvim_buf_delete(bufnr, { force = true })
end
end
end
return M