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.lua36
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