From b2800904b8cb8269c0e750dced51e8dc422af8f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 4 May 2016 17:42:18 +0200 Subject: vis-lua: reload all lexers after theme change Close #221 --- lexers/lexer.lua | 6 +++--- vis.lua | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lexers/lexer.lua b/lexers/lexer.lua index 992d690..345dabe 100644 --- 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 index 1ca1e37..bde564f 100644 --- 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 + -- cgit v1.2.3