feat(nvim): add new intro image
This commit is contained in:
@@ -8,3 +8,4 @@ vim.o.timeoutlen = 0
|
|||||||
-- setup prolog
|
-- setup prolog
|
||||||
require('lspconfig/prolog_lsp')
|
require('lspconfig/prolog_lsp')
|
||||||
require('lspconfig').prolog_lsp.setup{}
|
require('lspconfig').prolog_lsp.setup{}
|
||||||
|
require('olinpin.intro').open()
|
||||||
|
|||||||
122
nvim/lua/olinpin/intro.lua
Normal file
122
nvim/lua/olinpin/intro.lua
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
local M = {}
|
||||||
|
local api = vim.api
|
||||||
|
local fn = vim.fn
|
||||||
|
local strw = api.nvim_strwidth
|
||||||
|
local opts = {
|
||||||
|
header = {
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣶⣶⣶⣦⣤⡀⠀⠀⠀⠀",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⠟⠉⠉⠉⠉⠉⠛⠻⢿⣷⣄⠀⠀",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⠟⠁⠀⠀⢠⣤⣄⠀⠀⠀⠀⠙⣿⣷⠀",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⠏⠀⠀⠀⠀⠘⠻⠋⠀⠀⠀⠀⠀⢸⣿⡇",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⡏⠀⠀⣀⣀⣀⣠⣤⣤⣤⣤⣿⣄⠀⢠⣿⣧",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⠀⠀⠀⠈⠻⣿⣶⠶⣶⣤⣤⣜⣿⣦⡈⢿⣿",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠈⠙⠻⢶⣤⣭⣛⣿⣿⣷⣼⣿",
|
||||||
|
"⠀⠀⠀⠀⠀⣰⣶⣾⠿⠿⢿⣷⣶⣄⠀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⢛⣿⣿",
|
||||||
|
"⠀⠀⠀⠀⠀⢹⣿⣆⠀⠀⠀⠈⠻⢿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⡏",
|
||||||
|
"⠀⠀⠀⠀⠀⣸⣿⣿⠀⠀⠀⠀⠀⠀⢀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀",
|
||||||
|
"⠀⠀⠀⢀⣾⣿⣿⡇⠀⠀⠀⠀⠀⠀⢸⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⠀",
|
||||||
|
"⠀⠀⠀⣼⣿⠃⠹⣿⣷⣄⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠇⠀",
|
||||||
|
"⠀⠀⠀⣿⡿⠀⠀⠈⠻⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀",
|
||||||
|
"⠀⠀⢸⣿⣧⠀⠀⠀⠀⠸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡷⠀⠀",
|
||||||
|
"⠀⠀⠈⣿⣿⡄⠀⠀⠀⠀⢻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⡀⠀",
|
||||||
|
"⠀⠀⠀⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧⠀",
|
||||||
|
"⠀⠀⠀⢻⣿⡟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⡇",
|
||||||
|
"⠀⠀⠀⠘⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⡿",
|
||||||
|
"⠀⠀⠀⣤⣸⣿⣿⡷⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠃",
|
||||||
|
"⠀⠀⠘⣿⡿⠿⣿⣿⣿⣷⡶⢶⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⠏⠀",
|
||||||
|
"⠀⠀⢀⣿⡟⠀⠀⠀⠀⠀⠀⠈⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⠟⠉⠀⠀",
|
||||||
|
"⠀⠀⣼⣿⠇⠀⣴⣄⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⠟⠁⠀⠀⠀⠀",
|
||||||
|
"⢀⣼⣿⠋⠀⠀⠘⣿⣧⠀⠀⠀⢸⣿⣧⣄⣀⠀⠀⠀⢀⣀⣤⣶⣿⣿⠋⠁⠀⠀⠀⠀⠀⠀",
|
||||||
|
"⢾⣯⣁⠀⠀⠀⠀⠈⢿⡄⠀⠀⣸⡿⠉⠙⠛⠛⠛⠛⢻⣿⡏⢹⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||||
|
"⠀⠛⢿⣷⣦⣤⣀⡀⠀⠀⠀⣠⣿⣷⣶⣶⣶⣶⣶⣦⣤⣿⣿⡜⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||||
|
"⠀⠀⠀⠈⠙⠛⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⢻⡿⣷⣶⣤⣀⠀⠀⠀⠀",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⣁⡸⠟⠈⣩⣿⣿⣿⠶⠀⠀",
|
||||||
|
"⠀⠀⠀⣠⣴⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⠟⠋⠁⠀⠀⠀⠀",
|
||||||
|
"⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||||
|
"⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
|
||||||
|
" WADDLE WADDLE WADDLE ",
|
||||||
|
},
|
||||||
|
buttons = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
M.open = function(buf, win, action)
|
||||||
|
action = action or "open"
|
||||||
|
|
||||||
|
win = win or api.nvim_get_current_win()
|
||||||
|
|
||||||
|
if not vim.bo.buflisted and action == "open" then
|
||||||
|
if vim.t.bufs[1] then
|
||||||
|
win = vim.fn.bufwinid(vim.t.bufs[1])
|
||||||
|
api.nvim_set_current_win(win)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local ns = api.nvim_create_namespace "nvdash"
|
||||||
|
local winh = api.nvim_win_get_height(win)
|
||||||
|
local winw = api.nvim_win_get_width(win)
|
||||||
|
buf = buf or vim.api.nvim_create_buf(false, true)
|
||||||
|
|
||||||
|
local nvdash_w = 0
|
||||||
|
|
||||||
|
if action == "open" then
|
||||||
|
api.nvim_win_set_buf(0, buf)
|
||||||
|
end
|
||||||
|
|
||||||
|
opts.header = type(opts.header) == "function" and opts.header() or opts.header
|
||||||
|
|
||||||
|
local ui = {}
|
||||||
|
|
||||||
|
------------------------ find largest string's width -----------------------------
|
||||||
|
for _, v in ipairs(opts.header) do
|
||||||
|
local headerw = strw(v)
|
||||||
|
if headerw > nvdash_w then
|
||||||
|
nvdash_w = headerw
|
||||||
|
end
|
||||||
|
|
||||||
|
local col = math.floor((winw / 2) - math.floor(strw(v) / 2)) - 6
|
||||||
|
local opt = { virt_text_win_col = col, virt_text = { { v, "NvDashAscii" } } }
|
||||||
|
table.insert(ui, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
opts.buttons = type(opts.buttons) == "table" and opts.buttons or opts.buttons()
|
||||||
|
|
||||||
|
local key_lines = {}
|
||||||
|
|
||||||
|
----------------------- save display txt -----------------------------------------
|
||||||
|
local dashboard_h = #ui + 3
|
||||||
|
|
||||||
|
-- if screen height is small
|
||||||
|
winh = dashboard_h > winh and dashboard_h or winh
|
||||||
|
|
||||||
|
local row_i = math.floor((winh / 2) - (dashboard_h / 2))
|
||||||
|
|
||||||
|
for i, v in ipairs(key_lines) do
|
||||||
|
key_lines[i].i = v.i + row_i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- make all lines available
|
||||||
|
local empty_str = {}
|
||||||
|
for i = 1, winh do
|
||||||
|
empty_str[i] = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
------------------------------ EXTMARKS : set text + highlight -------------------------------
|
||||||
|
api.nvim_buf_set_lines(buf, 0, -1, false, empty_str)
|
||||||
|
|
||||||
|
for i, v in ipairs(ui) do
|
||||||
|
api.nvim_buf_set_extmark(buf, ns, row_i + i, 0, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
if action == "redraw" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
------------------------------------ keybinds ------------------------------------------
|
||||||
|
vim.wo[win].virtualedit = "all"
|
||||||
|
|
||||||
|
if key_lines[1] then
|
||||||
|
api.nvim_win_set_cursor(win, { key_lines[1].i, key_lines[1].col })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
Reference in New Issue
Block a user