1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
local M = {}
local branch_cache = ""
local last_check = 0
local check_interval = 1000 -- Check git branch every 1 second
local function async_git_branch()
local check_time = vim.loop.now()
if check_time - last_check < check_interval then
return branch_cache
end
last_check = check_time
local stdout = vim.loop.new_pipe(false)
local stderr = vim.loop.new_pipe(false)
local handle
handle = vim.loop.spawn("git", {
args = { "branch", "--show-current" },
stdio = { nil, stdout, stderr }
}, function(code, signal)
stdout:close()
stderr:close()
handle:close()
end)
if handle then
stdout:read_start(vim.schedule_wrap(function(err, data)
if data then
branch_cache = data:gsub("\n", "")
end
end))
end
return branch_cache
end
function M.statusline_git()
local branch_name = async_git_branch()
return #branch_name > 0 and ' ' .. branch_name .. ' ' or ''
end
-- Rest of your statusline.lua remains exactly the same
function M.setup()
vim.cmd('highlight clear StatusLine')
vim.cmd('highlight clear StatusLineNC')
local highlights = {
StatusLineGit = { bg = "#161616", fg = "#D8DEE9" },
StatusLineBuffer = { bg = "NONE", fg = "#D8DEE9" },
StatusLine = { bg = "NONE", fg = "#D8DEE9" },
StatusLineFiletype = { bg = "NONE", fg = "#D8DEE9" },
StatusLinePath = { bg = "NONE", fg = "#D8DEE9" },
StatusLineModified = { bg = "NONE", fg = "#D8DEE9" },
}
for name, colors in pairs(highlights) do
vim.api.nvim_set_hl(0, name, colors)
end
vim.opt.statusline = table.concat({
"%#StatusLineGit#%{v:lua.require'core.statusline'.statusline_git()}",
"%#StatusLineBuffer# %n ",
"%#StatusLine#%{&ff} ",
"%#StatusLineFiletype#%y",
"%#StatusLinePath# %<%{expand('%:p:h')}/%f",
"%#StatusLineModified#%m",
"%=",
"%#StatusLine#%5l",
"/%L:%v ",
"%{char2nr(getline('.')[col('.')-1])} "
})
end
vim.api.nvim_create_autocmd("ColorScheme", {
pattern = "*",
callback = function()
M.setup()
end,
})
return M
|