aboutsummaryrefslogtreecommitdiff
path: root/lua/startup.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/startup.lua')
-rw-r--r--lua/startup.lua139
1 files changed, 86 insertions, 53 deletions
diff --git a/lua/startup.lua b/lua/startup.lua
index d895433..7c167b9 100644
--- a/lua/startup.lua
+++ b/lua/startup.lua
@@ -1,7 +1,7 @@
local M = {}
local ns = vim.api.nvim_create_namespace "startup"
-local limited_space = false
+local current_section = ""
local opts = { noremap = true, silent = true }
local settings = require "startup.config"
@@ -9,7 +9,7 @@ local settings = require "startup.config"
local utils = require "startup.utils"
local spaces = utils.spaces
-local function create_mappings()
+local function create_mappings(mappings)
vim.api.nvim_buf_set_keymap(
0,
"n",
@@ -17,7 +17,7 @@ local function create_mappings()
":lua require'startup'.check_line()<CR>",
opts
)
- for _, cmd in pairs(settings.tools) do
+ for _, cmd in pairs(mappings) do
vim.api.nvim_buf_set_keymap(
0,
"n",
@@ -33,47 +33,58 @@ function M.new_file()
vim.cmd("e " .. name)
end
+local sections_with_mappings = {}
+
function M.check_line()
local line = vim.api.nvim_get_current_line()
- for name, command in pairs(settings.tools) do
- if line:match(name) then
- vim.cmd(command[1])
+ for _, section in ipairs(sections_with_mappings) do
+ for name, command in pairs(settings[section].content) do
+ if line:match(name) then
+ vim.cmd(command[1])
+ end
end
end
end
-local function align(dict)
- local padding = 0
- if settings.options.padding < 1 then
- padding = vim.o.columns * padding
+local function align(dict, alignment)
+ local padding_calculated = 0
+ if settings[current_section].padding < 1 then
+ padding_calculated = vim.o.columns * settings[current_section].padding
else
- padding = settings.options.padding
+ padding_calculated = settings[current_section].padding
end
local aligned = {}
local max_len = utils.longest_line(dict)
- if settings.options.align == "center" then
+ if alignment == "center" then
local space_left = vim.o.columns - max_len
for _, line in ipairs(dict) do
table.insert(aligned, spaces(space_left / 2) .. line)
end
- elseif settings.options.align == "left" then
+ elseif alignment == "left" then
for _, line in ipairs(dict) do
- table.insert(aligned, spaces(settings.options.padding) .. line)
+ table.insert(aligned, spaces(padding_calculated) .. line)
end
- elseif settings.options.align == "right" then
+ elseif alignment == "right" then
for _, line in ipairs(dict) do
table.insert(
aligned,
- spaces(vim.o.columns - max_len - settings.options.padding - 10) .. line
+ spaces(vim.o.columns - max_len - padding_calculated - 10) .. line
)
end
end
+ padding_calculated = 0
return aligned
end
local count = 1
-local function set_lines(len, text, hi, pass)
- vim.api.nvim_buf_set_lines(0, count, count + len, false, align(text))
+local function set_lines(len, text, alignment, hi, pass)
+ vim.api.nvim_buf_set_lines(
+ 0,
+ count,
+ count + len,
+ false,
+ align(text, alignment)
+ )
vim.api.nvim_win_set_cursor(0, { count, 0 })
if pass then
vim.g.section_length = count
@@ -84,54 +95,76 @@ local function set_lines(len, text, hi, pass)
count = count + len
end
-local function empty()
- set_lines(1, { " " }, "StartupTools")
+local function empty(amount)
+ for _ = 1, amount, 1 do
+ set_lines(1, { " " }, "center", "StartupTools")
+ end
end
-local function body()
- local toolnames = {}
- for name, cmd in pairs(settings.tools) do
- if not limited_space then
- table.insert(toolnames, " ")
+local function mapping_names(mappings)
+ local mapnames = {}
+ for name, cmd in pairs(mappings) do
+ if settings.options.empty_lines_between_mappings then
+ table.insert(mapnames, " ")
end
- if settings.options.mapping_names then
- table.insert(toolnames, name .. " " .. cmd[2])
+ if settings.options.mapping_keys then
+ table.insert(mapnames, name .. " " .. cmd[2])
else
- table.insert(toolnames, name)
+ table.insert(mapnames, name)
end
end
- return toolnames
+ return mapnames
end
+-- TODO: put inside schedule()
function M.display()
- local rly_limited_space = false
-
- if vim.o.lines < (#settings.header + (#settings.tools * 2) + 20) then
- limited_space = true
- end
-
- create_mappings()
- utils.create_hls()
- -- vim.api.nvim_buf_set_keymap(0, "n", "j", "2j", opts)
- -- vim.api.nvim_buf_set_keymap(0, "n", "k", "2k", opts)
- if not limited_space then
- empty()
+ local parts = { "header", "body", "footer" }
+ for _, part in ipairs(parts) do
+ current_section = part
+ local options = settings[part]
+ if options.highlight == "" then
+ vim.cmd(
+ "highlight Startup"
+ .. part
+ .. " guifg="
+ .. options.default_color
+ .. " guibg="
+ .. settings.colors.background
+ )
+ options.highlight = "Startup" .. part
+ end
+ if options.type == "text" then
+ set_lines(
+ #options.content,
+ options.content,
+ options.align,
+ options.highlight
+ )
+ elseif options.type == "mapping" then
+ table.insert(sections_with_mappings, part)
+ create_mappings(options.content)
+ set_lines(
+ #mapping_names(options.content),
+ mapping_names(options.content),
+ options.align,
+ options.highlight
+ )
+ end
+ if part == "header" then
+ empty(settings.options.gap1)
+ elseif part == "body" then
+ empty(settings.options.gap2 + 1)
+ end
+ vim.cmd(options.command)
end
- set_lines(#settings.header, settings.header, "StartupHeading")
-
- local toolnames = body()
- empty()
- set_lines(#toolnames, toolnames, "StartupTools")
-
+ current_section = ""
vim.cmd [[silent! %s/\s\+$//]] -- clear trailing whitespace
U.set_buf_options()
- if limited_space then
- vim.api.nvim_win_set_cursor(
- 0,
- { #settings.header + 3, math.floor(vim.o.columns / 2) }
- )
- end
+ vim.api.nvim_win_set_cursor(0, {
+ #settings.header.content + settings.options.gap1 + 3,
+ math.floor(vim.o.columns / 2),
+ })
end
function M.setup(update)