vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit c2bf59167fa9a049459a2fc4a62e019a5ce2d9c7 parent 6c4c2a00ab473793f294f27068624eada3812879 Author: Marc André Tanner <mat@brain-dump.org> Date: Wed, 22 Feb 2017 18:33:57 +0100 lua: expose vis:module_exist method, load lexer and lpeg module during startup Diffstat:
| M | lua/vis-std.lua | | | 20 | +------------------- |
| M | lua/vis.lua | | | 26 | ++++++++++++++++++++++++-- |
| M | vis-lua.c | | | 10 | ++++++---- |
3 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/lua/vis-std.lua b/lua/vis-std.lua @@ -1,24 +1,6 @@ -- standard vis event handlers vis.events.subscribe(vis.events.INIT, function() - local package_exist = function(name) - for _, searcher in ipairs(package.searchers or package.loaders) do - local loader = searcher(name) - if type(loader) == 'function' then - return true - end - end - return false - end - - if not package_exist('lpeg') then - vis:info('WARNING: could not find lpeg module') - elseif not package_exist('lexer') then - vis:info('WARNING: could not find lexer module') - else - vis.lexers = require('lexer') - end - if os.getenv("TERM_PROGRAM") == "Apple_Terminal" then vis:command("set change-256colors false"); end @@ -41,7 +23,7 @@ end) vis.events.subscribe(vis.events.WIN_SYNTAX, function(win, name) local lexers = vis.lexers - if not lexers.load then return false end + if not lexers then return false end win:style_define(win.STYLE_DEFAULT, lexers.STYLE_DEFAULT or '') win:style_define(win.STYLE_CURSOR, lexers.STYLE_CURSOR or '') diff --git a/lua/vis.lua b/lua/vis.lua @@ -5,8 +5,6 @@ --- -- @type Vis -vis.lexers = {} - --- Map a new motion. -- -- Sets up a mapping in normal, visual and operator pending mode. @@ -64,6 +62,30 @@ vis.textobject_new = function(vis, key, textobject, help) return true end +--- Check whether a Lua module exists +-- +-- Checks whether a subsequent @{require} call will succeed. +-- @tparam string name the module name to check +-- @treturn bool whether the module was found +vis.module_exist = function(vis, name) + for _, searcher in ipairs(package.searchers or package.loaders) do + local loader = searcher(name) + if type(loader) == 'function' then + return true + end + end + return false +end + +if not vis:module_exist('lpeg') then + vis:info('WARNING: could not find lpeg module') +elseif not vis:module_exist('lexer') then + vis:info('WARNING: could not find lexer module') +else + vis.lexers = require('lexer') + vis.lpeg = require('lpeg') +end + --- Events. -- -- User scripts can subscribe Lua functions to certain events. Multiple functions diff --git a/vis-lua.c b/vis-lua.c @@ -543,11 +543,13 @@ static const char *keymapping(Vis *vis, const char *keys, const Arg *arg) { * @field registers array to access the register by single letter name */ /*** - * LPeg lexer support module. - * @field lexers + * Scintillua lexer module. + * @field lexers might be `nil` if module is not found + */ +/*** + * LPeg lexer module. + * @field lpeg might be `nil` if module is not found */ - -// TODO vis.events /*** * Create an iterator over all windows.