You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
3.8 KiB
154 lines
3.8 KiB
local M = require('module'):new()
|
|
|
|
function M:boot()
|
|
self.opts = {
|
|
win = {
|
|
number = false,
|
|
list = false,
|
|
colorcolumn = "",
|
|
cursorline = false
|
|
},
|
|
buf = {
|
|
}
|
|
}
|
|
self.is_gui = false
|
|
self.is_visible = false
|
|
end
|
|
|
|
function M:run()
|
|
if (vim.fn.argc() == 0 or vim.fn.line2byte("$") ~= -1) then -- and not vim.opt.insertmode) then
|
|
self:show()
|
|
end
|
|
end
|
|
|
|
function M:gui()
|
|
local win = vim.api.nvim_get_current_win()
|
|
local buf = vim.api.nvim_get_current_buf()
|
|
|
|
self.is_gui = true
|
|
self.opts.win.list = vim.api.nvim_win_get_option(win, 'list')
|
|
|
|
if (self.is_visible) then
|
|
vim.api.nvim_win_set_option(win, 'list', false)
|
|
self:draw(buf)
|
|
end
|
|
end
|
|
|
|
function M:show()
|
|
local height = vim.api.nvim_get_option('lines') - 2
|
|
local width = vim.api.nvim_get_option('columns')
|
|
|
|
local lines = require('data/start')
|
|
|
|
if (#lines > height) then
|
|
return
|
|
end
|
|
|
|
for i=1,#lines do
|
|
if (#lines[i] > width) then
|
|
return
|
|
end
|
|
end
|
|
|
|
self.is_visible = true
|
|
local win = vim.api.nvim_get_current_win()
|
|
local buf = vim.api.nvim_create_buf(true, true)
|
|
|
|
self:draw(buf)
|
|
|
|
vim.api.nvim_buf_set_option(buf, "modified", false)
|
|
vim.api.nvim_buf_set_option(buf, "buflisted", false)
|
|
vim.api.nvim_buf_set_option(buf, "bufhidden", "wipe")
|
|
vim.api.nvim_buf_set_option(buf, "buftype", "nofile")
|
|
vim.api.nvim_buf_set_option(buf, "swapfile", false)
|
|
|
|
for k, v in pairs(self.opts.win) do
|
|
old_val = vim.api.nvim_win_get_option(win, k)
|
|
vim.api.nvim_win_set_option(win, k, v)
|
|
self.opts.win[k] = old_val
|
|
end
|
|
for k, v in pairs(self.opts.buf) do
|
|
old_val = vim.api.nvim_buf_get_option(buf, k)
|
|
vim.api.nvim_buf_set_option(buf, k, v)
|
|
self.opts.buf[k] = old_val
|
|
end
|
|
|
|
-- vim.api.nvim_win_set_option(win, "number", false)
|
|
-- vim.api.nvim_win_set_option(win, "list", false)
|
|
-- vim.api.nvim_win_set_option(win, "cursorline", false)
|
|
-- vim.api.nvim_win_set_option(win, "colorcolumn", "")
|
|
|
|
vim.api.nvim_set_current_buf(buf)
|
|
|
|
vim.api.nvim_create_autocmd("InsertEnter,WinEnter", {
|
|
pattern = "<buffer>",
|
|
callback = function()
|
|
vim.cmd("enew")
|
|
self:hide()
|
|
end
|
|
})
|
|
vim.api.nvim_create_autocmd("FileType", {
|
|
pattern = "netrw",
|
|
callback = function()
|
|
self:hide()
|
|
end
|
|
})
|
|
end
|
|
|
|
function M:hide()
|
|
if (not self.is_visible) then
|
|
return
|
|
end
|
|
self.is_visible = false
|
|
local buf = vim.api.nvim_get_current_buf()
|
|
local win = vim.api.nvim_get_current_win()
|
|
|
|
vim.api.nvim_buf_set_option(buf, "modifiable", true)
|
|
vim.api.nvim_buf_set_option(buf, "buflisted", true)
|
|
vim.api.nvim_buf_set_option(buf, "buflisted", true)
|
|
|
|
-- vim.api.nvim_win_set_option(win, "number", nukevim.config.settings.settings.o.number or false)
|
|
-- vim.api.nvim_win_set_option(win, "colorcolumn", nukevim.config.settings.settings.o.cc or nukevim.config.settings.settings.o.colorcolumn or "")
|
|
-- vim.api.nvim_win_set_option(win, "cursorline", nukevim.config.settings.settings.o.cursorline or false)
|
|
-- if (self.is_gui) then
|
|
-- enable_list = nukevim.config.ui.gui.show_whitespace or nukevim.config.ui.tui.show_whitespace or false
|
|
-- else
|
|
-- enable_list = nukevim.config.ui.tui.show_whitespace or false
|
|
-- end
|
|
-- vim.api.nvim_win_set_option(win, "list", enable_list)
|
|
|
|
for k, v in pairs(self.opts.win) do
|
|
vim.api.nvim_win_set_option(win, k, v)
|
|
end
|
|
for k, v in pairs(self.opts.buf) do
|
|
vim.api.nvim_buf_set_option(buf, k, v)
|
|
end
|
|
|
|
end
|
|
|
|
function M:draw(buf)
|
|
local height = vim.api.nvim_get_option('lines') - 2
|
|
local width = vim.api.nvim_get_option('columns')
|
|
|
|
local lines = require('data/start')
|
|
|
|
for i=1,#lines do
|
|
lines[i] = self:center(lines[i])
|
|
end
|
|
|
|
vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines)
|
|
end
|
|
|
|
function M:center(string)
|
|
width = vim.api.nvim_get_option('columns')
|
|
string_length = #string
|
|
padding_length = (width - string_length) / 2 - 1
|
|
padding = ''
|
|
for i=1,padding_length do
|
|
padding = padding .. ' '
|
|
end
|
|
return padding .. string .. padding
|
|
end
|
|
|
|
|
|
return M
|
|
|