summaryrefslogtreecommitdiff
path: root/vis/visrc.lua
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-11-16 22:22:49 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-11-16 23:36:45 +0100
commit3ccc7effa376ea2b9206c272f3087c882f347c9b (patch)
treee4a17c05abfee035dc2a1fed1c47a0c8b229a9fd /vis/visrc.lua
parent1288db6bdeb0d5f9b24b208603e16871ff59cffc (diff)
test/vis: convert vis specific tests to use the Lua API
Instead of using the keys utility to convert the textual key representation into something a terminal would send and then pipe it to vis' standard input use the Lua API to directly feed the keys into vis' input queue. This has a number of advantages: - it is less fragile: the keys utility is incomplete and only handles the most common keys - it is faster because there is no need to artificially delay input after an <Escape> key to give vis a chance to distinguish between a single <Escape> and the start of an escape sequence
Diffstat (limited to 'vis/visrc.lua')
-rw-r--r--vis/visrc.lua17
1 files changed, 17 insertions, 0 deletions
diff --git a/vis/visrc.lua b/vis/visrc.lua
new file mode 100644
index 0000000..909aa00
--- /dev/null
+++ b/vis/visrc.lua
@@ -0,0 +1,17 @@
+vis.events = {}
+vis.events.win_open = function(win)
+ -- test.in file passed to vis
+ local name = win.file.name
+ if name then
+ -- use the corresponding test.lua file
+ name = string.gsub(name, '%.in$', '')
+ local file = assert(io.popen(string.format("cpp -P '%s.keys'", name), 'r'))
+ local keys = file:read('*all')
+ keys = string.gsub(keys, '<Space>', ' ')
+ keys = string.gsub(keys, '\n', '')
+ file:close()
+ vis:feedkeys(keys..'<Escape>')
+ vis:command(string.format("w! '%s.out'", name))
+ end
+ vis:command('q!')
+end