- Added back_to_list keymap (default <Esc>) to return to the list view easily.

- Configured buffers to be transient (`bufhidden=wipe`, `buflisted=false`) to keep the buffer list clean.
This commit is contained in:
Elflare
2025-11-29 14:33:19 +08:00
parent b4a381c52c
commit 6a1bfce9df
2 changed files with 52 additions and 8 deletions

View File

@@ -7,7 +7,7 @@ M.config = {
page_size = 50,
-- 【新增】窗口配置
window = {
enable_float = false, -- 默认为 false设为 true 则开启浮动窗口
enable_float = true, -- 默认为 false设为 true 则开启浮动窗口
width = 0.85, -- 宽度占屏幕比例
height = 0.85, -- 高度占屏幕比例
border = "rounded", -- 边框样式: "single", "double", "rounded", "solid", "shadow"
@@ -29,6 +29,7 @@ M.config = {
-- 在编辑和创建窗口中的快捷键
buffer = {
save = "<leader>ms",
back_to_list = '<Esc>'
},
},
}

View File

@@ -48,11 +48,23 @@ function M.render_memos(data, append)
end)
end
function M.return_to_list()
local current_edit_buf = vim.api.nvim_get_current_buf()
-- 1. 先重新显示列表 (这会将当前窗口的内容切换回列表 Buffer)
M.show_memos_list(current_filter)
-- 2. 然后安全地销毁刚才那个编辑 Buffer (force = true 忽略未保存修改)
if vim.api.nvim_buf_is_valid(current_edit_buf) then
vim.cmd("bwipeout! " .. current_edit_buf)
end
end
function M.setup_buffer_for_editing()
vim.bo.buftype = "nofile"
vim.bo.bufhidden = "wipe"
vim.bo.swapfile = false
vim.bo.buflisted = true
vim.bo.buflisted = false
vim.bo.filetype = "markdown"
vim.b.memos_original_content = table.concat(vim.api.nvim_buf_get_lines(0, 0, -1, false), "\n")
@@ -77,6 +89,16 @@ function M.setup_buffer_for_editing()
"<Cmd>MemosSave<CR>",
{ noremap = true, silent = true }
)
-- 【新增】绑定返回列表快捷键
if config.keymaps.buffer.back_to_list and config.keymaps.buffer.back_to_list ~= "" then
vim.api.nvim_buf_set_keymap(
0,
"n",
config.keymaps.buffer.back_to_list,
'<Cmd>lua require("memos.ui").return_to_list()<CR>',
{ noremap = true, silent = true }
)
end
end
if config.auto_save then
@@ -214,7 +236,10 @@ local function create_float_window(buf)
title_pos = "center",
}
return vim.api.nvim_open_win(buf, true, opts)
local win = vim.api.nvim_open_win(buf, true, opts)
-- 关键:标记这个窗口是 Memos 的专用窗口
vim.api.nvim_win_set_var(win, "memos_window", true)
return win
end
function M.show_memos_list(filter)
@@ -231,6 +256,8 @@ function M.show_memos_list(filter)
vim.bo[buf_id].swapfile = false
vim.bo[buf_id].filetype = "memos_list"
vim.bo[buf_id].modifiable = false
vim.bo[buf_id].buflisted = false
vim.bo[buf_id].bufhidden = "wipe"
end
-- 检查该 buffer 是否已经在一个窗口中打开
@@ -238,11 +265,27 @@ function M.show_memos_list(filter)
if win_id ~= -1 then
vim.api.nvim_set_current_win(win_id)
else
-- 【修改】根据配置决定打开方式
if config.window and config.window.enable_float then
create_float_window(buf_id)
-- 【新增】查找是否已经存在 Memos 浮动窗口
local found_win = nil
for _, w in ipairs(vim.api.nvim_list_wins()) do
local s, v = pcall(vim.api.nvim_win_get_var, w, "memos_window")
if s and v == true and vim.api.nvim_win_is_valid(w) then
found_win = w
break
end
end
if found_win then
-- 如果找到了,就复用它,直接切换 buffer
vim.api.nvim_set_current_win(found_win)
vim.api.nvim_set_current_buf(buf_id)
else
-- 传统方式:直接切换到该 buffer
-- 没找到才新建
create_float_window(buf_id)
end
else
-- 非浮动模式,直接切换 buffer
vim.api.nvim_set_current_buf(buf_id)
end
end
@@ -291,7 +334,7 @@ function M.show_memos_list(filter)
local list_keymaps = config.keymaps.list
set_keymap(list_keymaps.edit_memo, '<Cmd>lua require("memos.ui").edit_selected_memo()<CR>')
set_keymap(list_keymaps.vsplit_edit_memo, '<Cmd>lua require("memos.ui").edit_selected_memo_in_vsplit()<CR>')
set_keymap(list_keymaps.quit, "<Cmd>bdelete!<CR>")
set_keymap(list_keymaps.quit, "<Cmd>bwipeout!<CR>")
set_keymap(list_keymaps.search_memos, '<Cmd>lua require("memos.ui").search_memos()<CR>')
set_keymap(list_keymaps.refresh_list, '<Cmd>lua require("memos.ui").show_memos_list()<CR>')
set_keymap(list_keymaps.next_page, '<Cmd>lua require("memos.ui").load_next_page()<CR>')