summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-08-15 18:53:47 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-08-15 18:53:47 +0200
commit4073294204effdf65e1182d1769120a5fcd9d348 (patch)
treea1a961e382a74a032dfe48ace0cb53bd89234a29 /config
parent93bdfbb5d7b16a44cb23e6ee2bffd3eef368f8fc (diff)
checkpoint
Diffstat (limited to 'config')
-rw-r--r--config/essentials/vis/Makefile6
-rw-r--r--config/essentials/vis/backup.lua63
-rw-r--r--config/essentials/vis/build.lua76
-rw-r--r--config/essentials/vis/commentary.lua284
-rw-r--r--config/essentials/vis/complete-line.lua56
-rw-r--r--config/essentials/vis/ctags.lua343
-rw-r--r--config/essentials/vis/cursors.lua111
-rw-r--r--config/essentials/vis/format.lua137
-rw-r--r--config/essentials/vis/fzf-mru.lua86
-rw-r--r--config/essentials/vis/fzf-open.lua90
-rw-r--r--config/essentials/vis/themes/nord.lua123
-rw-r--r--config/essentials/vis/title.lua28
-rw-r--r--config/essentials/vis/vis-go.lua104
-rw-r--r--config/essentials/vis/vis-lua.lua12
-rw-r--r--config/essentials/vis/vis-ultisnips/init.lua149
-rw-r--r--config/essentials/vis/vis-ultisnips/snipmate-parser.lua128
-rw-r--r--config/essentials/vis/vis-ultisnips/testlpeg-snipmate.lua160
-rw-r--r--config/essentials/vis/vis-ultisnips/testlpeg-ultisnips.lua230
-rw-r--r--config/essentials/vis/vis-ultisnips/ultisnips-parser.lua211
-rw-r--r--config/essentials/vis/visrc.lua188
-rw-r--r--config/essentials/vis/yank-highlight.lua37
21 files changed, 0 insertions, 2622 deletions
diff --git a/config/essentials/vis/Makefile b/config/essentials/vis/Makefile
deleted file mode 100644
index f2d386b..0000000
--- a/config/essentials/vis/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-.PHONY: check
-
-LUA_FILES := $(shell find . -type f -name "*.lua")
-
-check:
- luacheck --no-color --globals=vis -- $(LUA_FILES)
diff --git a/config/essentials/vis/backup.lua b/config/essentials/vis/backup.lua
deleted file mode 100644
index 2c8f0b8..0000000
--- a/config/essentials/vis/backup.lua
+++ /dev/null
@@ -1,63 +0,0 @@
---[[
-Based on https://github.com/roguh/vis-backup
-Changes made:
-- stylua
-- file path
---]]
-
-local backup = {}
-
--- Return the backup path concatenated with the filename, replace / with %
-backup.entire_path_with_double_percentage_signs = function(backup_dir, path)
- return backup_dir .. "/" .. string.gsub(path, "/", "%%")
-end
-
--- Return the backup path concatenated with the filename, replace / with %
--- and append the current time using time_format
-backup.entire_path_with_double_percentage_signs_and_timestamp = function(backup_dir, path)
- return backup_dir .. "/" .. os.date(backup.time_format) .. string.gsub(path, "/", "%%")
-end
-
--- Before saving the file, copy the current contents of the file to a backup file
-vis.events.subscribe(vis.events.FILE_SAVE_PRE, function(file, path)
- if file == nil then
- return
- end
-
- if file.size > backup.byte_limit then
- return
- end
-
- -- E.g. when editing stdin as an interactive filter
- -- `vis -`
- if path == nil then
- return
- end
-
- local backup_path = backup.get_fname(backup.directory, path)
-
- local backup_file = io.open(backup_path, "w")
- local current_file = io.open(path)
- if backup_file == nil or current_file == nil then
- return
- end
-
- for line in current_file:lines() do
- backup_file:write(line .. "\n")
- end
-
- backup_file:close()
-end)
-
--- Set defaults
-backup.directory = (os.getenv("XDG_DATA_HOME") or (os.getenv("HOME") .. "/.local/share")) .. "/Trash/vis-backups"
-
-backup.get_fname = backup.entire_path_with_double_percentage_signs
-
-backup.time_format = "%H-%M-"
-
--- Do not make backups if the file is greater than this
--- 1MB by default
-backup.byte_limit = 1000000
-
-return backup
diff --git a/config/essentials/vis/build.lua b/config/essentials/vis/build.lua
deleted file mode 100644
index bccf402..0000000
--- a/config/essentials/vis/build.lua
+++ /dev/null
@@ -1,76 +0,0 @@
---[[
-Based on https://gitlab.com/muhq/vis-build
-Changes made:
-- stylua format
-- print build messages on success
---]]
-
--- Copyright (c) 2024 Florian Fischer. All rights reserved.
---
--- vis-build is free software: you can redistribute it and/or modify it under
--- the terms of the GNU General Public License as published by the Free Software
--- Foundation, either version 3 of the License, or (at your option) any later
--- version.
---
--- vis-build is distributed in the hope that it will be useful, but WITHOUT
--- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License along with
--- vis-build found in the LICENSE file.
--- If not, see <https://www.gnu.org/licenses/>.
-local M = {}
-M.get_default_build_cmd = function()
- return "make"
-end
-
-local build_id = 0
-local builds = {}
-
-M.new_build = function(cmd)
- build_id = build_id + 1
- local build_name = "build" .. build_id
- local build_fd = vis:communicate(build_name, cmd)
- local build = { fd = build_fd, out = "", err = "", cmd = cmd }
- builds[build_name] = build
-end
-
-vis.events.subscribe(vis.events.PROCESS_RESPONSE, function(name, event, code, msg)
- local build = builds[name]
- if not build then
- return
- end
-
- if event == "EXIT" or event == "SIGNAL" then
- if code ~= 0 then
- vis:message("build: " .. name .. " cmd: " .. build.cmd)
- if event == "EXIT" then
- vis:message("failed with: " .. code)
- else
- vis:message("got signal: " .. code)
- end
- vis:message("stdout:\n" .. build.out)
- vis:message("stderr:\n" .. build.err)
- else
- vis:message(name .. ":\n" .. build.out)
- end
- builds[name] = nil
- end
-
- if event == "STDOUT" then
- build.out = build.out .. msg
- elseif event == "STDERR" then
- build.err = build.err .. msg
- end
-end)
-
-vis:command_register("build", function(argv)
- M.new_build(argv[1] or M.get_default_build_cmd())
-end, "Asynchronously build the current file or project")
-
-vis:map(vis.modes.NORMAL, "<M-b>", function()
- vis:command("build")
- return 0
-end, "Asynchronously build the current file or project")
-
-return M
diff --git a/config/essentials/vis/commentary.lua b/config/essentials/vis/commentary.lua
deleted file mode 100644
index 742d2df..0000000
--- a/config/essentials/vis/commentary.lua
+++ /dev/null
@@ -1,284 +0,0 @@
---[[
-Based on https://github.com/lutobler/vis-commentary
-Changes made:
-- stylua
---]]
-
---
--- vis-commentary
---
-local comment_string = {
- actionscript = "//",
- ada = "--",
- ansi_c = "/*|*/",
- antlr = "//",
- apdl = "!",
- apl = "#",
- applescript = "--",
- asp = "'",
- autoit = ";",
- awk = "#",
- b_lang = "//",
- bash = "#",
- batch = ":",
- bibtex = "%",
- boo = "#",
- chuck = "//",
- cmake = "#",
- coffeescript = "#",
- context = "%",
- cpp = "//",
- crystal = "#",
- csharp = "//",
- css = "/*|*/",
- cuda = "//",
- dart = "//",
- desktop = "#",
- django = "{#|#}",
- dmd = "//",
- dockerfile = "#",
- dot = "//",
- eiffel = "--",
- elixir = "#",
- erlang = "%",
- faust = "//",
- fennel = ";;",
- fish = "#",
- forth = "|\\",
- fortran = "!",
- fsharp = "//",
- gap = "#",
- gettext = "#",
- gherkin = "#",
- glsl = "//",
- gnuplot = "#",
- go = "//",
- groovy = "//",
- gtkrc = "#",
- haskell = "--",
- html = "<!--|-->",
- icon = "#",
- idl = "//",
- inform = "!",
- ini = "#",
- Io = "#",
- java = "//",
- javascript = "//",
- json = "/*|*/",
- jsp = "//",
- latex = "%",
- ledger = "#",
- less = "//",
- lilypond = "%",
- lisp = ";",
- logtalk = "%",
- lua = "--",
- makefile = "#",
- markdown = "<!--|-->",
- matlab = "#",
- moonscript = "--",
- myrddin = "//",
- nemerle = "//",
- nsis = "#",
- objective_c = "//",
- pascal = "//",
- perl = "#",
- php = "//",
- pico8 = "//",
- pike = "//",
- pkgbuild = "#",
- prolog = "%",
- props = "#",
- protobuf = "//",
- ps = "%",
- pure = "//",
- python = "#",
- rails = "#",
- rc = "#",
- rebol = ";",
- rest = ".. ",
- rexx = "--",
- rhtml = "<!--|-->",
- rstats = "#",
- ruby = "#",
- rust = "//",
- sass = "//",
- scala = "//",
- scheme = ";",
- smalltalk = '"|"',
- sml = "(*)",
- snobol4 = "#",
- sql = "#",
- tcl = "#",
- tex = "%",
- text = "",
- toml = "#",
- vala = "//",
- vb = "'",
- vbscript = "'",
- verilog = "//",
- vhdl = "--",
- wsf = "<!--|-->",
- xml = "<!--|-->",
- yaml = "#",
- zig = "//",
- nim = "#",
- julia = "#",
- rpmspec = "#",
-}
-
--- escape all magic characters with a '%'
-local function esc(str)
- if not str then
- return ""
- end
- return (
- str:gsub("%%", "%%%%")
- :gsub("^%^", "%%^")
- :gsub("%$$", "%%$")
- :gsub("%(", "%%(")
- :gsub("%)", "%%)")
- :gsub("%.", "%%.")
- :gsub("%[", "%%[")
- :gsub("%]", "%%]")
- :gsub("%*", "%%*")
- :gsub("%+", "%%+")
- :gsub("%-", "%%-")
- :gsub("%?", "%%?")
- )
-end
-
--- escape '%'
-local function pesc(str)
- if not str then
- return ""
- end
- return str:gsub("%%", "%%%%")
-end
-
-local function rtrim(s)
- local n = #s
- while n > 0 and s:find("^%s", n) do
- n = n - 1
- end
- return s:sub(1, n)
-end
-
-local function comment_line(lines, lnum, prefix, suffix)
- if suffix ~= "" then
- suffix = " " .. suffix
- end
- lines[lnum] = string.gsub(lines[lnum], "(%s*)(.*)", "%1" .. pesc(prefix) .. " %2" .. pesc(suffix))
-end
-
-local function uncomment_line(lines, lnum, prefix, suffix)
- local match_str = "^(%s*)" .. esc(prefix) .. "%s?(.*)" .. esc(suffix)
- local m = table.pack(lines[lnum]:match(match_str))
- lines[lnum] = m[1] .. rtrim(m[2])
-end
-
-local function is_comment(line, prefix)
- return (line:match("^%s*(.+)"):sub(0, #prefix) == prefix)
-end
-
-local function toggle_line_comment(lines, lnum, prefix, suffix)
- if not lines or not lines[lnum] then
- return
- end
- if not lines[lnum]:match("^%s*(.+)") then
- return
- end -- ignore empty lines
- if is_comment(lines[lnum], prefix) then
- uncomment_line(lines, lnum, prefix, suffix)
- else
- comment_line(lines, lnum, prefix, suffix)
- end
-end
-
--- if one line inside the block is not a comment, comment the block.
--- only uncomment, if every single line is comment.
-local function block_comment(lines, a, b, prefix, suffix)
- local uncomment = true
- for i = a, b do
- if lines[i]:match("^%s*(.+)") and not is_comment(lines[i], prefix) then
- uncomment = false
- end
- end
-
- if uncomment then
- for i = a, b do
- if lines[i]:match("^%s*(.+)") then
- uncomment_line(lines, i, prefix, suffix)
- end
- end
- else
- for i = a, b do
- if lines[i]:match("^%s*(.+)") then
- comment_line(lines, i, prefix, suffix)
- end
- end
- end
-end
-
-vis:map(vis.modes.NORMAL, "gcc", function()
- local win = vis.win
- local lines = win.file.lines
- local comment = comment_string[win.syntax]
- if not comment then
- return
- end
- local prefix, suffix = comment:match("^([^|]+)|?([^|]*)$")
- if not prefix then
- return
- end
-
- for sel in win:selections_iterator() do
- local lnum = sel.line
- local col = sel.col
-
- toggle_line_comment(lines, lnum, prefix, suffix)
- sel:to(lnum, col) -- restore cursor position
- end
-
- win:draw()
-end, "Toggle comment on a the current line")
-
-local function visual_f(i)
- return function()
- local win = vis.win
- local lines = win.file.lines
-
- local comment = comment_string[win.syntax]
- if not comment then
- return
- end
-
- local prefix, suffix = comment:match("^([^|]+)|?([^|]*)$")
- if not prefix then
- return
- end
-
- for sel in win:selections_iterator() do
- local r = sel.range
- local lnum = sel.line -- line number of cursor
- local col = sel.col -- column of cursor
-
- if sel.anchored and r then
- sel.pos = r.start
- local a = sel.line
- sel.pos = r.finish
- local b = sel.line - i
-
- block_comment(lines, a, b, prefix, suffix)
-
- sel:to(lnum, col) -- restore cursor position
- end
- end
-
- win:draw()
- vis.mode = vis.modes.NORMAL -- go to normal mode
- end
-end
-
-vis:map(vis.modes.VISUAL_LINE, "gc", visual_f(1), "Toggle comment on the selected lines")
-vis:map(vis.modes.VISUAL, "gc", visual_f(0), "Toggle comment on the selected lines")
diff --git a/config/essentials/vis/complete-line.lua b/config/essentials/vis/complete-line.lua
deleted file mode 100644
index 98515a9..0000000
--- a/config/essentials/vis/complete-line.lua
+++ /dev/null
@@ -1,56 +0,0 @@
---[[
-Based on https://repo.or.cz/vis-complete-line.git
-Changes made:
-- stylua
-- removed <C-x><C-e>, <C-x><C-y> and related functions and variables
---]]
-
--- SPDX-License-Identifier: GPL-3.0-or-later
--- © 2020 Georgi Kirilov
-local progname = ...
-
-local function concat_keys(tbl)
- local keys = {}
- for k in pairs(tbl) do
- table.insert(keys, k)
- end
- return table.concat(keys, "\n"), #keys
-end
-
-local function line_complete()
- local file = vis.win.file
- local sel = vis.win.selection
- local cur_line = file.lines[sel.line]
- local indent_patt = "^[ \t\v\f]+"
- local prefix = cur_line:sub(1, sel.col - 1):gsub(indent_patt, "")
- local candidates = {}
- for l in file:lines_iterator() do
- local unindented = l:gsub(indent_patt, "")
- local start, finish = unindented:find(prefix, 1, true)
- if start == 1 and finish < #unindented then
- candidates[unindented] = true
- end
- end
- local candidates_str, n = concat_keys(candidates)
- if n < 2 then
- if n == 1 then
- vis:insert(candidates_str:sub(#prefix + 1))
- end
- return
- end
- -- XXX: with too many candidates this command will become longer that the shell can handle:
- local command =
- string.format("vis-menu -l %d <<'EOF'\n%s\nEOF\n", math.min(n, math.ceil(vis.win.height / 2)), candidates_str)
- local status, output = vis:pipe(nil, nil, command)
- if n > 0 and status == 0 then
- vis:insert(output:sub(#prefix + 1):gsub("\n$", ""))
- end
-end
-
-vis.events.subscribe(vis.events.INIT, function()
- local function h(msg)
- return string.format("|@%s| %s", progname, msg)
- end
-
- vis:map(vis.modes.INSERT, "<C-x><C-l>", line_complete, h("Complete the current line"))
-end)
diff --git a/config/essentials/vis/ctags.lua b/config/essentials/vis/ctags.lua
deleted file mode 100644
index 40d4aef..0000000
--- a/config/essentials/vis/ctags.lua
+++ /dev/null
@@ -1,343 +0,0 @@
---[[
-Based on https://github.com/kupospelov/vis-ctags
-Changes made:
-- stylua
---]]
-
-require("vis")
-
-local positions = {}
-local tags = { "tags" }
-local ctags = { actions = {} }
-
-local function abs_path(prefix, path)
- if string.find(path, "^/") ~= nil then
- return path, path
- end
-
- if string.find(path, "^./") ~= nil then
- path = path:sub(3)
- end
-
- return prefix .. path, path
-end
-
-local function is_directory(path)
- local dir = io.open(path .. "/", "r")
- if dir then
- dir:close()
- return true
- else
- return false
- end
-end
-
-local function find_tags(path)
- for i = #path, 1, -1 do
- if path:sub(i, i) == "/" then
- local prefix = path:sub(1, i)
- for j = 1, #tags do
- local tagfile = tags[j]
- local filename
- if tagfile:sub(1, 1) == "/" then
- filename = tagfile
- else
- filename = prefix .. tagfile
- end
- if not is_directory(filename) then
- local file = io.open(filename, "r")
-
- if file ~= nil then
- return file, prefix
- end
- end
- end
- end
- end
-end
-
-local function bsearch(file, word)
- local buffer_size = 8096
- local format = '\n(.-)\t(.-)\t(.-);"\t'
-
- local from = 0
- local to = file:seek("end")
- local startpos = nil
-
- while from <= to do
- local mid = from + math.floor((to - from) / 2)
- file:seek("set", mid)
-
- local content = file:read(buffer_size, "*line")
- if content ~= nil then
- local key, _, _ = string.match(content, format)
- if key == nil then
- break
- end
-
- if key == word then
- startpos = mid
- end
-
- if key >= word then
- to = mid - 1
- else
- from = mid + 1
- end
- else
- to = mid - 1
- end
- end
-
- if startpos ~= nil then
- file:seek("set", startpos)
-
- local result = {}
- while true do
- local content = file:read(buffer_size, "*line")
- if content == nil then
- break
- end
-
- for key, filename, excmd in string.gmatch(content, format) do
- if key == word then
- result[#result + 1] = { name = filename, excmd = excmd }
- else
- return result
- end
- end
- end
-
- return result
- end
-end
-
-local function get_query()
- local line = vis.win.selection.line
- local pos = vis.win.selection.col
- local str = vis.win.file.lines[line]
-
- local from, to = 0, 0
- while pos > to do
- from, to = str:find("[%a_]+[%a%d_]*", to + 1)
- if from == nil or from > pos then
- return nil
- end
- end
-
- return string.sub(str, from, to)
-end
-
-local function get_matches(word, path)
- local file, prefix = find_tags(path)
-
- if file ~= nil then
- local results = bsearch(file, word)
- file:close()
-
- if results ~= nil then
- local matches = {}
- for i = 1, #results do
- local result = results[i]
- local abspath, name = abs_path(prefix, result.name)
- local desc = string.format("%s%s", name, tonumber(result.excmd) and ":" .. result.excmd or "")
-
- matches[#matches + 1] = { desc = desc, path = abspath, excmd = result.excmd }
- end
-
- return matches
- end
- end
-end
-
-local function get_match(word, path)
- local matches = get_matches(word, path)
- if matches ~= nil then
- for i = 1, #matches do
- if matches[i].path == path then
- return matches[i]
- end
- end
-
- return matches[1]
- end
-end
-
-local function escape(text)
- return text:gsub("[][)(}{|+?*.]", "\\%0")
- :gsub("%^", "\\^")
- :gsub("^/\\%^", "/^")
- :gsub("%$", "\\$")
- :gsub("\\%$/$", "$/")
- :gsub("\\\\%$%$/$", "\\$$")
-end
-
---[[
-- Can't test vis:command() as it will still return true if the edit command fails.
-- Can't test File.modified as the edit command can succeed if the current file is
- modified but open in another window and this behavior is useful.
-- Instead just check the path again after trying the edit command.
-]]
-local function goto_pos(pos, force)
- if pos.path ~= vis.win.file.path then
- vis:command(string.format(force and 'e! "%s"' or 'e "%s"', pos.path))
- if pos.path ~= vis.win.file.path then
- return false
- end
- end
- if tonumber(pos.excmd) then
- vis.win.selection:to(pos.excmd, pos.col)
- else
- vis.win.selection:to(1, 1)
- vis:command(escape(pos.excmd))
- vis.win.selection.pos = vis.win.selection.range.start
- vis.mode = vis.modes.NORMAL
- end
- return true
-end
-
-local function goto_tag(path, excmd, force)
- local old = {
- path = vis.win.file.path,
- excmd = vis.win.selection.line,
- col = vis.win.selection.col,
- }
-
- local last_search = vis.registers["/"]
- if goto_pos({ path = path, excmd = excmd, col = 1 }, force) then
- positions[#positions + 1] = old
- vis.registers["/"] = last_search
- end
-end
-
-local function pop_pos(force)
- if #positions < 1 then
- return
- end
- if goto_pos(positions[#positions], force) then
- table.remove(positions, #positions)
- end
-end
-
-local function win_path()
- if vis.win.file.path == nil then
- return os.getenv("PWD") .. "/"
- end
- return vis.win.file.path
-end
-
-local function tag_cmd(tag, force)
- local match = get_match(tag, win_path())
- if match == nil then
- vis:info(string.format("Tag not found: %s", tag))
- else
- goto_tag(match.path, match.excmd, force)
- end
-end
-
-local function gen_vis_menu(matches)
- local width = 0
- for _, match in ipairs(matches) do
- width = math.max(width, match.desc:len())
- end
- -- limit max width of desc field (filename) in menu
- width = math.min(width, 40)
- local fmt = "%" .. #tostring(#matches) .. "d %-" .. width .. "s %s"
-
- local lines = {}
- for i, match in ipairs(matches) do
- local desc = match.desc
- if desc:len() > width then
- desc = "..." .. desc:sub(desc:len() - width + 4)
- end
-
- -- work around bug displaying tabs in vis-menu and
- -- provide a clearer context
- local excmd = match.excmd:gsub("%s+", " ")
- excmd = excmd:gsub("^/^", "")
- excmd = excmd:gsub("$/$", "")
- table.insert(lines, fmt:format(i, desc, excmd))
- end
-
- -- limit vis-menu height to ~1/4 the window height
- -- +1 gives an empty line at bottom to signify
- -- that there are no more lines to scroll through
- local nlines = math.min(math.floor(vis.win.height / 4), #lines)
- if nlines == #lines then
- nlines = nlines + 1
- end
- return "vis-menu -l " .. nlines .. " -p 'Choose tag:' << 'EOF'\n" .. table.concat(lines, "\n") .. "\n" .. "EOF"
-end
-
-local function tselect_cmd(tag, force)
- local matches = get_matches(tag, win_path())
- if matches == nil then
- vis:info(string.format("Tag not found: %s", tag))
- else
- local status, output = vis:pipe(vis.win.file, { start = 0, finish = 0 }, gen_vis_menu(matches))
-
- if status ~= 0 then
- vis:info("Command failed")
- return
- end
-
- local choice = tonumber(string.match(output, "%d+"))
- if choice == nil or choice < 1 or choice > #matches then
- vis:info("Invalid choice")
- return
- end
- goto_tag(matches[choice].path, matches[choice].excmd, force)
- end
-end
-
-vis:command_register("tag", function(argv, force)
- if #argv == 1 then
- tag_cmd(argv[1], force)
- end
-end)
-
-vis:command_register("tselect", function(argv, force)
- if #argv == 1 then
- tselect_cmd(argv[1], force)
- end
-end)
-
-vis:command_register("pop", function(_, force)
- pop_pos(force)
-end)
-
-vis:option_register("tags", "string", function(value)
- tags = {}
- for str in value:gmatch("([^%s]+)") do
- table.insert(tags, str)
- end
-end, "Paths to search for tags (separated by spaces)")
-
-ctags.actions.tag = function()
- local query = get_query()
- local force = false
- if query ~= nil then
- tag_cmd(query, force)
- end
- return 0
-end
-
-ctags.actions.tselect = function()
- local query = get_query()
- local force = false
- if query ~= nil then
- tselect_cmd(query, force)
- end
- return 0
-end
-
-ctags.actions.pop = function()
- pop_pos()
- return 0
-end
-
-vis:map(vis.modes.NORMAL, "<C-]>", ctags.actions.tag)
-vis:map(vis.modes.NORMAL, "g<C-]>", ctags.actions.tselect)
-vis:map(vis.modes.NORMAL, "<C-t>", ctags.actions.pop)
-
-return ctags
diff --git a/config/essentials/vis/cursors.lua b/config/essentials/vis/cursors.lua
deleted file mode 100644
index 01c1ede..0000000
--- a/config/essentials/vis/cursors.lua
+++ /dev/null
@@ -1,111 +0,0 @@
---[[
-Based on https://github.com/erf/vis-cursors
-Changes made:
-- stylua
---]]
-
-local M = {}
-local cursors = {}
-local files = {}
-
--- default maxsize
-M.maxsize = 1000
-
--- get the default system cache directory
-local function get_default_cache_path()
- local HOME = os.getenv('HOME')
- local XDG_CACHE_HOME = os.getenv('XDG_CACHE_HOME')
- local BASE = XDG_CACHE_HOME or HOME
- return BASE .. '/.vis-cursors'
-end
-
--- default save path
-M.path = get_default_cache_path()
-
-local function read_files()
-
- -- read file
- local file = io.open(M.path)
- if file == nil then return end
-
- files = {}
-
- -- read positions per file path
- for line in file:lines() do
- for path, pos in string.gmatch(line, '(.+)[,%s](%d+)') do
- cursors[path] = pos
- table.insert(files, path)
- end
- end
-
- file:close()
-end
-
--- read cursors from file on init
-local function on_init() read_files() end
-
--- apply cursor pos on win open
-local function on_win_open(win)
-
- if win.file == nil or win.file.path == nil then return end
-
- -- init cursor path if nil
- local pos = cursors[win.file.path]
- if pos == nil then
- cursors[win.file.path] = win.selection.pos
- return
- end
-
- -- set current cursor
- win.selection.pos = tonumber(pos)
-
- -- center view around cursor
- vis:feedkeys("zz")
-end
-
--- set cursor pos on close
-local function on_win_close(win)
-
- if win.file == nil or win.file.path == nil then return end
-
- -- re-read files in case they've changed
- read_files()
-
- -- remove old occurences of current path
- for i, path in ipairs(files) do
- if path == win.file.path then table.remove(files, i) end
- end
-
- -- ignore files with cursor at the beginning
- if win.selection.pos == 0 then return end
-
- -- insert current path to top of files
- table.insert(files, 1, win.file.path)
-
- -- set cursor pos for current file path
- cursors[win.file.path] = win.selection.pos
-end
-
--- write cursors to file on quit
-local function on_quit()
-
- local file = io.open(M.path, 'w+')
- if file == nil then return end
-
- -- buffer cursors string
- local buffer = {}
- for _, path in ipairs(files) do
- table.insert(buffer, string.format('%s,%d', path, cursors[path]))
- if M.maxsize and #buffer >= M.maxsize then break end
- end
- local output = table.concat(buffer, '\n')
- file:write(output)
- file:close()
-end
-
-vis.events.subscribe(vis.events.INIT, on_init)
-vis.events.subscribe(vis.events.WIN_OPEN, on_win_open)
-vis.events.subscribe(vis.events.WIN_CLOSE, on_win_close)
-vis.events.subscribe(vis.events.QUIT, on_quit)
-
-return M
diff --git a/config/essentials/vis/format.lua b/config/essentials/vis/format.lua
deleted file mode 100644
index eefdc77..0000000
--- a/config/essentials/vis/format.lua
+++ /dev/null
@@ -1,137 +0,0 @@
---[[
-Based on https://github.com/milhnl/vis-format
-Changes made:
-- stylua
-- restore position after format
-- use local M to return the module
---]]
-
-local M = {}
-M.check_same = true
-M.wrapwidth = 90
-
-M.stdio_formatter = function(cmd, options)
- local function apply(win, range, pos)
- local size = win.file.size
- local all = { start = 0, finish = size }
- if range == nil then
- range = all
- end
- local command = type(cmd) == "function" and cmd(win, range, pos) or cmd
- local check_same = (options and options.check_same ~= nil) and options.check_same or M.check_same
- local check = check_same == true or (type(check_same) == "number" and check_same >= size)
- local status, out, err = vis:pipe(win.file, all, command)
- if status ~= 0 then
- vis:message(err)
- elseif out == nil or out == "" then
- vis:info("No output from formatter")
- elseif not check or win.file:content(all) ~= out then
- local start, finish = range.start, range.finish
- win.file:delete(range)
- win.file:insert(start, out:sub(start + 1, finish + (out:len() - size)))
- end
- return pos
- end
- return {
- apply = apply,
- options = options or { ranged = type(cmd) == "function" },
- }
-end
-
-M.with_filename = function(win, option)
- if win.file.path then
- return option .. "'" .. win.file.path:gsub("'", "\\'") .. "'"
- else
- return ""
- end
-end
-
-M.formatters = {
- bash = M.stdio_formatter(function(win)
- return "shfmt " .. M.with_filename(win, "--filename ") .. " -"
- end),
- csharp = M.stdio_formatter("dotnet csharpier"),
- go = M.stdio_formatter("gofmt"),
- lua = {
- pick = function(win)
- local _, out = vis:pipe(
- win.file,
- { start = 0, finish = win.file.size },
- "test -e .lua-format && echo luaformatter || echo stylua"
- )
- return M.formatters[out:gsub("\n$", "")]
- end,
- },
- luaformatter = M.stdio_formatter("lua-format"),
- -- markdown = M.stdio_formatter(function(win)
- -- if win.options and M.wrapwidth ~= 0 then
- -- return "prettier --parser markdown --prose-wrap always "
- -- .. ("--print-width " .. (M.wrapwidth - 1) .. " ")
- -- .. M.with_filename(win, "--stdin-filepath ")
- -- else
- -- return "prettier --parser markdown " .. M.with_filename(win, "--stdin-filepath ")
- -- end
- -- end, { ranged = false }),
- powershell = M.stdio_formatter([[
- "$( (command -v powershell.exe || command -v pwsh) 2>/dev/null )" -c '
- Invoke-Formatter -ScriptDefinition `
- ([IO.StreamReader]::new([Console]::OpenStandardInput()).ReadToEnd())
- ' | sed -e :a -e '/^[\r\n]*$/{$d;N;};/\n$/ba'
- ]]),
- rust = M.stdio_formatter("rustfmt"),
- stylua = M.stdio_formatter(function(win, range)
- if range and (range.start ~= 0 or range.finish ~= win.file.size) then
- return "stylua -s --range-start "
- .. range.start
- .. " --range-end "
- .. range.finish
- .. M.with_filename(win, " --stdin-filepath ")
- .. " -"
- else
- return "stylua -s " .. M.with_filename(win, "--stdin-filepath ") .. " -"
- end
- end),
- text = M.stdio_formatter(function(win)
- if win.options and M.wrapwidth ~= 0 then
- return "fmt -w " .. (M.wrapwidth - 1)
- else
- return "fmt"
- end
- end, { ranged = false }),
-}
-
-local function getwinforfile(file)
- for win in vis:windows() do
- if win and win.file and win.file.path == file.path then
- return win
- end
- end
-end
-
-M.apply = function(file_or_keys, range, pos)
- local win = type(file_or_keys) ~= "string" and getwinforfile(file_or_keys) or vis.win
- local ret = type(file_or_keys) ~= "string" and function()
- return pos
- end or function()
- return 0
- end
- pos = pos or win.selection.pos
- local formatter = M.formatters[win.syntax]
- if formatter and formatter.pick then
- formatter = formatter.pick(win)
- end
- if formatter == nil then
- vis:info("No formatter for " .. win.syntax)
- return ret()
- end
- if range ~= nil and not formatter.options.ranged and range.start ~= 0 and range.finish ~= win.file.size then
- vis:info("Formatter for " .. win.syntax .. " does not support ranges")
- return ret()
- end
- pos = formatter.apply(win, range, pos) or pos
- vis:redraw()
- win.selection.pos = pos
- return ret()
-end
-
-return M
diff --git a/config/essentials/vis/fzf-mru.lua b/config/essentials/vis/fzf-mru.lua
deleted file mode 100644
index 8408dd7..0000000
--- a/config/essentials/vis/fzf-mru.lua
+++ /dev/null
@@ -1,86 +0,0 @@
---[[
-Based on https://github.com/peaceant/vis-fzf-mru
-Changes made:
-- stylua
-- renamed module to M
-- renamed fzfmru to fzf
-- height to 40%
-- use XDG_CACHE_HOME
-- ignore exit code 130
---]]
-
-local M = {}
-M.fzf_filepath = (os.getenv("XDG_CACHE_HOME") or (os.getenv("HOME") .. "/.local/share")).. "/vis-fzf-mru"
-M.fzf_path = "fzf"
-M.fzf_args = "--height=40%"
-M.fzf_history = 20
-
-local function read_mru()
- local mru = {}
- local f = io.open(M.fzf_filepath)
- if f == nil then return end
- for line in f:lines() do table.insert(mru, line) end
- f:close()
-
- return mru
-end
-
-local function write_mru(win)
- local file_path = win.file.path
- local mru = read_mru()
-
- -- check if mru data exists
- if mru == nil then mru = {} end
- -- check if we opened any file
- if file_path == nil then return end
- -- check duplicate
- if file_path == mru[1] then return end
-
- local f = io.open(M.fzf_filepath, "w+")
- if f == nil then return end
-
- table.insert(mru, 1, file_path)
-
- for i, k in ipairs(mru) do
- if i > M.fzf_history then break end
- if i == 1 or k ~= file_path then
- f:write(string.format("%s\n", k))
- end
- end
-
- f:close()
-end
-
-vis.events.subscribe(vis.events.WIN_OPEN, write_mru)
-
-vis:command_register("fzfmru", function(argv)
- local command = "cat " .. M.fzf_filepath .. " | " ..
- M.fzf_path .. " " .. M.fzf_args .. " " ..
- table.concat(argv, " ")
-
- local file = io.popen(command)
- local output = file:read()
- local _, _, status = file:close()
-
- if status == 0 then
- vis:command(string.format("e '%s'", output))
- elseif status == 1 then
- vis:info(string.format(
- "fzf-open: No match. Command %s exited with return value %i.",
- command, status))
- elseif status == 2 then
- vis:info(string.format(
- "fzf-open: Error. Command %s exited with return value %i.",
- command, status))
- elseif status ~= 130 then
- vis:info(string.format(
- "fzf-open: Unknown exit status %i. command %s exited with return value %i",
- status, command, status, status))
- end
-
- vis:redraw()
-
- return true
-end)
-
-return M
diff --git a/config/essentials/vis/fzf-open.lua b/config/essentials/vis/fzf-open.lua
deleted file mode 100644
index ff4f694..0000000
--- a/config/essentials/vis/fzf-open.lua
+++ /dev/null
@@ -1,90 +0,0 @@
---[[
-Based on https://git.cepl.eu/cgit/vis/vis-fzf-open
-Changes made:
-- stylua
-- height argument
-- module renamed to M
-- ignore exit code 130
---]]
-
--- Copyright (C) 2017 Guillaume Chérel
--- Copyright (C) 2023 Matěj Cepl
---
--- This program is free software: you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as
--- published by the Free Software Foundation, either version 3 of the
--- License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with this program. If not, see <https://www.gnu.org/licenses/>.
-local M = {}
-
-M.fzf_path = "fzf"
-M.fzf_args = "--height=40%"
-
-vis:command_register("fzf", function(argv)
- local fzf_path = M.fzf_path
- if argv[1] == "--search-path" then
- table.remove(argv, 1)
- local dir = table.remove(argv, 1)
- fzf_path = ([[FZF_DEFAULT_COMMAND="$FZF_DEFAULT_COMMAND --search-path ]] .. dir .. [[" fzf]])
- end
-
- local command = string.gsub(
- [[
- $fzf_path \
- --header="Enter:edit,^s:split,^v:vsplit" \
- --expect="ctrl-s,ctrl-v" \
- $fzf_args $args
- ]],
- "%$([%w_]+)",
- {
- fzf_path = fzf_path,
- fzf_args = M.fzf_args,
- args = table.concat(argv, " "),
- }
- )
-
- local file = io.popen(command)
- local output = {}
- for line in file:lines() do
- table.insert(output, line)
- end
- local _, _, status = file:close()
-
- if status == 0 then
- local action = "e"
-
- if output[1] == "ctrl-s" then
- action = "split"
- elseif output[1] == "ctrl-v" then
- action = "vsplit"
- end
-
- vis:feedkeys(string.format(":%s '%s'<Enter>", action, output[2]))
- elseif status == 1 then
- vis:info(string.format("fzf-open: No match. Command %s exited with return value %i.", command, status))
- elseif status == 2 then
- vis:info(string.format("fzf-open: Error. Command %s exited with return value %i.", command, status))
- elseif status ~= 130 then
- vis:info(
- string.format(
- "fzf-open: Unknown exit status %i. command %s exited with return value %i",
- status,
- command,
- status
- )
- )
- end
-
- vis:redraw()
-
- return true
-end, "Select file to open with fzf")
-
-return M
diff --git a/config/essentials/vis/themes/nord.lua b/config/essentials/vis/themes/nord.lua
deleted file mode 100644
index 847b96a..0000000
--- a/config/essentials/vis/themes/nord.lua
+++ /dev/null
@@ -1,123 +0,0 @@
--- base16-vis (https://github.com/pshevtsov/base16-vis)
--- by Petr Shevtsov
--- Nord scheme by arcticicestudio
-local lexers = vis.lexers
-
-local colors = {
- ["bg"] = "#2E3440",
- ["black"] = "#3B4252",
- ["light_black"] = "#434C5E",
- ["dark_gray"] = "#4C566A",
- ["gray"] = "#D8DEE9",
- ["light_gray"] = "#616E88",
- ["fg"] = "#E5E9F0",
- ["white"] = "#ECEFF4",
- ["turquoise"] = "#8FBCBB",
- ["light_cyan"] = "#88C0D0",
- ["cyan"] = "#81A1C1",
- ["blue"] = "#5E81AC",
- ["red"] = "#BF616A",
- ["orange"] = "#D08770",
- ["yellow"] = "#EBCB8B",
- ["green"] = "#A3BE8C",
- ["magenta"] = "#B48EAD",
-}
-
-lexers.colors = colors
-
-local fg = "fore:" .. colors.fg
-local bg = "back:default"
-
-lexers.STYLE_DEFAULT = bg .. "," .. fg
-lexers.STYLE_NOTHING = bg
-lexers.STYLE_CLASS = "fore:" .. colors.blue
-lexers.STYLE_COMMENT = "fore:" .. colors.light_gray .. ",italics"
-lexers.STYLE_CONSTANT = "fore:" .. colors.cyan
-lexers.STYLE_DEFINITION = "fore:" .. colors.green
-lexers.STYLE_ERROR = "fore:" .. colors.light_cyan .. ",italics"
-lexers.STYLE_FUNCTION = "fore:" .. colors.light_cyan .. ",bold"
-lexers.STYLE_HEADING = "fore:" .. colors.bg .. ",back:" .. colors.yellow
-lexers.STYLE_KEYWORD = "fore:" .. colors.cyan .. ",bold"
-lexers.STYLE_LABEL = "fore:" .. colors.blue
-lexers.STYLE_NUMBER = "fore:" .. colors.magenta
-lexers.STYLE_OPERATOR = "fore:" .. colors.light_cyan
-lexers.STYLE_REGEX = "fore:" .. colors.orange
-lexers.STYLE_STRING = "fore:" .. colors.green
-lexers.STYLE_PREPROCESSOR = "fore:" .. colors.blue
-lexers.STYLE_TAG = "fore:" .. colors.blue
-lexers.STYLE_TYPE = "fore:" .. colors.cyan
-lexers.STYLE_VARIABLE = "fore:" .. colors.cyan .. ",bold"
-lexers.STYLE_WHITESPACE = "fore:" .. colors.light_black
-lexers.STYLE_EMBEDDED = "fore:" .. colors.magenta
-lexers.STYLE_IDENTIFIER = fg .. ",bold"
-
-lexers.STYLE_LINENUMBER = "fore:" .. colors.light_black .. ",back:" .. colors.bg
-lexers.STYLE_CURSOR = "fore:" .. colors.bg .. ",back:" .. colors.fg
-lexers.STYLE_CURSOR_PRIMARY = "fore:" .. colors.bg .. ",back:" .. colors.fg
-lexers.STYLE_CURSOR_LINE = "back:" .. colors.black
-lexers.STYLE_COLOR_COLUMN = "back:" .. colors.black
-lexers.STYLE_SELECTION = "back:" .. colors.light_black
-lexers.STYLE_STATUS = "fore:" .. colors.gray .. ",back:" .. colors.black
-lexers.STYLE_STATUS_FOCUSED = "fore:" .. colors.cyan .. ",back:" .. colors.black
-lexers.STYLE_SEPARATOR = lexers.STYLE_DEFAULT
-lexers.STYLE_INFO = "fore:default,back:default,bold"
-lexers.STYLE_EOF = ""
-
--- lexer specific styles
-
--- Diff
-lexers.STYLE_ADDITION = "back:" .. colors.green .. ",fore:" .. colors.bg
-lexers.STYLE_DELETION = "back:" .. colors.red .. ",fore:" .. colors.bg
-lexers.STYLE_CHANGE = "back:" .. colors.yellow .. ",fore:" .. colors.bg
-
--- CSS
-lexers.STYLE_PROPERTY = lexers.STYLE_ATTRIBUTE
-lexers.STYLE_PSEUDOCLASS = ""
-lexers.STYLE_PSEUDOELEMENT = ""
-
--- HTML
-lexers.STYLE_TAG_UNKNOWN = lexers.STYLE_TAG .. ",italics"
-lexers.STYLE_ATTRIBUTE_UNKNOWN = lexers.STYLE_ATTRIBUTE .. ",italics"
-
--- Latex, TeX, and Texinfo
-lexers.STYLE_COMMAND = lexers.STYLE_KEYWORD
-lexers.STYLE_COMMAND_SECTION = lexers.STYLE_CLASS
-lexers.STYLE_ENVIRONMENT = lexers.STYLE_TYPE
-lexers.STYLE_ENVIRONMENT_MATH = lexers.STYLE_NUMBER
-
--- Makefile
-lexers.STYLE_TARGET = ""
-
--- Markdown
-lexers.STYLE_HR = ""
-lexers.STYLE_HEADING_H1 = "fore:" .. colors.orange .. ",bold"
-lexers.STYLE_HEADING_H2 = "fore:" .. colors.magenta .. ",bold"
-for i = 3, 6 do
- lexers["STYLE_HEADING_H" .. i] = "fore:" .. colors.cyan .. ",bold"
-end
-lexers.STYLE_BOLD = "bold"
-lexers.STYLE_ITALIC = "italics"
-lexers.STYLE_LIST = lexers.STYLE_KEYWORD
-lexers.STYLE_LINK = "fore:" .. colors.yellow .. ",italics"
-lexers.STYLE_REFERENCE = "fore:" .. colors.blue
-lexers.STYLE_CODE = "back:" .. colors.black .. ",fore:" .. colors.turquoise
-
--- Output
-lexers.STYE_FILENAME = "bold"
-lexers.STYLE_LINE = "fore:" .. colors.green
-lexers.STYLE_COLUMN = "underline"
-lexers.STYLE_MESSAGE = ""
-
--- Python
-lexers.STYLE_KEYWORD_SOFT = ""
-
--- YAML
-lexers.STYLE_ERROR_INDENT = "back:" .. colors.red
-
--- GO
-lexers.STYLE_CONSTANT_BUILTIN = "fore:" .. colors.cyan
-lexers.STYLE_FUNCTION_METHOD = "fore:" .. colors.light_cyan
-lexers.STYLE_FUNCTION_BUILTIN = "fore:" .. colors.light_cyan .. ",bold"
-
--- Lua
-lexers.STYLE_ATTRIBUTE = "fore:" .. colors.yellow .. ",bold"
diff --git a/config/essentials/vis/title.lua b/config/essentials/vis/title.lua
deleted file mode 100644
index 06a3964..0000000
--- a/config/essentials/vis/title.lua
+++ /dev/null
@@ -1,28 +0,0 @@
---[[
-Based on https://github.com/erf/vis-title
-Changes made:
-- stylua
---]]
-
-require("vis")
-
-local function set_title(title)
- -- print() cannot be used here as it will mess up vis
- vis:command(string.format(":!printf '\\033]2;vis %s\\007'", title))
-end
-
-vis.events.subscribe(vis.events.INIT, function()
- print("\27[22;2t")
-end)
-
-vis.events.subscribe(vis.events.WIN_OPEN, function(win)
- set_title(win.file.name or "[No Name]")
-end)
-
-vis.events.subscribe(vis.events.FILE_SAVE_POST, function(file)
- set_title(file.name)
-end)
-
-vis.events.subscribe(vis.events.QUIT, function()
- print("\27[23;2t")
-end)
diff --git a/config/essentials/vis/vis-go.lua b/config/essentials/vis/vis-go.lua
deleted file mode 100644
index c4788cc..0000000
--- a/config/essentials/vis/vis-go.lua
+++ /dev/null
@@ -1,104 +0,0 @@
---[[
-Based on https://gitlab.com/timoha/vis-go
-Changes made:
-- stylua format
-- check if line, col in godef()
-- no formatting because already handled by format.lua
-- removed the goimports option
-- set env variable for godef that fixes "no definition found"
-- removed syntax checks
-- gorename is a keybind
---]]
-
-local function jump_to(path, line, col)
- if path then
- vis:command(string.format("e %s", path))
- end
- vis.win.selection:to(line, col)
-end
-
-local Gostack = { s = {}, i = 1 }
-
-function Gostack:push(v)
- self.s[self.i] = v
- self.i = self.i + 1
-end
-
-function Gostack:pop()
- if self.i == 1 then
- return nil
- end
- self.i = self.i - 1
- return self.s[self.i]
-end
-
-local function godef()
- local win = vis.win
-
- local file = win.file
- local pos = win.selection.pos
- local cmd = string.format("GO111MODULE=off godef -i -o %d", pos)
- local status, out, err = vis:pipe(file, { start = 0, finish = file.size }, cmd)
- if status ~= 0 or not out then
- if err then
- vis:info(err)
- end
- return status
- end
-
- Gostack:push({ path = file.path, line = win.selection.line, col = win.selection.col })
-
- local path, line, col = string.match(out, "([^:]+):([^:]+):([^:]+)")
- if not path then
- -- same file
- line, col = string.match(out, "([^:]+):([^:]+)")
- end
- if line and col then
- jump_to(path, line, col)
- end
-end
-
-local function godef_back()
- local pos = Gostack:pop()
- if pos then
- jump_to(pos.path, pos.line, pos.col)
- end
-end
-
-local function gorename(argv, force, win, selection)
- local name = argv[1]
- if not name then
- vis:info("empty new name provided")
- return false
- end
-
- local forceFlag = ""
- if force then
- forceFlag = "-force"
- end
-
- local pos = selection.pos
- local f =
- io.popen(string.format("gorename -offset %s:#%d -to %s %s 2>&1", win.file.path, pos, name, forceFlag), "r")
- local out = f:read("*all")
- local success, _, _ = f:close()
- if not success then
- vis:message(out)
- return false
- end
-
- -- refresh current file
- vis:command("e")
- win.selection.pos = pos
-
- vis:info(out)
- return true
-end
-
-vis:map(vis.modes.NORMAL, "gd", godef, "Jump to Go symbol/definition")
-vis:map(vis.modes.NORMAL, "gD", godef_back, "Jump back to previous Go symbol/definition")
-vis:command_register(
- "gorename",
- gorename,
- "Perform precise type-safe renaming of identifiers in Go source code: :gorename newName"
-)
diff --git a/config/essentials/vis/vis-lua.lua b/config/essentials/vis/vis-lua.lua
deleted file mode 100644
index 83a831a..0000000
--- a/config/essentials/vis/vis-lua.lua
+++ /dev/null
@@ -1,12 +0,0 @@
-vis:command_register("check", function(_, _, win)
- local fd = vis:communicate("check", "luacheck --no-color " .. win.file.path)
- if not fd then
- vis:info("error")
- end
- vis.events.subscribe(vis.events.PROCESS_RESPONSE, function(name, _, _, msg)
- if name ~= "check" then
- return
- end
- vis:message(msg)
- end)
-end, "Check for errors in the file")
diff --git a/config/essentials/vis/vis-ultisnips/init.lua b/config/essentials/vis/vis-ultisnips/init.lua
deleted file mode 100644
index 52faa55..0000000
--- a/config/essentials/vis/vis-ultisnips/init.lua
+++ /dev/null
@@ -1,149 +0,0 @@
---------------------------------------------------------------------------------
--- Modules
-
-local M = {}
-local cwd = ...
-local SnipMate = require(cwd .. '.snipmate-parser')
-local UltiSnips = require(cwd .. '.ultisnips-parser')
-
-
-
---------------------------------------------------------------------------------
--- Config
-
-M.snipmate = ''
-M.ultisnips = ''
-
-
-
---------------------------------------------------------------------------------
--- Helper functions
-
--- Takes list of snippets and concatenates them into the string suitable
--- for passing to dmenu (or, very probably, vis-menu)
-local function snippetslist(snippets)
- local list = ''
-
- for k,v in pairs(snippets) do
- if not v.description then
- list = list .. k .. '\n'
- else
- list = list .. k .. ' - ' .. v.description .. '\n'
- end
- end
-
- return list
-end
-
-
-
-local function load_ultisnips()
- local snippetfile = M.ultisnips .. vis.win.syntax .. '.snippets'
- local snippets, success = UltiSnips.load_snippets(snippetfile)
- if not success then
- vis:info('Failed to load a correct UltiSnip: ' .. snippetfile)
- end
- return snippets, success
-end
-
-
-
-local function load_snipmate()
- local snippetfile = M.snipmate .. vis.win.syntax .. '.snippets'
- local snippets, success = SnipMate.load_snippets(snippetfile)
- if not success then
- vis:info('Failed to load a correct SnipMate: ' .. snippetfile)
- end
- return snippets, success
-end
-
-
-
--- Second will append to first using suffix for distinguishing
-local function merge_and_override(snips1, snips2, suffix)
- for k,v in pairs(snips2) do
- snips1[k .. suffix] = v
- end
- return snips1
-end
-
-
-
---------------------------------------------------------------------------------
--- Plugging it all in
-
-vis:map(vis.modes.INSERT, "<C-x><C-j>", function()
- local snippets = merge_and_override(load_snipmate(), load_ultisnips(), '_us')
-
- local win = vis.win
- local file = win.file
- local pos = win.selection.pos
-
- if not pos then
- return
- end
- -- TODO do something clever here
-
- -- Use prefix W if exists
- local initial = ' '
- local range = file:text_object_longword(pos > 0 and pos - 1 or pos)
- if range then
- initial = initial .. file:content(range)
- end
-
- -- Note, for one reason or another, using vis-menu corrupts my terminal
- -- (urxvt) for exact amount of lines that vis-menu takes
- -- dmenu has no such problems, but can't take initial input :-\
- --local stdout = io.popen("echo '" .. snippetslist(snippets) .. "' | dmenu -l 5", "r")
- local stdout = io.popen("echo '" .. snippetslist(snippets) .. "' | vis-menu " .. initial, "r")
- local chosen = stdout:lines()()
- local _, msg, status = stdout:close()
- if status ~= 0 or not chosen then
- vis:message(msg)
- return
- end
-
- local trigger = chosen:gmatch('[^ ]+')()
- local snipcontent = snippets[trigger].content
- if range then
- file:delete(range)
- -- Update position after deleting the range
- pos = pos - (range.finish - range.start)
- vis:redraw()
- end
-
- vis:insert(snipcontent.str)
-
-
- if #snipcontent.tags > 0 then
- vis:info("Use 'g>' and 'g<' to navigate between anchors.")
-
- -- Create selections iteratively using `:#n,#n2 p` command and `gs` to
- -- save it in the jumplist
- for _,v in ipairs(snipcontent.tags) do
- -- Can't use 'x' command because it'd select stuff across
- -- whole file
- vis:command('#' .. pos + v.selstart ..',#' .. pos + v.selend .. ' p')
- --vis:feedkeys('gs') -- Tested, works without this too, but just in case
- --vis:message('Command: ' .. cmd)
- end
-
- -- Backtrack through all selections we've made first
- -- (so that we can use g> to move us forward)...
- for _ in ipairs(snipcontent.tags) do
- vis:feedkeys('g<')
- end
-
- -- ... then set us on the first selection
- vis:feedkeys('g>')
- else
- win.selection.pos = pos + #snipcontent.str
- end
-end, "Insert a snippet")
-
-
-
---------------------------------------------------------------------------------
--- End module
-
-return M \ No newline at end of file
diff --git a/config/essentials/vis/vis-ultisnips/snipmate-parser.lua b/config/essentials/vis/vis-ultisnips/snipmate-parser.lua
deleted file mode 100644
index 9d735f1..0000000
--- a/config/essentials/vis/vis-ultisnips/snipmate-parser.lua
+++ /dev/null
@@ -1,128 +0,0 @@
---------------------------------------------------------------------------------
--- Module table
-
-local M = {}
-
-local lpeg = require('lpeg')
-
-
-
---------------------------------------------------------------------------------
--- lpeg rules
-
--- Base definitions
--- local tws = lpeg.S' ' ^ 1
-local tnewline = lpeg.S'\n'
--- local tlowcasedword = lpeg.R'az' ^ 1
-local tdigit = lpeg.locale()['digit']
-local talphanum = lpeg.locale()['alnum']
-local tanyprintable = lpeg.locale()['print']
--- local tcontrol = lpeg.locale()['cntrl']
-local ttabtrigger = tanyprintable ^ 1
-local ttag = lpeg.Cg(lpeg.Cp(), 'selstart')
- * lpeg.P'${'
- * lpeg.Cg(tdigit^1, 'tag-order')
- * (
- (lpeg.S':' * lpeg.Cg(talphanum^1, 'default-value') * lpeg.S'}')
- + lpeg.S'}'
- )
- * lpeg.Cg(lpeg.Cp(), 'selend')
-local tsnippetdecl = lpeg.P'snippet' * lpeg.S' ' * lpeg.Cg(ttabtrigger, 'tabtrigger') * tnewline
-local tsnippetcontent = lpeg.C(
- lpeg.Cp() *
- (lpeg.S'\t '^1
- * (lpeg.Ct(ttag) + tanyprintable)^1
- * tnewline
- )^1
- )
-
--- Constructs
-local tsnippet = tsnippetdecl * tsnippetcontent
-local tcomment = lpeg.S'#' * tanyprintable^0 * tnewline
-
--- The way grammar captures:
--- Every snippet gets its own table, and every table has:
--- 'tabtrigger' - the tabtrigger
--- [1] - full content
--- [2] - start of snippet content (need to subtract from selstart/selend
--- [3..n] - tags
-local tsnippetsfile = lpeg.Ct((tcomment + lpeg.Ct(tsnippet) + tnewline) ^1)
-
---------------------------------------------------------------------------------
--- Functions
-
-local function trim_tabs(content)
- local trim = function (s)
- return (string.gsub(s, "^\t(.-)$", "%1"))
- end
-
- local ret=''
- for str in string.gmatch(content, '([^\n]+)') do
- ret = ret .. trim(str) .. '\n'
- end
- return ret
-end
-
--- Tags are on the top level of th table,
--- defined starting with index '3'
--- Index '2' is start of the content
--- Structure:
--- { tag-order: int
--- , selstart: int
--- , selend: int
--- , default-value: str
--- }
-local function extract_tags(tableau)
- local tags = {}
- for k,v in ipairs(tableau) do
- if k >= 3 then -- Only process starting with ix 2
- tags[k - 2] = { selstart = v.selstart - tableau[2] - 1
- , selend = v.selend - tableau[2] - 1
- , default = v['default-value']
- , order = v['tag-order']
- }
--- vis:message('snippet ' .. tableau.tabtrigger .. ' tag ' ..
--- tostring(tags[k - 1].order) .. ' has start/end: ' ..
--- tostring(tags[k - 1].selstart) .. '/' ..
--- tostring(tags[k - 1].selend))
- end
- end
- return tags
-end
-
-M.load_snippets = function(snippetfile)
- local snippets = {}
-
- local f = io.open(snippetfile, 'r')
- if f then
- local content = f:read("*all")
-
- -- TODO hmmm, this'll make whole file unsuable, when it could
- -- in fact have usable snippets
- local m = tsnippetsfile:match(content)
- if not m then
- vis:info('Failed to parse SnipMate file: '.. snippetfile)
- return nil
- else
- -- k is index of snippet definition, v is table of snippet def
- for _,v in pairs(m) do
- snippets[v.tabtrigger] = { description = nil
- , options = {}
- , content = { str = trim_tabs(v[1])
- , tags = extract_tags(v)
- }
- }
- end
- end
-
- f:close()
- return snippets, true
- else
- return snippets, false
- end
-end
-
---------------------------------------------------------------------------------
--- End module
-
-return M
diff --git a/config/essentials/vis/vis-ultisnips/testlpeg-snipmate.lua b/config/essentials/vis/vis-ultisnips/testlpeg-snipmate.lua
deleted file mode 100644
index 997365f..0000000
--- a/config/essentials/vis/vis-ultisnips/testlpeg-snipmate.lua
+++ /dev/null
@@ -1,160 +0,0 @@
-local lpeg = require("lpeg")
-
---------------------------------------------------------------------------------
-
--- Base definitions
--- local tws = lpeg.S(" ") ^ 1
-local tnewline = lpeg.S("\n")
--- local tlowcasedword = lpeg.R("az") ^ 1
-local tdigit = lpeg.locale()["digit"]
-local talphanum = lpeg.locale()["alnum"]
-local tanyprintable = lpeg.locale()["print"]
--- local tcontrol = lpeg.locale()["cntrl"]
-local ttabtrigger = tanyprintable ^ 1
-local ttag = lpeg.Cg(lpeg.Cp(), "selstart")
- * lpeg.P("${")
- * lpeg.Cg(tdigit ^ 1, "tag-order")
- * ((lpeg.S(":") * lpeg.Cg(talphanum ^ 1, "default-value") * lpeg.S("}")) + lpeg.S("}"))
- * lpeg.Cg(lpeg.Cp(), "selend")
-local tsnippetdecl = lpeg.P("snippet") * lpeg.S(" ") * lpeg.Cg(ttabtrigger, "tabtrigger") * tnewline
-local tsnippetcontent = lpeg.C(lpeg.Cp() * (lpeg.S("\t ") ^ 1 * (lpeg.Ct(ttag) + tanyprintable) ^ 1 * tnewline) ^ 1)
-
--- Constructs
-local tsnippet = tsnippetdecl * tsnippetcontent
-local tcomment = lpeg.S("#") * tanyprintable ^ 0 * tnewline
-
--- The way grammar captures:
--- Every snippet gets its own table, and every table has:
--- 'tabtrigger' - the tabtrigger
--- [1] - full content
--- [2..n] - tags
-local tsnippetsfile = lpeg.Ct((tcomment + lpeg.Ct(tsnippet) + tnewline) ^ 1)
---------------------------------------------------------------------------------
-
--- local testsingle = [[
--- snippet sim
--- ${1:public} static int Main(string[] args)
--- {
--- ${0}
--- return 0;
--- }
--- ]]
-
--- local testmulti = [[
--- snippet sim
--- ${1:public} static int Main(string[] args)
--- {
--- ${0}
--- return 0;
--- }
--- snippet simc
--- public class Application
--- {
--- ${1:public} static int Main(string[] args)
--- {
--- ${0}
--- return 0;
--- }
--- }
--- snippet svm
--- ${1:public} static void Main(string[] args)
--- {
--- ${0}
--- }
--- ]]
-
-local testfile = [[
-# I'll most propably add more stuff in here like
-# * List/Array constructio
-# * Mostly used generics
-# * Linq
-# * Funcs, Actions, Predicates
-# * Lambda
-# * Events
-#
-# Feedback is welcome!
-#
-# Main
-snippet sim
- ${1:public} static int Main(string[] args)
- {
- ${0}
- return 0;
- }
-snippet simc
- public class Application
- {
- ${1:public} static int Main(string[] args)
- {
- ${0}
- return 0;
- }
- }
-snippet svm
- ${1:public} static void Main(string[] args)
- {
- ${0}
- }
-# if condition
-snippet if
- if (${1:true})
- {
- ${0:${VISUAL}}
- }
-snippet el
- else
- {
- ${0:${VISUAL}}
- }
-]]
-
---------------------------------------------------------------------------------
--- Test
-
-local function print_table(tableau, tabwidth)
- if tabwidth == nil then
- tabwidth = 0
- end
-
- -- Iterate
- for k, v in pairs(tableau) do
- local tabs = ("\t"):rep(tabwidth)
-
- print(tabs .. k .. ':"' .. tostring(v) .. '"')
- if type(v) == "table" then
- print_table(v, tabwidth + 1)
- end
- end
-end
-
---print("------------ header ------------------------------------")
---p = lpeg.Ct(tsnippetdecl)
---t = p:match([[
---snippet classy
---]])
---print_table(t)
---print("--------------------------------------------------------------")
-
---print("------------ tag ------------------------------------")
---print_table(
--- lpeg.Ct(ttag):match('${0:VISUAL}')
---)
---print_table(
--- lpeg.Ct(ttag):match('${12:Badonkadong}')
---)
---print_table(
--- lpeg.Ct(ttag):match('${1}')
---)
---print("--------------------------------------------------------------")
-
---print("------------ single snippet test ------------------------------------")
---print_table(lpeg.Ct(tsnippet):match(testsingle))
---print("--------------------------------------------------------------")
-
---print("------------ multi snippet test ------------------------------------")
---print_table(lpeg.Ct(tsnippetsfile):match(testmulti))
---print("--------------------------------------------------------------")
-
-print("------------ file with comments -------------------------------------")
-print_table(tsnippetsfile:match(testfile))
-print("--------------------------------------------------------------")
diff --git a/config/essentials/vis/vis-ultisnips/testlpeg-ultisnips.lua b/config/essentials/vis/vis-ultisnips/testlpeg-ultisnips.lua
deleted file mode 100644
index 79df900..0000000
--- a/config/essentials/vis/vis-ultisnips/testlpeg-ultisnips.lua
+++ /dev/null
@@ -1,230 +0,0 @@
-local lpeg = require("lpeg")
-
---------------------------------------------------------------------------------
-
-local tsep = lpeg.S(" ")
-local tws = tsep ^ 1
-local tnewline = lpeg.S("\n")
-local tlowcasedword = lpeg.R("az") ^ 1
-local tdigit = lpeg.locale()["digit"]
--- local talphanum = lpeg.locale()['alnum']
-local tanyprintable = lpeg.locale()["print"]
-local tcontrol = lpeg.locale()["cntrl"]
-local function quoted(p)
- return lpeg.S('"') * p * lpeg.S('"')
-end
-local function anythingbut(ch)
- return (tanyprintable + tcontrol) - lpeg.S(ch)
-end
-
-local ttabtriggercomplex = quoted(tlowcasedword * lpeg.S("()[]?0123456789-") ^ 1)
--- TODO This is just retarded
-local ttabtriggerweird = lpeg.S("!") * (lpeg.R("az") + lpeg.S("?()")) ^ 1 * lpeg.S("!")
-local ttabtriggerweird2 = lpeg.P("#!")
-local ttabtrigger = ttabtriggercomplex + ttabtriggerweird + ttabtriggerweird2 + tlowcasedword
-local tdescription = quoted(lpeg.Cg((tanyprintable - lpeg.S('"')) ^ 1, "description"))
-local toption = lpeg.R("az")
-
-local tstartsnippet = lpeg.P("snippet")
- * tws
- * lpeg.Cg(ttabtrigger, "tabtrigger")
- * tws
- * tdescription
- * tws ^ 0
- * lpeg.Cg(toption ^ 0, "options")
-local tendsnippet = lpeg.P("endsnippet")
-
--- The content parsing needs cleanup, its really convoluted due to me learning
--- lpeg while using it
---tcontent = ((tanyprintable + tcontrol)^1 - tendsnippet) * tnewline
-local tcontent = ((lpeg.S(" \t") + tanyprintable) ^ 1 - tendsnippet) * tnewline
-local tsnippet = tstartsnippet * tnewline * ((tendsnippet * tnewline) + lpeg.Cg(tcontent ^ 1, "content"))
-
-local tcomment = lpeg.S("#") * tanyprintable ^ 0 * tnewline
-local tpriority = lpeg.P("priority") * tws * lpeg.Cg(lpeg.S("-") ^ 0 * tdigit ^ 1, "priority")
-
--- TODO doesn't work
-local tsnippetsfile = (lpeg.Ct(tsnippet) + tpriority + tcomment + tnewline) ^ 1
-
--- TODO does parse values correctly, but parsing out nested tags will
--- require recursion at the callsite since I have no clue how to do it
-local ttag = {
- "T",
- Expr = lpeg.C((lpeg.V("T") + anythingbut("}")) ^ 1),
- Tnum = lpeg.Cg(tdigit ^ 1, "tagnum"),
- Ps = lpeg.Cg(lpeg.Cp(), "selstart"),
- Pe = lpeg.Cg(lpeg.Cp(), "selend"),
- Tc = lpeg.V("Ps")
- * lpeg.P("${")
- * lpeg.V("Tnum")
- * lpeg.S(":")
- * lpeg.Cg(lpeg.V("Expr"), "expr")
- * lpeg.V("Pe")
- * lpeg.S("}"),
- Ts = lpeg.V("Ps") * lpeg.S("$") * lpeg.V("Pe") * lpeg.V("Tnum"),
- T = lpeg.V("Tc") + lpeg.V("Ts"),
-}
-
---------------------------------------------------------------------------------
-
--- local testheader = [[
--- snippet #! "#!/usr/bin/env lua" b
--- ]]
-
-local testcontent = [[
-for ${1:idx},${2:val} in ipairs(${3:table_name}) do
- $0
-end
-]]
-
-local testsnippet = [[
-snippet fori "ipair for foop" b
-for ${1:idx},${2:val} in ipairs(${3:table_name}) do
- $0
-end
-endsnippet
-]]
-
-local luasnippetfile = [[
-priority -50
-
-#################################
-# Snippets for the Lua language #
-#################################
-snippet #! "#!/usr/bin/env lua" b
-#!/usr/bin/env lua
-$0
-endsnippet
-
-snippet !fun(ction)?! "New function" br
-local function ${1:new_function}(${2:args})
- $0
-end
-endsnippet
-
-snippet forp "pair for loop" b
-for ${1:name},${2:val} in pairs(${3:table_name}) do
- $0
-end
-endsnippet
-
-snippet fori "ipair for foop" b
-for ${1:idx},${2:val} in ipairs(${3:table_name}) do
- $0
-end
-endsnippet
-
-snippet for "numeric for loop" b
-for ${1:i}=${2:first},${3:last}${4/^..*/(?0:,:)/}${4:step} do
- $0
-end
-endsnippet
-
-snippet do "do block"
-do
- $0
-end
-endsnippet
-
-snippet repeat "repeat loop" b
-repeat
- $1
-until $0
-endsnippet
-
-snippet while "while loop" b
-while $1 do
- $0
-end
-endsnippet
-
-snippet if "if statement" b
-if $1 then
- $0
-end
-endsnippet
-
-snippet ife "if/else statement" b
-if $1 then
- $2
-else
- $0
-end
-endsnippet
-
-snippet eif "if/elseif statement" b
-if $1 then
- $2
-elseif $3 then
- $0
-end
-endsnippet
-
-snippet eife "if/elseif/else statement" b
-if $1 then
- $2
-elseif $3 then
- $4
-else
- $0
-end
-endsnippet
-
-snippet pcall "pcall statement" b
-local ok, err = pcall(${1:your_function})
-if not ok then
- handler(${2:ok, err})
-${3:else
- success(${4:ok, err})
-}end
-endsnippet
-
-snippet local "local x = 1"
-local ${1:x} = ${0:1}
-endsnippet
-
-# vim:ft=snippets:
-]]
-
---------------------------------------------------------------------------------
--- Test
-
-local function print_table(tableau, tabwidth)
- if tabwidth == nil then
- tabwidth = 0
- end
-
- -- Iterate
- for k, v in pairs(tableau) do
- local tabs = ("\t"):rep(tabwidth)
-
- print(tabs .. k .. ': "' .. tostring(v) .. '"')
- if type(v) == "table" then
- print_table(v, tabwidth + 1)
- end
- end
-end
-
-do
- print("------------ snippet test ------------------------------------")
- local p = lpeg.Ct(tsnippet)
- local t = p:match(testsnippet)
- print_table(t)
- print("--------------------------------------------------------------")
-end
-
-do
- print("------------ snippetfile test ------------------------------------")
- local p = lpeg.Ct(tsnippetsfile)
- local t = p:match(luasnippetfile)
- print_table(t)
- print("--------------------------------------------------------------")
-end
-
-do
- print("------------ tags test -------------------------------------")
- local p = lpeg.Ct((lpeg.Ct(ttag) + tanyprintable + tcontrol) ^ 1)
- local t = p:match(testcontent)
- print_table(t)
- print("--------------------------------------------------------------")
-end
diff --git a/config/essentials/vis/vis-ultisnips/ultisnips-parser.lua b/config/essentials/vis/vis-ultisnips/ultisnips-parser.lua
deleted file mode 100644
index a4240b8..0000000
--- a/config/essentials/vis/vis-ultisnips/ultisnips-parser.lua
+++ /dev/null
@@ -1,211 +0,0 @@
---------------------------------------------------------------------------------
--- Module table
-
-local M = {}
-
-local lpeg = require('lpeg')
-
-
-
---------------------------------------------------------------------------------
--- lpeg rules
-
-local tsep = lpeg.S' \t'
-local tws = tsep ^ 1
-local tnewline = lpeg.S'\n'
-local tlowcasedword = lpeg.R'az' ^ 1
-local tdigit = lpeg.locale()['digit']
--- local talphanum = lpeg.locale()['alnum']
-local tanyprintable = lpeg.locale()['print']
-local tcontrol = lpeg.locale()['cntrl']
-local function surrounded(ch, p) return lpeg.S(ch) * p * lpeg.S(ch) end
-local function anythingbut(ch) return (tanyprintable + tcontrol) - lpeg.S(ch) end
-
-local ttabtriggercomplex = surrounded ('"',
- tlowcasedword * lpeg.S'()[]?0123456789-'^1
- )
--- TODO This is just retarded
--- Check the actual grammar and see what special starting chars are
--- then relax the grammar a bit
-local ttabtriggerweird = surrounded('!',
- (lpeg.R'az' + lpeg.S'?()') ^ 1
- )
-local ttabtriggerweird2 = lpeg.P'#!'
-local ttabtriggerweird3 = surrounded('/',
- (anythingbut'/') ^1
- )
-local ttabtrigger = ttabtriggercomplex
- + ttabtriggerweird
- + ttabtriggerweird2
- + ttabtriggerweird3
- + (tlowcasedword + lpeg.S'.')
-local tdescription = surrounded ('"',
- lpeg.Cg( (tanyprintable - lpeg.S'"')^1, 'description')
- )
-local toption = lpeg.R'az'
-
-local tstartsnippet = lpeg.P'snippet'
- * tws
- * lpeg.Cg(ttabtrigger, 'tabtrigger')
- * tws
- * tdescription
- * tws ^ 0
- * lpeg.Cg(toption^0, 'options')
-local tendsnippet = lpeg.P'endsnippet'
-
--- The content parsing needs cleanup, its really convoluted due to me learning
--- lpeg while using it
---tcontent = ((tanyprintable + tcontrol)^1 - tendsnippet) * tnewline
-local tcontent = ((lpeg.S' \t' + tanyprintable)^1 - tendsnippet)
- * tnewline
-local tsnippet = tstartsnippet
- * tnewline
- * ((tendsnippet * tnewline) + lpeg.Cg(tcontent ^ 1, 'content'))
-
--- local tcomment = lpeg.S'#'
--- * tanyprintable^0
--- * tnewline
--- local tpriority = lpeg.P'priority'
--- * tws
--- * lpeg.Cg(lpeg.S('-')^0 * tdigit^1, 'priority')
-
--- TODO doesn't work
--- local tsnippetsfile = (lpeg.Ct(tsnippet) + tpriority + tcomment + tnewline) ^ 1
-
-
--- TODO does parse values correctly, but parsing out nested tags will
--- require recursion at the callsite since I have no clue how to do it
-local ttag = { 'T'
- ; Expr = lpeg.C((lpeg.V'T' + ((tanyprintable + tcontrol) - lpeg.S'}'))^1)
- , Tnum = lpeg.Cg(tdigit ^ 1, 'tagnum')
- , Ps = lpeg.Cg(lpeg.Cp(), 'selstart')
- , Pe = lpeg.Cg(lpeg.Cp(), 'selend')
- , Tc = lpeg.V'Ps'
- * lpeg.P'${'
- * lpeg.V'Tnum'
- * lpeg.S(':')
- * lpeg.Cg(lpeg.V'Expr', 'expr')
- * lpeg.V'Pe'
- * lpeg.S'}'
- , Ts = lpeg.V'Ps' * lpeg.S'$' * lpeg.V'Pe' * lpeg.V'Tnum'
- , T = lpeg.V'Tc' + lpeg.V'Ts'
- }
-
-
-
---------------------------------------------------------------------------------
--- Functions
-
--- Parses the snippet's content to create a table we later use
--- to corrently insert the text, the selections, and the default values
-local function create_content(str)
- local content = {}
- content.str = str
- content.tags = {}
-
- local p = vis.lpeg.Ct((lpeg.Ct(ttag) + tanyprintable + tcontrol) ^ 1)
- local m = p:match(str)
-
- local s = 1 -- We start from 1 to adjust position from $^0 to ^$0
- for k,v in ipairs(m) do
- content.tags[k] = v
- -- TODO recurse over tag.expr to extract nested tags
- -- Of course this will actually have to be used later on, depending
- -- on whether the tag is added or not
-
- -- We need to keep track of how much we remove, and readjust all
- -- subsequent selection points
- -- Note to self, I hate all this bookkeeping
- local tagtext = string.sub(str, v.selstart, v.selend)
- if v.expr ~= nil then
- content.str = string.gsub(content.str, tagtext, v.expr)
- content.tags[k].selstart = content.tags[k].selstart - s
- content.tags[k].selend = content.tags[k].selstart + #v.expr
- s = s + #'${' + #tostring(k) + #':' + 1
- else
- content.str = string.gsub(content.str, tagtext, '')
- content.tags[k].selstart = content.tags[k].selstart - s
- content.tags[k].selend = content.tags[k].selstart
- s = s + #'$' + 1
- end
- end
-
- return content
-end
-
-
-
--- Takes a line starting with 'snippet' and a lines iterator, and creates
--- a 'snippet' table to be used
--- If it fails it returns nil, otherwise returns two values, a tabtrigger
--- and a snippet
-local function create_snippet(start_line, linesit)
- local snippetstr = start_line .. '\n'
- -- Read content into list of lines until we hit `endsnippet`
- for line in linesit do
- local s, _ = string.find(line, 'endsnippet')
- if s == 1 then
- snippetstr = snippetstr .. 'endsnippet' .. '\n'
- break
- else
- snippetstr = snippetstr .. line .. '\n'
- end
- end
-
- local p = vis.lpeg.Ct(tsnippet)
- local m = p:match(snippetstr)
-
- if not m then
- -- Enable this when debugging, otherwise it nukes whole app
- vis:info('Failed to parse some snippets!')
- -- vis:message('Failed to parse snippet: ' .. snippetstr)
- return nil
- else
- local tabtrigger = m.tabtrigger
- local snippet = {}
- snippet.description = m.description
- snippet.options = m.options
- snippet.content = create_content(m.content)
- return tabtrigger, snippet
- end
-end
-
-
-
--- Loads all snippets from passed '.snippets' file. Should probably be
--- triggered when new file is loaded or when syntax is set/changed
-M.load_snippets = function(snippetfile)
- local snippets = {}
-
- local f = io.open(snippetfile, 'r')
- if f then
- io.input(f)
- local linesit = io.lines()
-
- for line in linesit do
- -- TODO read whole file, then apply lpeg grammar that parses all
- -- snippets out rather than being pedestrian about it like this
- local s, _ = string.find(line, 'snippet')
- -- Find lines that start with 'snippet' and enter
- -- snippet reading loop
- if s == 1 then
- local tabtrigger, snippet = create_snippet(line, linesit)
- if tabtrigger then
- snippets[tabtrigger] = snippet
- end
- end
- end
-
- io.close(f)
- return snippets, true
- else
- return snippets, false
- end
-end
-
-
-
---------------------------------------------------------------------------------
--- End module
-
-return M \ No newline at end of file
diff --git a/config/essentials/vis/visrc.lua b/config/essentials/vis/visrc.lua
deleted file mode 100644
index 30e4946..0000000
--- a/config/essentials/vis/visrc.lua
+++ /dev/null
@@ -1,188 +0,0 @@
-------------------------------------
---- REQUIRES
-------------------------------------
-require("vis")
-
--- plugins
-require("build")
--- use Trash directory instead, remove set_dir function
-require("backup")
-require("cursors")
-require("ctags")
-require("title")
-require("commentary")
-require("complete-line")
--- set height to 40%
-require("fzf-open")
-require("vis-ultisnips")
--- TODO: doesn't work when using with 'e|b'
--- require("yank-highlight")
-
--- save position before formatting, use vis:redraw
-local format = require("format")
-
--- set height to 40%
-local fzfmru = require("fzf-mru")
-fzfmru.fzfmru_path = 'grep "^' .. io.popen("pwd"):read("*a"):gsub("\n$", "") .. '" | fzf'
-
--- todo:
--- c-scope
--- c-tags
--- ...
--- vis-goto, favor open-file-under-cursor
--- ...
--- ultisnips
--- ...
--- vis-yank-highlight
-
-------------------------------------
---- VARIABLES
-------------------------------------
-local m = vis.modes
-
-------------------------------------
---- FUNCTIONS
-------------------------------------
-
-local function map_cmd(mode, map, command, help)
- vis:map(mode, map, function()
- vis:command(command)
- end, help)
-end
-
--- Store and pop position with command ran in between
-local function wrap_pos_restore(f, ...)
- local pos = vis.win.selection.pos
- f(...)
- vis.win.selection.pos = pos
-end
-
-local function map_keys(mode, map, keys, help)
- vis:map(mode, map, function()
- vis:feedkeys(keys)
- end, help)
-end
-
-------------------------------------
---- COMMANDS
------------------------------------
-
-vis:command_register("make", function()
- vis:command("!make; head -n 1")
-end, "make")
-vis:command_register("Q", function()
- vis:command("qa!")
-end, "Quit all")
-vis:command_register("delws", function()
- vis:command(",x/[ \t]+$|^[ \t]+$/d")
-end, "Remove trailing whitespace")
-vis:command_register("redraw", function() vis:redraw() end, "Redraw UI")
-
--------------------------------------
---- MAPPINGS
--------------------------------------
-
-vis.events.subscribe(vis.events.WIN_OPEN, function(win) -- luacheck: no unused args
- map_cmd(m.NORMAL, " pf", "fzf", "Open file with fzf")
- map_cmd(m.NORMAL, " pr", "fzfmru", "Open file with fzf")
-
- vis:map(m.NORMAL, " r", function()
- wrap_pos_restore(vis.command, vis, "e $vis_filepath")
- end, "Reload active file")
- vis:map(m.NORMAL, "=", format.apply, "Format active file")
- map_cmd(m.NORMAL, "<M-m>", "make", "Run 'make'")
- map_cmd(m.NORMAL, " c", "e ~/.config/vis/visrc.lua", "Edit config file")
- map_cmd(m.NORMAL, " q", "q!", "Quit (force)")
- map_cmd(m.NORMAL, " s", "!doas vis $vis_filepath", "Edit as superuser")
- map_cmd(m.NORMAL, " w", "w", "Write")
- map_cmd(m.NORMAL, " x", "!chmod u+x $vis_filepath", "Make active file executable")
- map_cmd(m.NORMAL, "!", "!bash", "Run bash")
- map_keys(m.NORMAL, " y", '"+y', "Copy to system clipboard")
- map_keys(m.VISUAL, " y", '"+y', "Copy to system clipboard")
- map_keys(m.NORMAL, " nl", ":<seq -f '%0.0f. ' 1 ", "Insert numbered list")
- map_keys(m.NORMAL, "<M-S-Down>", "ddp", "Move line down")
- map_keys(m.NORMAL, "<M-S-Up>", "ddkP", "Move line up") -- Doesn't work at end of file
-end)
-
-------------------------------------
---- EVENTS
-------------------------------------
-
-vis.events.subscribe(vis.events.INIT, function()
- vis.options.ignorecase = true
- vis.options.autoindent = true
- vis.options.shell = "/bin/sh"
- local theme = "nord"
- vis:command("set theme " .. theme)
-end)
-
-vis.events.subscribe(vis.events.WIN_OPEN, function(win) -- luacheck: no unused args
- -- automatically cd in parent dir of file
- vis:command_register("cdp", function()
- if win and win.file and win.file.path then
- local dir = win.file.path:match(".*/")
- vis:info("cd " .. tostring(dir))
- end
- end, "Cd to parent dir of file")
-
- win.options.relativenumbers = true
-
- if win.syntax then
- vis:info(win.syntax)
- end
-
- -- FILETYPE OPTIONS
- if win.syntax == "ansi_c" then
- map_keys(m.NORMAL, "\\a", "f,a <Escape>hdw<S-Tab>i<Tab><Escape>", "Align table")
- end
-
- if win.syntax == "bash" then
- vis:command_register("curl", function()
- vis:command("x/ -H/ c/\\\n\t-H/")
- end, "Split curl command on multiple lines")
- map_keys(
- m.NORMAL,
- "\\p",
- "V:x/^(\\s*)(.+)$/ c/\\1>\\&2 printf '\\2: %s\\\\n' \"$\\2\"/<Enter><Escape>",
- "Print variable"
- )
- map_keys(m.NORMAL, "\\v", 'V:x/^(\\s*)(.+)$/ c/\\1"$(\\2)"/<Enter><Escape>', "Surround in variable")
- map_keys(m.NORMAL, "\\|", "V:x/\\| / c/|\n\t/<Enter><Escape>", "Wrap one-line multi pipe command")
- map_keys(
- m.NORMAL,
- "\\e",
- 'V:x/^(\\s*)(.+)$/ c/\\1[ "$\\2" ] || exit 1/<Enter><Escape>',
- "Condition exit if empty"
- )
- map_cmd(m.NORMAL, "\\sc", "-/\\<case\\>/,/\\<esac\\>/", "Expand to case")
- map_cmd(m.NORMAL, "\\sw", "-/\\<while/,/\\<done\\>/", "Expand to while")
- map_cmd(m.NORMAL, "\\sf", "-/\\<for\\>/,/\\<done\\>/", "Expand to for")
- map_cmd(m.NORMAL, "\\si", "-/\\<if\\>/,/\\<fi\\>/", "Expand to if")
- end
-
- if win.syntax == "go" then
- require("vis-go")
- end
-
- if win.syntax == "lua" then
- require("vis-lua")
- end
-
- if win.syntax == "markdown" then
- win.options.tabwidth = 2
- win.options.expandtab = true
- vis:map(m.NORMAL, "\\h", function()
- vis:command("!lowdown $vis_filepath > ${vis_filepath%.md}.html")
- vis:info("exported.")
- end, "Export markdown to html")
- map_cmd(m.NORMAL, "\\sl", "-+x/(\\d+|[-*])\\s+.+\n/", "Expand to list item")
- map_cmd(m.NORMAL, "\\sh", "-/^#+/,/^#+/-", "Expand to header")
- -- select header block by name
- -- ,x/^# Planning\n([^#]|\n)+
- end
-
- if win.syntax == "yaml" then
- win.options.tabwidth = 2
- win.options.expandtab = true
- end
-end)
diff --git a/config/essentials/vis/yank-highlight.lua b/config/essentials/vis/yank-highlight.lua
deleted file mode 100644
index 37a9578..0000000
--- a/config/essentials/vis/yank-highlight.lua
+++ /dev/null
@@ -1,37 +0,0 @@
-require("vis")
-
-local M = {
- style = "reverse", -- Style used for highlighting
- duration = 0.2, -- [s] Time to remain highlighted (10 ms precision)
-}
-
-vis.events.subscribe(vis.events.INIT, function()
- local yank = vis:action_register("highlighted-yank", function()
- vis.win:style_define(vis.win.STYLE_SELECTION, M.style)
- vis:redraw()
- local tstamp = os.clock()
- while os.clock() - tstamp < M.duration do end
- vis.win:style_define(vis.win.STYLE_SELECTION, vis.lexers.STYLE_SELECTION)
- vis:redraw()
- vis:feedkeys("<vis-operator-yank>")
- end, "Yank operator with highlighting")
- vis:map(vis.modes.OPERATOR_PENDING, "y", yank)
- vis:map(vis.modes.VISUAL, "y", yank)
- vis:map(vis.modes.VISUAL_LINE, "y", yank)
-
- vis:map(vis.modes.NORMAL, "y", function(keys)
- local sel_end_chrs = "$%^{}()wp"
- if #keys < 1 or sel_end_chrs:find(keys:sub(-1), 1, true) == nil then
- if keys:find("<Escape>") then
- return #keys
- end
- return -1
- end
- vis:feedkeys("<vis-mode-visual-charwise>")
- vis:feedkeys(keys)
- vis:feedkeys("y<Escape>")
- return #keys
- end)
-end)
-
-return M