This'll patch vis.lexers.load to return nil when the lexer could not
be found. Previously it would've errored out -- which the load in
lexer.lua still will -- as this is used in lexers themselves.
Another possibility is to only patch set_syntax in vis.lua and the
WIN_HIGHLIGHT handler in vis-std.lua, but as most references to
vis.lexers.load already handle a nil return, this seems better.
---
lua/plugins/filetype.lua | 10 +---------lua/plugins/textobject-lexer.lua | 6 +++++-lua/vis.lua | 5 +++--
3 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/lua/plugins/filetype.lua b/lua/plugins/filetype.lua
index 553e79d..80fe37e 100644
--- a/lua/plugins/filetype.lua+++ b/lua/plugins/filetype.lua
@@ -506,15 +506,7 @@ vis.events.subscribe(vis.events.WIN_OPEN, function(win)
for _, cmd in pairs(filetype.cmd or {}) do
vis:command(cmd)
end
- if not vis.lexers.property then return end- local path = vis.lexers.property['scintillua.lexers']:gsub(';', '/?.lua;')- local lexname = filetype.alt_name or syntax- local lexpath = package.searchpath(lexname, path)- if lexpath ~= nil then- win:set_syntax(lexname)- else- win:set_syntax(nil)- end+ win:set_syntax(syntax)
This breaks the alt_name use case which can be used for applying
configuration to certain file types but using the lexer from
another file type. This is currently used for example with the
'git-commit' filetype to set the colour column but to use the
syntax highlighting from the 'diff' lexer.
end
local path = win.file.name -- filepath
diff --git a/lua/plugins/textobject-lexer.lua b/lua/plugins/textobject-lexer.lua
index 2f9d757..eba65e2 100644
--- a/lua/plugins/textobject-lexer.lua+++ b/lua/plugins/textobject-lexer.lua
@@ -8,13 +8,17 @@ vis:textobject_new("ii", function(win, pos)
return nil
end
+ local lexer = vis.lexers.load(win.syntax, nil, true)+ if not lexer then+ return nil+ end+ local before, after = pos - MAX_CONTEXT, pos + MAX_CONTEXT
if before < 0 then
before = 0
end
-- TODO make sure we start at a line boundary?
- local lexer = vis.lexers.load(win.syntax, nil, true) local data = win.file:content(before, after - before)
local tokens = lexer:lex(data)
local cur = before
diff --git a/lua/vis.lua b/lua/vis.lua
index 5473f17..d06bbaf 100644
--- a/lua/vis.lua+++ b/lua/vis.lua
@@ -131,7 +131,8 @@ else
local load_lexer = vis.lexers.load
vis.lexers.load = function (name, alt_name, cache)
if cache and lexers[alt_name or name] then return lexers[alt_name or name] end
- local lexer = load_lexer(name, alt_name)+ local status, lexer = pcall(load_lexer, name, alt_name)+ if not status then return nil end if cache then lexers[alt_name or name] = lexer end
return lexer
end
@@ -276,6 +277,7 @@ vis.types.window.set_syntax = function(win, syntax)
win.syntax = nil
return true
end
+ win.syntax = syntax if not lexers.load then return false end
local lexer = lexers.load(syntax)
@@ -297,7 +299,6 @@ vis.types.window.set_syntax = function(win, syntax)
if style ~= nil then win:style_define(id, style) end
end
- win.syntax = syntax return true
end