diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-03-05 11:04:38 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-03-05 11:04:38 +0100 |
| commit | bee12d3686c19b1aaddf18ca58a2556fd7c200f0 (patch) | |
| tree | 688cc6c6f9fb780c20564a63fd5fdf0f72785f41 /lua | |
| parent | 368fdf04acd490edfb6561796696ded79c3bf9a6 (diff) | |
| download | vis-bee12d3686c19b1aaddf18ca58a2556fd7c200f0.tar.gz vis-bee12d3686c19b1aaddf18ca58a2556fd7c200f0.tar.xz | |
lua: reimplement word and file name completion in lua
The file name completion does not yet behave the same way as
the previous C code because the completion prefix is currently
simply calculated using the `iw` text object which does not
handle common path elements (e.g. `.`, `/`, `~`, etc).
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/plugins/complete-filename.lua | 23 | ||||
| -rw-r--r-- | lua/plugins/complete-word.lua | 22 | ||||
| -rw-r--r-- | lua/vis-std.lua | 2 |
3 files changed, 47 insertions, 0 deletions
diff --git a/lua/plugins/complete-filename.lua b/lua/plugins/complete-filename.lua new file mode 100644 index 0000000..824e33a --- /dev/null +++ b/lua/plugins/complete-filename.lua @@ -0,0 +1,23 @@ +-- complete file name at primary cursor location using vis-complete(1) + +vis:map(vis.modes.INSERT, "<C-x><C-f>", function() + local win = vis.win + local file = win.file + local pos = win.cursor.pos + if not pos then return end + -- TODO do something clever here + local range = file:text_object_word(pos > 0 and pos-1 or pos); + if not range then return end + if range.finish > pos then range.finish = pos end + if range.start == range.finish then return end + local prefix = file:content(range) + if not prefix then return end + local cmd = string.format("vis-complete --file '%s'", prefix:gsub("'", "'\\''")) + local status, out, err = vis:pipe(file, { start = 0, finish = 0 }, cmd) + if status ~= 0 or not out then + if err then vis:info(err) end + return + end + file:insert(pos, out) + win.cursor.pos = pos + #out +end, "Complete file name") diff --git a/lua/plugins/complete-word.lua b/lua/plugins/complete-word.lua new file mode 100644 index 0000000..68ce385 --- /dev/null +++ b/lua/plugins/complete-word.lua @@ -0,0 +1,22 @@ +-- complete word at primary cursor location using vis-complete(1) + +vis:map(vis.modes.INSERT, "<C-n>", function() + local win = vis.win + local file = win.file + local pos = win.cursor.pos + if not pos then return end + local range = file:text_object_word(pos > 0 and pos-1 or pos); + if not range then return end + if range.finish > pos then range.finish = pos end + if range.start == range.finish then return end + local prefix = file:content(range) + if not prefix then return end + local cmd = string.format("vis-complete --word '%s'", prefix:gsub("'", "'\\''")) + local status, out, err = vis:pipe(file, { start = 0, finish = file.size }, cmd) + if status ~= 0 or not out then + if err then vis:info(err) end + return + end + file:insert(pos, out) + win.cursor.pos = pos + #out +end, "Complete word in file") diff --git a/lua/vis-std.lua b/lua/vis-std.lua index 6499f24..a0b84f6 100644 --- a/lua/vis-std.lua +++ b/lua/vis-std.lua @@ -131,3 +131,5 @@ require('plugins/filetype') require('plugins/textobject-lexer') require('plugins/digraph') require('plugins/number-inc-dec') +require('plugins/complete-word') +require('plugins/complete-filename') |
