refactor telescope command (#398)
* refactor telescope command * addd telescope default options support * fix variable name wrong * convert command line string to lua type * add comment. * update readme for use theme in commandline * enhance complete in commandline * enhance complete in commandline * enhance covert commandline options
This commit is contained in:
96
lua/telescope/command.lua
Normal file
96
lua/telescope/command.lua
Normal file
@@ -0,0 +1,96 @@
|
||||
local themes = require('telescope.themes')
|
||||
local builtin = require('telescope.builtin')
|
||||
local extensions = require('telescope._extensions').manager
|
||||
local config = require('telescope.config')
|
||||
local command = {}
|
||||
|
||||
-- convert command line string arguments to
|
||||
-- lua number boolean type and nil value
|
||||
local function convert_user_opts(user_opts)
|
||||
local default_opts = config.values
|
||||
|
||||
local _switch = {
|
||||
['boolean'] = function(key,val)
|
||||
if val == 'false' then
|
||||
user_opts[key] = false
|
||||
end
|
||||
user_opts[key] = true
|
||||
end,
|
||||
['number'] = function(key,val)
|
||||
user_opts[key] = tonumber(val)
|
||||
end,
|
||||
['string'] = function(key,val)
|
||||
if val == 'nil' then
|
||||
user_opts[key] = nil
|
||||
end
|
||||
if val == '""' then
|
||||
user_opts[key] = ''
|
||||
end
|
||||
if val == '"' then
|
||||
user_opts[key] = ''
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local _switch_metatable = {
|
||||
__index = function(_,k)
|
||||
print(string.format('Type of %s does not match',k))
|
||||
end
|
||||
}
|
||||
|
||||
setmetatable(_switch,_switch_metatable)
|
||||
|
||||
for key,val in pairs(user_opts) do
|
||||
if default_opts[key] == nil then
|
||||
print('[Telescope] argument not exists in default options')
|
||||
return
|
||||
end
|
||||
_switch[type(default_opts[key])](key,val)
|
||||
end
|
||||
end
|
||||
|
||||
-- receive the viml command args
|
||||
-- it should be a table value like
|
||||
-- {
|
||||
-- cmd = 'find_files',
|
||||
-- theme = 'dropdown',
|
||||
-- extension_type = 'command'
|
||||
-- opts = {
|
||||
-- cwd = '***',
|
||||
-- }
|
||||
function command.run_command(args)
|
||||
local user_opts = args or {}
|
||||
if next(user_opts) == nil and not user_opts.cmd then
|
||||
print('[Telescope] your command miss args')
|
||||
return
|
||||
end
|
||||
|
||||
local cmd = user_opts.cmd
|
||||
local opts = user_opts.opts or {}
|
||||
local extension_type = user_opts.extension_type or ''
|
||||
local theme = user_opts.theme or ''
|
||||
|
||||
if next(opts) ~= nil then
|
||||
convert_user_opts(opts)
|
||||
end
|
||||
|
||||
if string.len(theme) > 0 then
|
||||
opts = themes[theme](opts)
|
||||
end
|
||||
|
||||
if string.len(extension_type) > 0 and extension_type ~= '"' then
|
||||
extensions[cmd][extension_type](opts)
|
||||
return
|
||||
end
|
||||
|
||||
if builtin[cmd] then
|
||||
builtin[cmd](opts)
|
||||
return
|
||||
end
|
||||
|
||||
if rawget(extensions,cmd) then
|
||||
extensions[cmd][cmd](opts)
|
||||
end
|
||||
end
|
||||
|
||||
return command
|
||||
Reference in New Issue
Block a user