aboutsummaryrefslogtreecommitdiff
path: root/core/ext/command_entry.lua
diff options
context:
space:
mode:
Diffstat (limited to 'core/ext/command_entry.lua')
-rw-r--r--core/ext/command_entry.lua69
1 files changed, 44 insertions, 25 deletions
diff --git a/core/ext/command_entry.lua b/core/ext/command_entry.lua
index d2a64243..0170f21c 100644
--- a/core/ext/command_entry.lua
+++ b/core/ext/command_entry.lua
@@ -2,32 +2,51 @@
local textadept = _G.textadept
local locale = _G.locale
-local ce = textadept.command_entry
--- LuaDoc is in core/.command_entry.lua
-function ce.get_completions_for(command)
- local substring = command:match('[%w_.:]+$') or ''
- local path, o, prefix = substring:match('^([%w_.:]-)([.:]?)([%w_]*)$')
- local ret, tbl = pcall(loadstring('return ('..path..')'))
- if not ret then tbl = getfenv(0) end
- if type(tbl) ~= 'table' then return end
- local cmpls = {}
- for k in pairs(tbl) do
- if type(k) == 'string' and k:find('^'..prefix) then
- cmpls[#cmpls + 1] = k
- end
- end
- if path == 'buffer' then
- if o == ':' then
- for f in pairs(textadept.buffer_functions) do
- if f:find('^'..prefix) then cmpls[#cmpls + 1] = f end
+textadept.events.add_handler('command_entry_completions_request',
+ function(command) -- get a Lua completion list for the command being entered
+ local substring = command:match('[%w_.:]+$') or ''
+ local path, o, prefix = substring:match('^([%w_.:]-)([.:]?)([%w_]*)$')
+ local ret, tbl = pcall(loadstring('return ('..path..')'))
+ if not ret then tbl = getfenv(0) end
+ if type(tbl) ~= 'table' then return end
+ local cmpls = {}
+ for k in pairs(tbl) do
+ if type(k) == 'string' and k:find('^'..prefix) then
+ cmpls[#cmpls + 1] = k
end
- else
- for p in pairs(textadept.buffer_properties) do
- if p:find('^'..prefix) then cmpls[#cmpls + 1] = p end
+ end
+ if path == 'buffer' then
+ if o == ':' then
+ for f in pairs(textadept.buffer_functions) do
+ if f:find('^'..prefix) then cmpls[#cmpls + 1] = f end
+ end
+ else
+ for p in pairs(textadept.buffer_properties) do
+ if p:find('^'..prefix) then cmpls[#cmpls + 1] = p end
+ end
end
end
- end
- table.sort(cmpls)
- return cmpls
-end
+ table.sort(cmpls)
+ textadept.command_entry.show_completions(cmpls)
+ end)
+
+textadept.events.add_handler('command_entry_command',
+ function(command) -- execute a Lua command
+ local f, err = loadstring(command)
+ if err then error(err) end
+ f()
+ end)
+
+textadept.events.add_handler('command_entry_keypress',
+ function(code)
+ local ce = textadept.command_entry
+ if code == 65307 then -- escape
+ ce.focus() -- toggle focus to hide
+ return true
+ elseif code == 65289 then -- tab
+ textadept.events.handle('command_entry_completions_request',
+ ce.entry_text)
+ return true
+ end
+ end)