aboutsummaryrefslogtreecommitdiff
path: root/.config/vis/plugins/vis-modal/init.lua
diff options
context:
space:
mode:
authordacctal <dacctal@symlinx.net>2026-05-05 22:17:34 +0000
committerdacctal <dacctal@symlinx.net>2026-05-05 22:17:34 +0000
commit4023c888138f05a1d7829605b7b884144fece662 (patch)
treee1610c887a9700643a61c9ea8b1d248cd9d7dbfd /.config/vis/plugins/vis-modal/init.lua
parentd33d907f53c50d323eca75c4bfc02ab5b989b30a (diff)
updated config for modal
Diffstat (limited to '.config/vis/plugins/vis-modal/init.lua')
-rw-r--r--.config/vis/plugins/vis-modal/init.lua99
1 files changed, 99 insertions, 0 deletions
diff --git a/.config/vis/plugins/vis-modal/init.lua b/.config/vis/plugins/vis-modal/init.lua
new file mode 100644
index 0000000..38b1424
--- /dev/null
+++ b/.config/vis/plugins/vis-modal/init.lua
@@ -0,0 +1,99 @@
+--[[
+
+ modal
+ the status line colorizer for vis
+
+]]
+
+require('vis')
+
+local M = {}
+
+local MODAL_STYLE = 51
+local MODAL_STYLE_INVERTED = 52
+
+local MODES = {
+ [vis.modes.NORMAL] = ' NORMAL ',
+ [vis.modes.INSERT] = ' INSERT ',
+ [vis.modes.VISUAL] = ' VISUAL ',
+ [vis.modes.REPLACE] = ' REPLACE ',
+ [vis.modes.VISUAL_LINE] = ' VISUAL_LINE ',
+ [vis.modes.OPERATOR_PENDING] = ' OPERATOR_PENDING ',
+}
+M.MODES = MODES
+
+
+local STYLES = {
+ [vis.modes.NORMAL] = {
+ REGULAR = 'fore:default,back:yellow',
+ INVERTED = 'fore:yellow,back:black',
+ },
+ [vis.modes.INSERT] = {
+ REGULAR = 'fore:default,back:green',
+ INVERTED = 'fore:green,back:black',
+ },
+ [vis.modes.VISUAL] = {
+ REGULAR = 'fore:default,back:magenta',
+ INVERTED = 'fore:magenta,back:black',
+ },
+ [vis.modes.REPLACE] = {
+ REGULAR = 'fore:default,back:blue',
+ INVERTED = 'fore:blue,back:black',
+ },
+ [vis.modes.VISUAL_LINE] = {
+ REGULAR = 'fore:default,back:magenta',
+ INVERTED = 'fore:magenta,back:black',
+ },
+ [vis.modes.OPERATOR_PENDING] = {
+ REGULAR = 'fore:default,back:blue',
+ INVERTED = 'fore:blue,back:black',
+ },
+ UNFOCUSED = {
+ REGULAR = 'fore:default,back:white',
+ INVERTED = 'fore:white,back:black',
+ },
+}
+M.STYLES = STYLES
+
+vis.events.subscribe(vis.events.WIN_STATUS, function(win)
+ local modified = ''
+ if win.file.modified then modified = ' *' end
+ local filename = ' [NO NAME]'..modified..' '
+ if win.file.name then filename = ' '..win.file.name..modified..' ' end
+ local vmode = MODES[vis.mode]
+ local recording = ''
+ if vis.recording then
+ recording = ' @ RECORDING'
+ end
+ status_left = vmode..filename..recording
+
+ cursors = 0
+ for _ in win:selections_iterator() do cursors = cursors+1 end
+ selection_size = "SELECTION_SIZE: "..
+ win.selection.range.finish - win.selection.range.start
+ cursor_amount = "CURSORS: "..cursors
+ cursor_pos = win.selection.line..":"..win.selection.col
+ status_right = selection_size.." | "..cursor_amount.." | "..cursor_pos
+
+ win:status(status_left, status_right)
+
+ for win in vis:windows() do
+ if win == vis.win then
+ win:style_define(MODAL_STYLE, STYLES[vis.mode].REGULAR)
+ win:style_define(MODAL_STYLE_INVERTED, STYLES[vis.mode].INVERTED)
+ else
+ win:style_define(MODAL_STYLE, STYLES.UNFOCUSED.REGULAR)
+ win:style_define(MODAL_STYLE_INVERTED, STYLES.UNFOCUSED.INVERTED)
+ end
+ end
+
+ for i=0,win.width do
+ win:style_pos(MODAL_STYLE, i, win.height - 1)
+ end
+ for i=string.len(vmode),string.len(vmode)+string.len(filename)-1 do
+ win:style_pos(MODAL_STYLE_INVERTED, i, win.height - 1)
+ end
+end)
+
+
+return M