1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
local helpers = require('test.functional.helpers')
local spawn, set_session, meths, nvim_prog =
helpers.spawn, helpers.set_session, helpers.meths, helpers.nvim_prog
local write_file, merge_args = helpers.write_file, helpers.merge_args
local msgpack = require('MessagePack')
local tmpname = os.tmpname()
local additional_cmd = ''
local function nvim_argv()
local ret
local nvim_argv = {nvim_prog, '-u', 'NONE', '-i', tmpname, '-N',
'--cmd', 'set shortmess+=I background=light noswapfile',
'--cmd', additional_cmd,
'--embed'}
if helpers.prepend_argv then
return merge_args(helpers.prepend_argv, nvim_argv)
else
return nvim_argv
end
end
local session = nil
local reset = function()
if session then
session:exit(0)
end
session = spawn(nvim_argv())
set_session(session)
meths.set_var('tmpname', tmpname)
end
local set_additional_cmd = function(s)
additional_cmd = s
end
local clear = function()
os.remove(tmpname)
set_additional_cmd('')
end
local get_shada_rw = function(fname)
local wshada = function(text)
write_file(fname, text, true)
end
local sdrcmd = function(bang)
return 'rshada' .. (bang and '!' or '') .. ' ' .. fname
end
local clean = function()
os.remove(fname)
local i = ('a'):byte()
while i <= ('z'):byte() do
if not os.remove(fname .. ('.tmp.%c'):format(i)) then
break
end
i = i + 1
end
end
return wshada, sdrcmd, fname, clean
end
local mpack_keys = {'type', 'timestamp', 'length', 'value'}
local read_shada_file = function(fname)
local fd = io.open(fname, 'r')
local mstring = fd:read('*a')
fd:close()
local unpacker = msgpack.unpacker(mstring)
local ret = {}
local cur
local i = 0
while true do
local off, val = unpacker()
if not off then break end
if i % 4 == 0 then
cur = {}
ret[#ret + 1] = cur
end
cur[mpack_keys[(i % 4) + 1]] = val
i = i + 1
end
return ret
end
return {
reset=reset,
set_additional_cmd=set_additional_cmd,
clear=clear,
exc_exec=exc_exec,
get_shada_rw=get_shada_rw,
read_shada_file=read_shada_file,
}
|