-
Notifications
You must be signed in to change notification settings - Fork 0
/
lualine.lua
139 lines (131 loc) · 4.59 KB
/
lualine.lua
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
local M = {} -- lualine configuration
M.requires = { -- requirement plugins for lualine
"nvim-treesitter/nvim-treesitter",
"SmiteshP/nvim-gps",
"kyazdani42/nvim-web-devicons",
}
-- return function which replace text to 'replaced' if given text is empty
local function replace_empty(replaced)
return function(str)
if str == "" then
return replaced
else
return str
end
end
end
-- return true if vim has width more than `win_width`
-- otherwise, false
local function hide(win_width)
return function()
local width = vim.api.nvim_list_uis()[1]["width"]
if not width then
return true
end
return width > win_width
end
end
-- configure lualine
function M.config()
local gps = require("nvim-gps")
gps.setup({
separator = " ", -- match to lualine components separators
})
require("lualine").setup({
options = {
section_separators = { left = "", right = "" },
disabled_filetypes = { "startify" },
},
sections = {
lualine_a = { "mode" },
lualine_b = {},
lualine_c = {
{ -- have filetype icon
-- FIXME: filetype name drawn if filetype not have icon
"filetype",
icon_only = true,
separator = "",
padding = { right = 0, left = 1 },
},
{ "filename", path = 1 }, -- relative_path
},
lualine_x = { "diff", "diagnostics" },
lualine_y = {},
lualine_z = {},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {
{ -- have filetype icon
-- FIXME: filetype name drawn if filetype not have icon
"filetype",
icon_only = true,
colors = false,
separator = "",
padding = { right = 0, left = 1 },
},
{ "filename", path = 1 }, -- relative_path
},
lualine_x = {},
lualine_y = {},
lualine_z = {},
},
tabline = {
lualine_a = { { "branch", fmt = replace_empty("-") } },
lualine_b = { -- Only if tabline has plenty of space, show encoding/fileformat/filetype.
{ "encoding", cond = hide(200) },
{ "fileformat", cond = hide(200) },
{ "filetype", cond = hide(200) },
},
lualine_c = {
{ -- center lualine_c
"%=",
separator = "",
padding = { right = 0, left = 0 },
},
{ -- have filetype icon
-- FIXME: filetype name drawn if filetype not have icon
"filetype",
icon_only = true,
separator = "",
padding = { right = 0, left = 1 },
},
"filename",
{ gps.get_location, cond = gps.is_available },
},
lualine_x = { { "diff", cond = hide(150) } }, -- Only if tabline has enough space, show diff.
lualine_y = { { "location", cond = hide(200) } }, -- Only if tabline has plenty of space, show location.
lualine_z = {
{ -- current working directory
"vim.fn.getcwd()",
fmt = function(cwd)
return vim.fn.pathshorten(vim.fn.substitute(cwd, os.getenv("HOME"), "~", ""))
end,
},
{ -- current session
"vim.v.this_session",
fmt = function(session_path)
return replace_empty("[NO SESSION]")(vim.fn.fnamemodify(session_path, ":t"))
end,
},
},
},
})
-- Set timer to update tabline periodicaly
-- Latency now is acceptable, but it would be better tabline also redrawn when statusline redrawn.
-- See: https://github.com/nvim-lualine/lualine.nvim/wiki/FAQ#my-tabline-updates-infrequently
if _G.Tabline_timer == nil then
_G.Tabline_timer = vim.loop.new_timer()
else
_G.Tabline_timer:stop()
end
_G.Tabline_timer:start(
0, -- never timeout
300, -- repeat every {num} ms
vim.schedule_wrap(function() -- updater function
vim.api.nvim_command("redrawtabline")
end)
)
end
return M