Vis bindings (need description)

This commit is contained in:
Out Of Ideas 2024-04-29 22:14:32 -05:00
parent 73eb6513a4
commit 6437d8875a
2 changed files with 486 additions and 1 deletions

View File

@ -0,0 +1,278 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow Night</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#1D1F21</string>
<key>caret</key>
<string>#AEAFAD</string>
<key>foreground</key>
<string>#C5C8C6</string>
<key>invisibles</key>
<string>#4B4E55</string>
<key>lineHighlight</key>
<string>#282A2E</string>
<key>selection</key>
<string>#373B41</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment, string.quoted.double.block.python</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED1CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Regular Expression, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC6666</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#DE935F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F0C674</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B5BD68</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ABEB7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#81A2BE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B294BB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DF5F5F</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#82A3BF</string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B798BF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff foreground</string>
<key>scope</key>
<string>markup.inserted.diff, markup.deleted.diff, meta.diff.header.to-file, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff insertion</string>
<key>scope</key>
<string>markup.inserted.diff, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#718c00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff deletion</string>
<key>scope</key>
<string>markup.deleted.diff, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#c82829</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff header</string>
<key>scope</key>
<string>meta.diff.header.from-file, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
<key>background</key>
<string>#4271ae</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff range</string>
<key>scope</key>
<string>meta.diff.range</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#3e999f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#967EFB</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>F96223EB-1A60-4617-92F3-D24D4F13DB09</string>
</dict>
</plist>

View File

@ -5,11 +5,218 @@ require('plugins/vis-shebang')
vis.events.subscribe(vis.events.INIT, function()
-- Your global configuration options
-- Dvorak-friendly Remappings
-- key unmapppings
vis:unmap(vis.modes.NORMAL, "<M-C-j>")
vis:unmap(vis.modes.NORMAL, "<M-C-k")
vis:unmap(vis.modes.NORMAL, "<C-w>j")
vis:unmap(vis.modes.NORMAL, "gj")
vis:unmap(vis.modes.NORMAL, "gJ")
vis:unmap(vis.modes.OPERATOR_PENDING, "j")
vis:unmap(vis.modes.OPERATOR_PENDING, "il")
vis:unmap(vis.modes.OPERATOR_PENDING, "al")
vis:unmap(vis.modes.OPERATOR_PENDING, "gj")
vis:unmap(vis.modes.VISUAL, "<C-j>")
vis:unmap(vis.modes.VISUAL, "il")
vis:unmap(vis.modes.VISUAL, "al")
vis:unmap(vis.modes.VISUAL, "gj")
vis:unmap(vis.modes.NORMAL, "gJ")
-- key mappings -- followed by bind it replaces
vis:map(vis.modes.NORMAL, "d", "<vis-motion-char-prev>") -- h
vis:map(vis.modes.NORMAL, "h", "<vis-motion-line-down>") -- j
vis:map(vis.modes.NORMAL, "t", "<vis-motion-line-up>") -- k
vis:map(vis.modes.NORMAL, "n", "<vis-motion-char-next>") -- l
vis:map(vis.modes.NORMAL, "D", "<vis-motion-window-line-top>") -- H
vis:map(vis.modes.NORMAL, "H", "<vis-join-lines>") -- J
vis:map(vis.modes.NORMAL, "N", "<vis-motion-window-line-bottom>") -- L
vis:map(vis.modes.NORMAL, "l", "<vis-motion-search-repeat>") -- n
vis:map(vis.modes.NORMAL, "L", "<vis-motion-search-repeat-backward>") -- N
vis:map(vis.modes.NORMAL, "k", "<vis-operator-delete>") -- d
vis:map(vis.modes.NORMAL, "K", "k$") -- D, d$
vis:map(vis.modes.NORMAL, "<M-C-h>", "<vis-new-selection-lines-below-last>") -- <M-C-j>
vis:map(vis.modes.NORMAL, "<M-C-t>", "<vis-new-selection-lines-above-first>") -- <M-C-k>
vis:map(vis.modes.NORMAL, "<C-w>d", "<C-w>t") -- <C-w>h, <C-w>k
vis:map(vis.modes.NORMAL, "<C-w>h", "<vis-window-next>") -- <C-w>j
vis:map(vis.modes.NORMAL, "<C-w>t", "<vis-window-prev>") -- <C-w>k
vis:map(vis.modes.NORMAL, "<C-w>n", "<C-w>h") -- <C-w>l, <C-w>j
vis:map(vis.modes.NORMAL, "<C-w>l", ":open<Enter>") -- <C-w>n
vis:map(vis.modes.NORMAL, "<C-h>", "<new-selection-lines-below>") -- <C-j>
vis:map(vis.modes.NORMAL, "<C-t>", "<new-selection-lines-above>") -- <C-k>
vis:map(vis.modes.NORMAL, "<C-n>", "<vis-selections-remove-column-except>") -- <C-l>
vis:map(vis.modes.NORMAL, "<C-k>", "<vis-selection-next>") -- <C-d>
vis:map(vis.modes.NORMAL, "<C-l>", "viw") -- <C-n>
vis:map(vis.modes.NORMAL, "+", "h^") -- +, j^
vis:map(vis.modes.NORMAL, "-", "t^") -- -, k^
vis:map(vis.modes.NORMAL, "X", "kd") -- X, dh
vis:map(vis.modes.NORMAL, "s", "cn") -- s, cl
vis:map(vis.modes.NORMAL, "gD", "<vis-motion-byte-left>") -- gH
vis:map(vis.modes.NORMAL, "gH", "<vis-join-lines-trim>") -- gJ
vis:map(vis.modes.NORMAL, "gN", "<vis-motion-byte-right>") -- gL
vis:map(vis.modes.NORMAL, "gL", "vgL") -- gN, vgN
vis:map(vis.modes.NORMAL, "gd", "<vis-motion-codepoint-prev>") -- gh
vis:map(vis.modes.NORMAL, "gh", "<vis-motion-screenline-down>") -- gj
vis:map(vis.modes.NORMAL, "gt", "<vis-motion-screenline-up>") -- gk
vis:map(vis.modes.NORMAL, "gn", "<vis-motion-codepoint-next>") -- gl
vis:map(vis.modes.NORMAL, "gl", "vgl") -- gn, vgn
vis:map(vis.modes.NORMAL, "j", "vis-motion-till-line-right") -- t
vis:map(vis.modes.NORMAL, "J", "vis-motion-till-line-left") -- T
vis:map(vis.modes.OPERATOR_PENDING, "k", "<vis-operator-delete>") -- d
vis:map(vis.modes.OPERATOR_PENDING, "d", "<vis-motion-char-prev>") -- h
vis:map(vis.modes.OPERATOR_PENDING, "h", "<vis-motion-line-down>") -- j
vis:map(vis.modes.OPERATOR_PENDING, "t", "<vis-motion-line-up>") -- k
vis:map(vis.modes.OPERATOR_PENDING, "n", "<vis-motion-char-next>") -- l
vis:map(vis.modes.OPERATOR_PENDING, "D", "<vis-motion-window-line-top>") -- H
vis:map(vis.modes.OPERATOR_PENDING, "N", "<vis-motion-window-line-bottom>") -- L
vis:map(vis.modes.OPERATOR_PENDING, "l", "<vis-motion-search-repeat>") -- n
vis:map(vis.modes.OPERATOR_PENDING, "L", "<vis-motion-search-repeat-backward>") -- N
vis:map(vis.modes.OPERATOR_PENDING, "in", "<vis-textobject-line-inner>") -- il
vis:map(vis.modes.OPERATOR_PENDING, "an", "<vis-textobject-line-outer>") -- al
vis:map(vis.modes.OPERATOR_PENDING, "+", "h^") -- +, j^
vis:map(vis.modes.OPERATOR_PENDING, "-", "t^") -- -, k^
vis:map(vis.modes.OPERATOR_PENDING, "gD", "<vis-motion-byte-left>") -- gH
vis:map(vis.modes.OPERATOR_PENDING, "gN", "<vis-motion-byte-right>") -- gL
vis:map(vis.modes.OPERATOR_PENDING, "gL", "<vis-textobject-search-backward>") -- gN
vis:map(vis.modes.OPERATOR_PENDING, "gd", "<vis-motion-codepoint-prev>") -- gh
vis:map(vis.modes.OPERATOR_PENDING, "gh", "<vis-motion-screenline-down>") -- gj
vis:map(vis.modes.OPERATOR_PENDING, "gt", "<vis-motion-screenline-up>") -- gk
vis:map(vis.modes.OPERATOR_PENDING, "gn", "<vis-motion-codepoint-next>") -- gl
vis:map(vis.modes.OPERATOR_PENDING, "gl", "<vis-textobject-search-forward>") -- gn
vis:map(vis.modes.OPERATOR_PENDING, "j", "vis-motion-till-line-right") -- t
vis:map(vis.modes.OPERATOR_PENDING, "J", "vis-motion-till-line-left") -- T
vis:map(vis.modes.VISUAL, "d", "<vis-motion-char-prev>") -- h
vis:map(vis.modes.VISUAL, "h", "<vis-motion-line-down>") -- j
vis:map(vis.modes.VISUAL, "t", "<vis-motion-line-up>") -- k
vis:map(vis.modes.VISUAL, "n", "<vis-motion-char-next>") -- l
vis:map(vis.modes.VISUAL, "D", "<vis-motion-window-line-top>") -- H
vis:map(vis.modes.VISUAL, "H", "<vis-join-lines>") -- J
vis:map(vis.modes.VISUAL, "N", "<vis-motion-window-line-bottom>") -- L
vis:map(vis.modes.VISUAL, "l", "<vis-motion-search-repeat>") -- n
vis:map(vis.modes.VISUAL, "L", "<vis-motion-search-repeat-backward>") -- N
vis:map(vis.modes.VISUAL, "k", "<vis-operator-delete>") -- d
vis:map(vis.modes.VISUAL, "<C-h>", "<C-k>") -- <C-j>, <C-d>
vis:map(vis.modes.VISUAL, "<C-t>", "<C-u>") -- <C-k>
vis:map(vis.modes.VISUAL, "<C-n>", "<vis-selections-remove-column-except>") -- <C-l>
vis:map(vis.modes.VISUAL, "<C-l>", "<vis-selection-new-match-next>") -- <C-n>
vis:map(vis.modes.VISUAL, "<C-k>", "<vis-selection-next>") -- <C-d>
vis:map(vis.modes.VISUAL, "in", "<vis-textobject-line-inner>") -- il
vis:map(vis.modes.VISUAL, "an", "<vis-textobject-line-outer>") -- al
vis:map(vis.modes.VISUAL, "x", "k") -- x, d
vis:map(vis.modes.VISUAL, "gD", "<vis-motion-byte-left>") -- gH
vis:map(vis.modes.VISUAL, "gH", "<vis-join-lines-trim>") -- gJ
vis:map(vis.modes.VISUAL, "gN", "<vis-motion-byte-right>") -- gL
vis:map(vis.modes.VISUAL, "gL", "<vis-textobject-search-backward>") -- gN
vis:map(vis.modes.VISUAL, "gd", "<vis-motion-codepoint-prev>") -- gh
vis:map(vis.modes.VISUAL, "gh", "<vis-motion-screenline-down>") -- gj
vis:map(vis.modes.VISUAL, "gt", "<vis-motion-screenline-up>") -- gk
vis:map(vis.modes.VISUAL, "gn", "<vis-motion-codepoint-next>") -- gl
vis:map(vis.modes.VISUAL, "gl", "<vis-textobject-search-forward>") -- gn
vis:map(vis.modes.VISUAL, "j", "vis-motion-till-line-right") -- t
vis:map(vis.modes.VISUAL, "J", "vis-motion-till-line-left") -- T
vis:map(vis.modes.INSERT, "<C-d>", "<Backspace>") -- <C-h>
vis:map(vis.modes.INSERT, "<C-h>", "<vis-insert-verbatim>u000a") -- <C-j>
vis:map(vis.modes.INSERT, "<C-t>", function(keys)
if #keys < 2 then
return -1 -- need more input
end
local file = io.popen(string.format("vis-digraph '%s' 2>&1", keys:gsub("'", "'\\''")))
local output = file:read('*all')
local success, msg, status = file:close()
if success then
if vis.mode == vis.modes.INSERT then
vis:insert(output)
elseif vis.mode == vis.modes.REPLACE then
vis:replace(output)
end
elseif msg == 'exit' then
if status == 2 then
return -1 -- prefix need more input
end
vis:info(output)
end
return #keys
end, "Insert digraph") -- <C-k>
vis:map(vis.modes.INSERT, "<C-k>", "<vis-operator-shift-left><vis-operator-shift-left>") -- <C-d>
vis:map(vis.modes.INSERT, "<C-l>", function()
local win = vis.win
local file = win.file
local pos = win.selection.pos
if not pos then return end
local range = file:text_object_word(pos > 0 and pos-1 or pos);
if not range then return end
if range.finish > pos then range.finish = pos end
if range.start == range.finish then return end
local prefix = file:content(range)
if not prefix then return end
vis:feedkeys("<vis-selections-save><Escape><Escape>")
-- collect words starting with prefix
vis:command("x/\\b" .. prefix .. "\\w+/")
local candidates = {}
for sel in win:selections_iterator() do
table.insert(candidates, file:content(sel.range))
end
vis:feedkeys("<Escape><Escape><vis-selections-restore>")
if #candidates == 1 and candidates[1] == "\n" then return end
candidates = table.concat(candidates, "\n")
local cmd = "printf '" .. candidates .. "' | sort -u | vis-menu"
local status, out, err = vis:pipe(cmd)
if status ~= 0 or not out then
if err then vis:info(err) end
return
end
out = out:sub(#prefix + 1, #out - 1)
file:insert(pos, out)
win.selection.pos = pos + #out
-- restore mode to what it was on entry
vis.mode = vis.modes.INSERT
end, "Complete word in file") -- <C-n>
vis:map(vis.modes.INSERT, "<C-j>", "<vis-operator-shift-right><vis-operator-shift-right>") -- <C-t>
-- Binds to remap
-- <M-C-j> -- Done
-- <M-C-k> -- Done
-- <C-w>h -- Done
-- <C-w>j -- Done
-- <C-w>k -- Done
-- <C-w>l -- Done
-- <C-w>n -- Done
-- <C-h> -- Done
-- <C-j> -- Done
-- <C-k> -- Done
-- <C-l> -- Done
-- <C-n> -- Done
-- <C-d> -- Done
-- gH gJ gK gL gh gj gk gl gN gn gD gd all modes -- Done
-- il -- all modes -- Done
-- al -- all modes -- Done
-- Operator Pending binds for n -- Done
-- Capitol letters for HJKLDN in all modes -- Done
-- All binds involving t
-- Unmap old binds -- Done
-- Add propor descpiptions
-- Comment and check
-- Replace arrows with actual <vis-motion*> -- Done
end)
vis.events.subscribe(vis.events.WIN_OPEN, function(win) -- luacheck: no unused args
-- Your per window configuration options e.g.
-- Your per window configuration options
vis:command('set theme base16-tomorrow-night')
vis:command('set number')
vis:command('set cursorline')
end)
shebangs = {
["#!/bin/sh"] = "bash",
["#!/bin/zsh"] = "bash"
}