diff options
Diffstat (limited to 'core/ext/command_entry.lua')
-rw-r--r-- | core/ext/command_entry.lua | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/core/ext/command_entry.lua b/core/ext/command_entry.lua new file mode 100644 index 00000000..8c796610 --- /dev/null +++ b/core/ext/command_entry.lua @@ -0,0 +1,36 @@ +-- Copyright 2007-2008 Mitchell mitchell<att>caladbolg.net. See LICENSE. + +local ce = textadept.command_entry + +--- +-- Gets completions for the current command_entry text. +-- This function is called internally and shouldn't be called by script. +-- @param command The command to complete. +-- @return sorted table of completions +function ce.get_completions_for(command) + local textadept = textadept + 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:match('^'..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:match('^'..prefix) then cmpls[#cmpls + 1] = f end + end + else + for p in pairs(textadept.buffer_properties) do + if p:match('^'..prefix) then cmpls[#cmpls + 1] = p end + end + end + end + table.sort(cmpls) + return cmpls +end |