Skip to content

Commit 83cf79a

Browse files
committed
fix: fix :e command in status buffer
1 parent a87a5f8 commit 83cf79a

File tree

1 file changed

+67
-56
lines changed

1 file changed

+67
-56
lines changed

lua/git/command/status.lua

Lines changed: 67 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ local lines = {}
1010
local jobid = -1
1111

1212
local function close_status_window()
13-
if vim.fn.winnr('$') > 1 then
14-
vim.cmd('close')
15-
else
16-
vim.cmd('bd!')
17-
end
13+
if vim.fn.winnr('$') > 1 then
14+
vim.cmd('close')
15+
else
16+
vim.cmd('bd!')
17+
end
1818
end
1919

2020
local function openStatusBuffer()
21-
vim.cmd([[
21+
vim.cmd([[
2222
10split git://status
2323
normal! "_dd
2424
setl nobuflisted
@@ -28,69 +28,80 @@ local function openStatusBuffer()
2828
setl bufhidden=wipe
2929
setf git-status
3030
]])
31-
status_bufnr = vim.fn.bufnr()
32-
-- nnoremap <buffer><silent> q :call <SID>close_status_window()<CR>
33-
vim.api.nvim_buf_set_keymap(status_bufnr, 'n', 'q', '', {
34-
callback = close_status_window,
35-
})
36-
return status_bufnr
31+
status_bufnr = vim.fn.bufnr()
32+
-- nnoremap <buffer><silent> q :call <SID>close_status_window()<CR>
33+
vim.api.nvim_buf_set_keymap(status_bufnr, 'n', 'q', '', {
34+
callback = close_status_window,
35+
})
36+
return status_bufnr
3737
end
3838

3939
local function on_stdout(id, data)
40-
if id ~= jobid then
41-
return
42-
end
43-
for _, v in ipairs(data) do
44-
log.debug('git-status stdout:' .. v)
45-
table.insert(lines, v)
46-
end
40+
if id ~= jobid then
41+
return
42+
end
43+
for _, v in ipairs(data) do
44+
log.debug('git-status stdout:' .. v)
45+
table.insert(lines, v)
46+
end
4747
end
4848

4949
local function on_stderr(id, data)
50-
if id ~= jobid then
51-
return
52-
end
53-
for _, v in ipairs(data) do
54-
log.debug('git-status stderr:' .. v)
55-
table.insert(lines, v)
56-
end
50+
if id ~= jobid then
51+
return
52+
end
53+
for _, v in ipairs(data) do
54+
log.debug('git-status stderr:' .. v)
55+
table.insert(lines, v)
56+
end
5757
end
5858

59+
local autocmd
5960
local function on_exit(id, code, single)
60-
if id ~= jobid then
61-
return
62-
end
63-
log.debug('git-status exit code:' .. code .. ' single:' .. single)
64-
if vim.api.nvim_buf_is_valid(status_bufnr) then
65-
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', true)
66-
vim.api.nvim_buf_set_lines(status_bufnr, 0, -1, false, lines)
67-
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', false)
68-
end
61+
if id ~= jobid then
62+
return
63+
end
64+
log.debug('git-status exit code:' .. code .. ' single:' .. single)
65+
if vim.api.nvim_buf_is_valid(status_bufnr) then
66+
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', true)
67+
vim.api.nvim_buf_set_lines(status_bufnr, 0, -1, false, lines)
68+
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', false)
69+
pcall(vim.api.nvim_del_autocmd, autocmd)
70+
autocmd = vim.api.nvim_create_autocmd('BufReadCmd', {
71+
buffer = status_bufnr,
72+
callback = function()
73+
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', true)
74+
vim.api.nvim_buf_set_lines(status_bufnr, 0, -1, false, lines)
75+
vim.api.nvim_buf_set_option(status_bufnr, 'modifiable', false)
76+
vim.api.nvim_set_option_value('syntax', 'diff', { buf = status_bufnr })
77+
end,
78+
})
79+
end
6980
end
7081

7182
function M.run(argv)
72-
if
73-
vim.api.nvim_buf_is_valid(status_bufnr)
74-
and vim.fn.index(vim.fn.tabpagebuflist(), status_bufnr) ~= -1
75-
then
76-
local winnr = vim.fn.bufwinnr(status_bufnr)
77-
vim.cmd(winnr .. 'wincmd w')
78-
else
79-
status_bufnr = openStatusBuffer()
80-
end
81-
local cmd = { 'git', 'status' }
82-
if #argv > 0 then
83-
for _, v in ipairs(argv) do
84-
table.insert(cmd, v)
83+
if
84+
vim.api.nvim_buf_is_valid(status_bufnr)
85+
and vim.fn.index(vim.fn.tabpagebuflist(), status_bufnr) ~= -1
86+
then
87+
local winnr = vim.fn.bufwinnr(status_bufnr)
88+
vim.cmd(winnr .. 'wincmd w')
89+
else
90+
status_bufnr = openStatusBuffer()
91+
end
92+
local cmd = { 'git', 'status' }
93+
if #argv > 0 then
94+
for _, v in ipairs(argv) do
95+
table.insert(cmd, v)
96+
end
8597
end
86-
end
87-
lines = {}
88-
log.debug('git-status cmd:' .. vim.inspect(cmd))
89-
jobid = job.start(cmd, {
90-
on_stdout = on_stdout,
91-
on_stderr = on_stderr,
92-
on_exit = on_exit,
93-
})
98+
lines = {}
99+
log.debug('git-status cmd:' .. vim.inspect(cmd))
100+
jobid = job.start(cmd, {
101+
on_stdout = on_stdout,
102+
on_stderr = on_stderr,
103+
on_exit = on_exit,
104+
})
94105
end
95106

96107
return M

0 commit comments

Comments
 (0)