Skip to content

Commit d8cf5bf

Browse files
committed
Removing noice, various WIP play
1 parent 9e30f26 commit d8cf5bf

File tree

9 files changed

+380
-54
lines changed

9 files changed

+380
-54
lines changed

init.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ require("lsp.null_ls")
105105

106106
require("setup.markdown-preview")
107107

108-
require("setup.noice")
109108
require("scrollbar").setup()
110109

110+
111+
require("play")
112+
require("floating")

lua/floating.lua

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
local Winline = {}
2+
3+
function Winline:open()
4+
parent = vim.api.nvim_get_current_win()
5+
geom = self:get_win_geom(parent)
6+
wincfg = self:get_win_config(geom)
7+
8+
vim.notify(vim.inspect(geom), vim.log.levels.INFO)
9+
_buf = vim.api.nvim_create_buf(false, true)
10+
11+
self._win = vim.api.nvim_open_win(_buf, true, wincfg)
12+
end
13+
14+
function Winline:get_win_geom(parent)
15+
local win_width = vim.api.nvim_win_get_width(parent)
16+
local win_pos = vim.api.nvim_win_get_position(parent)
17+
local geom = {}
18+
geom.height = 3
19+
geom.width = win_width
20+
geom.row = win_pos[1]
21+
geom.col = win_pos[2]
22+
return geom
23+
end
24+
25+
function Winline:get_win_config(geom)
26+
return {
27+
zindex = 50,
28+
width = geom.width,
29+
height = geom.height,
30+
row = geom.row,
31+
col = geom.col,
32+
relative = 'editor',
33+
-- style = 'minimal',
34+
focusable = true,
35+
}
36+
end
37+
38+
vim.o.scrolloff = 10
39+
40+
vim.keymap.set('n', 'mf', function() Winline:open() end, { noremap = true, silent = true })
41+
42+

lua/lsp/setup_servers.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ M = {
5959
ignore = { '*' },
6060
},
6161
},
62+
analysis = {
63+
autoSearchPaths = true,
64+
diagnosticMode = "openFilesOnly",
65+
useLibraryCodeForTypes = true,
66+
},
6267
},
6368
}
6469
end

lua/package/gitsigns.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ M = {
5757
vim.keymap.set('n', '<leader>s', require('gitsigns').stage_hunk, { noremap = true, desc='[S]tage hunk' })
5858
vim.keymap.set('n', '<leader>ha', require('gitsigns').stage_buffer, { noremap = true, desc='Stage [A]ll hunks (buffer)' })
5959
vim.keymap.set('n', '<leader>hu', require('gitsigns').reset_buffer_index, { noremap = true, desc='[U]nstage all hunks (buffer)' })
60-
vim.keymap.set('n', '<leader>l', diffthis, {desc = 'display [H]unk [L]ines'})
60+
-- vim.keymap.set('n', '<leader>l', diffthis, {desc = 'display [H]unk [L]ines'})
6161
end,
6262
},
6363
}

lua/package/noice.lua

Lines changed: 0 additions & 16 deletions
This file was deleted.

lua/play.lua

Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,299 @@
1+
local function _print(text)
2+
vim.notify(text, vim.log.levels.INFO)
3+
end
4+
5+
local function toggle_winbar()
6+
-- vim.notify("Hello", vim.log.levels.INFO)
7+
vim.w.winbar_text = "%#Title# Click %@v:lua.on_button_click@[Button]%@"
8+
9+
if vim.w.test then
10+
vim.w.test = false
11+
vim.wo.winbar = ""
12+
else
13+
vim.w.test = true
14+
vim.wo.winbar = vim.w.winbar_text
15+
end
16+
end
17+
18+
local function find_first_available_id()
19+
local id = 1
20+
while _G.click_handler_lookup[tostring(id)] do
21+
id = id + 1
22+
end
23+
return id
24+
end
25+
26+
local function add_entry_to_lookup(win_id, buf_id)
27+
local id = find_first_available_id()
28+
_G.click_handler_lookup[tostring(id)] = { win_id = win_id, buf_id = buf_id }
29+
return id
30+
end
31+
32+
local function delete_entry_from_lookup(win_id, buf_id)
33+
for id, entry in pairs(_G.click_handler_lookup or {}) do
34+
if entry.win_id == win_id and entry.buf_id == buf_id then
35+
_G.click_handler_lookup[id] = nil
36+
return
37+
end
38+
end
39+
end
40+
41+
local function update(win_id, buffers)
42+
local buf_strings = {}
43+
for _, value in ipairs(buffers) do
44+
local formatted_string = "%" .. value.global_id .. "@v:lua.on_button_click@" .. value.short_name .. "%T"
45+
table.insert(buf_strings, formatted_string)
46+
end
47+
48+
vim.api.nvim_win_set_option(win_id, "winbar", "(" .. tostring(win_id) .. ") " .. table.concat(buf_strings, " | "))
49+
end
50+
51+
vim.api.nvim_create_autocmd({'BufEnter'}, {
52+
callback = function()
53+
win_id = vim.api.nvim_get_current_win()
54+
local success, buffers = pcall(vim.api.nvim_win_get_var, win_id, "winbarbar_buffers")
55+
56+
if success then
57+
local buf_id = vim.api.nvim_get_current_buf()
58+
local buf_name = vim.api.nvim_buf_get_name(buf_id)
59+
local short_buf_name = vim.fn.fnamemodify(buf_name, ':t')
60+
61+
62+
if buf_name ~= "" then
63+
found = false
64+
for _, value in ipairs(buffers) do
65+
if value.buf_id == buf_id then
66+
found = true
67+
break
68+
end
69+
end
70+
71+
if not found then
72+
local global_id = add_entry_to_lookup(win_id, buf_id)
73+
table.insert(buffers, {global_id=global_id, buf_id = buf_id, short_name = short_buf_name})
74+
75+
vim.api.nvim_win_set_var(win_id, "winbarbar_buffers", buffers)
76+
end
77+
78+
update(win_id, buffers)
79+
end
80+
end
81+
end
82+
})
83+
84+
local function remove_buffer_from_win(win_id, buf_id)
85+
buffers = vim.api.nvim_win_get_var(win_id, "winbarbar_buffers")
86+
87+
_print("Removing win_id: " .. win_id .. " buf_id: " .. buf_id)
88+
89+
for id, entry in pairs(buffers) do
90+
if entry.win_id == win_id and entry.buf_id == buf_id then
91+
buffers[id] = nil
92+
end
93+
end
94+
95+
vim.api.nvim_win_set_var(win_id, "winbarbar_buffers", buffers)
96+
97+
_print(vim.inspect(buffers))
98+
99+
update(win_id, buffers)
100+
end
101+
102+
103+
104+
_G.click_handler_lookup = _G.click_handler_lookup or {}
105+
106+
local function on_button_click(selected_global_id)
107+
out = _G.click_handler_lookup[tostring(selected_global_id)]
108+
if vim.api.nvim_buf_is_loaded(out.buf_id) then
109+
vim.api.nvim_win_set_buf(out.win_id, out.buf_id)
110+
end
111+
end
112+
_G.on_button_click = on_button_click
113+
114+
115+
116+
local function _split(command)
117+
local scratch_buf = vim.api.nvim_create_buf(false, true) -- (listed, scratch)
118+
119+
vim.cmd(command)
120+
121+
vim.api.nvim_win_set_buf(0, scratch_buf)
122+
win_id = vim.api.nvim_get_current_win()
123+
124+
vim.api.nvim_win_set_var(win_id, "winbarbar_buffers", {})
125+
vim.api.nvim_win_set_option(win_id, "winbar", "Window " .. win_id)
126+
127+
vim.bo[scratch_buf].buftype = 'nofile'
128+
vim.bo[scratch_buf].bufhidden = 'wipe'
129+
vim.bo[scratch_buf].swapfile = false
130+
vim.bo[scratch_buf].modifiable = true
131+
end
132+
133+
local function winbarbar_split_left() _split('leftabove vsplit') end
134+
local function winbarbar_split_down() _split('split') end
135+
local function winbarbar_split_up() _split('leftabove split') end
136+
local function winbarbar_split_right() _split('vsplit') end
137+
138+
139+
local function is_winbarbar_window(win_id)
140+
local success, buffers = pcall(vim.api.nvim_win_get_var, win_id, "winbarbar_buffers")
141+
if success then
142+
return buffers
143+
end
144+
145+
return false
146+
end
147+
148+
local function winbarbar_move_right()
149+
local buf_id = vim.api.nvim_get_current_buf()
150+
local previous_window_buffers = is_winbarbar_window(0)
151+
local old_win_id = vim.api.nvim_get_current_win()
152+
153+
vim.cmd("wincmd l")
154+
155+
local new_window_buffers = is_winbarbar_window(0)
156+
157+
158+
if new_window_buffers then
159+
local new_win_id = vim.api.nvim_get_current_win()
160+
161+
if new_win_id == old_win_id then
162+
return
163+
end
164+
165+
if previous_window_buffers then
166+
delete_entry_from_lookup(old_win_id, buf_id)
167+
remove_buffer_from_win(old_win_id, buf_id)
168+
end
169+
170+
171+
local buf_name = vim.api.nvim_buf_get_name(buf_id)
172+
local short_buf_name = vim.fn.fnamemodify(buf_name, ':t')
173+
174+
if buf_name ~= "" then
175+
found = false
176+
for _, value in ipairs(new_window_buffers) do
177+
if value.buf_id == buf_id then
178+
found = true
179+
break
180+
end
181+
end
182+
183+
if not found then
184+
local global_id = add_entry_to_lookup(win_id, buf_id)
185+
table.insert(buffers, {global_id=global_id, buf_id = buf_id, short_name = short_buf_name})
186+
187+
vim.api.nvim_win_set_var(win_id, "winbarbar_buffers", buffers)
188+
end
189+
190+
update(win_id, buffers)
191+
end
192+
193+
194+
end
195+
196+
197+
198+
end
199+
200+
201+
local function find_buffer_indx(buffers, win_id, buf_id)
202+
for indx, value in ipairs(buffers) do
203+
if value.win_id == win_id and value.buf_id == buf_id then
204+
return indx
205+
end
206+
end
207+
end
208+
209+
local function count_non_floating_windows()
210+
local count = 0
211+
212+
for _, win in ipairs(vim.api.nvim_list_wins()) do
213+
local config = vim.api.nvim_win_get_config(win)
214+
local buftype = vim.api.nvim_buf_get_option(vim.api.nvim_win_get_buf(win), 'buftype')
215+
local filetype = vim.api.nvim_buf_get_option(vim.api.nvim_win_get_buf(win), 'filetype')
216+
217+
-- Check if the window is not floating and not a special buffer like Neotree
218+
if not config.relative or config.relative == '' then
219+
if buftype == '' and filetype ~= 'neo-tree' then
220+
count = count + 1
221+
end
222+
end
223+
end
224+
225+
return count
226+
end
227+
228+
local function remove_buffer()
229+
win_id = vim.api.nvim_get_current_win()
230+
local success, buffers = pcall(vim.api.nvim_win_get_var, win_id, "winbarbar_buffers")
231+
232+
if success then
233+
local buf_id = vim.api.nvim_get_current_buf()
234+
local indx = find_buffer_indx(buffers, win_id, buf_id)
235+
local window_buffer_count = #buffers
236+
if window_buffer_count <= 1 then
237+
local window_count = count_non_floating_windows()
238+
if window_count > 1 then
239+
delete_entry_from_lookup(win_id, buf_id)
240+
vim.api.nvim_win_close(win_id, false)
241+
end
242+
243+
return
244+
end
245+
246+
delete_entry_from_lookup(win_id, buf_id)
247+
remove_buffer_from_win(win_id, buf_id)
248+
249+
end
250+
251+
end
252+
253+
254+
vim.keymap.set('n', 'mg', function()
255+
vim.notify(vim.inspect(_G.click_handler_lookup), vim.log.levels.INFO)
256+
end, { noremap = true, silent = true })
257+
258+
259+
vim.keymap.set('n', 'mp', function()
260+
win_ids = vim.api.nvim_list_wins()
261+
local handled_windows = {}
262+
263+
for _, win_id in ipairs(win_ids) do
264+
local success, buffers = pcall(vim.api.nvim_win_get_var, win_id, "winbarbar_buffers")
265+
if success then
266+
table.insert(handled_windows, { win_id = win_id, buffers = buffers})
267+
end
268+
269+
end
270+
271+
vim.notify(vim.inspect(handled_windows), vim.log.levels.INFO)
272+
273+
end, { noremap = true, silent = true })
274+
275+
vim.keymap.set('n', '<C-f>h', winbarbar_split_left, { noremap = true, silent = true })
276+
vim.keymap.set('n', '<C-f>j', winbarbar_split_down, { noremap = true, silent = true })
277+
vim.keymap.set('n', '<C-f>k', winbarbar_split_up, { noremap = true, silent = true })
278+
vim.keymap.set('n', '<C-f>l', winbarbar_split_right, { noremap = true, silent = true })
279+
280+
vim.keymap.set('n', '<leader>l', winbarbar_move_right, { noremap = true, silent = true })
281+
282+
283+
local function winfo()
284+
285+
local all_windows = vim.api.nvim_list_wins()
286+
287+
for _, win_id in ipairs(all_windows) do
288+
_print(vim.inspect(win_id) .. vim.inspect(vim.api.nvim_win_get_position(win_id)))
289+
end
290+
291+
292+
293+
end
294+
295+
vim.keymap.set('n', 'mw', winfo, { noremap = true, silent = true })
296+
297+
298+
299+
vim.keymap.set('n', '<C-x>', remove_buffer, { noremap = true, silent = true })

0 commit comments

Comments
 (0)