diff options
author | max397574 <[email protected]> | 2021-10-07 11:27:32 +0200 |
---|---|---|
committer | max397574 <[email protected]> | 2021-10-07 11:27:32 +0200 |
commit | a92dabd3e97a7bea6e393e6b5733613dcfdcc9c2 (patch) | |
tree | 282cef719391796f9df7969d0748e53ee23469ae /lua/startup.lua | |
parent | 8c67e6444b26dbb77ad32f41e34e3bfdda2bedae (diff) |
feat(plugin): ✨new settings structure
Diffstat (limited to 'lua/startup.lua')
-rw-r--r-- | lua/startup.lua | 139 |
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) |