vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 084d4c57bbe2d0ca97d82310f8be38777deac4d4 parent 6169eb12ebac5750a54e3a54692ad6007c708b65 Author: Marc André Tanner <mat@brain-dump.org> Date: Wed, 4 May 2016 17:42:18 +0200 vis-lua: reload all lexers after theme change Close #221 Diffstat:
| M | lexers/lexer.lua | | | 6 | +++--- |
| M | vis.lua | | | 16 | ++++++++++++++++ |
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/lexers/lexer.lua b/lexers/lexer.lua @@ -862,7 +862,7 @@ local lpeg_match = lpeg.match M.LEXERPATH = package.path -- Table of loaded lexers. -local lexers = {} +M.lexers = {} -- Keep track of the last parent lexer loaded. This lexer's rules are used for -- proxy lexers (those that load parent and child lexers to embed) that do not @@ -1002,7 +1002,7 @@ end -- @return lexer object -- @name load function M.load(name, alt_name) - if lexers[alt_name or name] then return lexers[alt_name or name] end + if M.lexers[alt_name or name] then return M.lexers[alt_name or name] end parent_lexer = nil -- reset -- When using Scintillua as a stand-alone module, the `property` and @@ -1069,7 +1069,7 @@ function M.load(name, alt_name) end lexer.lex, lexer.fold = M.lex, M.fold - lexers[alt_name or name] = lexer + M.lexers[alt_name or name] = lexer return lexer end diff --git a/vis.lua b/vis.lua @@ -201,3 +201,19 @@ vis.filetype_detect = function(win) win.syntax = nil end +vis.events.theme_change = function(name) + if name ~= nil then + local theme = 'themes/'..name + package.loaded[theme] = nil + require(theme) + end + + if vis.lexers ~= nil then + vis.lexers.lexers = {} + end + + for win in vis:windows() do + win.syntax = win.syntax; + end +end +