aboutsummaryrefslogtreecommitdiff
path: root/modules/textadept/command_entry.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/textadept/command_entry.lua')
-rw-r--r--modules/textadept/command_entry.lua30
1 files changed, 14 insertions, 16 deletions
diff --git a/modules/textadept/command_entry.lua b/modules/textadept/command_entry.lua
index 18f72e20..3e344f81 100644
--- a/modules/textadept/command_entry.lua
+++ b/modules/textadept/command_entry.lua
@@ -59,8 +59,7 @@ end
-- @name editing_keys
M.editing_keys = {__index = {}}
--- Fill in default platform-specific key bindings.
-local ekeys, plat = M.editing_keys.__index, CURSES and 3 or OSX and 2 or 1
+-- Fill in default key bindings for Linux/Win32, macOS, Terminal.
local bindings = {
-- Note: cannot use `M.cut`, `M.copy`, etc. since M is never considered the
-- global buffer.
@@ -81,8 +80,9 @@ local bindings = {
[function() M:line_end() end] = {nil, 'ctrl+e', 'ctrl+e'},
[function() M:clear() end] = {nil, 'ctrl+d', 'ctrl+d'}
}
+local plat = CURSES and 3 or OSX and 2 or 1
for f, plat_keys in pairs(bindings) do
- if plat_keys[plat] then ekeys[plat_keys[plat]] = f end
+ if plat_keys[plat] then M.editing_keys.__index[plat_keys[plat]] = f end
end
-- Environment for abbreviated Lua commands.
@@ -100,13 +100,13 @@ local env = setmetatable({}, {
__newindex = function(self, k, v)
local ok, value = pcall(function() return buffer[k] end)
if ok and value ~= nil or not ok and value:find('write-only property') then
- buffer[k] = v
+ buffer[k] = v -- buffer and view are interchangeable in this case
return
end
if view[k] ~= nil then view[k] = v return end
if ui[k] ~= nil then ui[k] = v return end
rawset(self, k, v)
- end,
+ end
})
-- Executes string *code* as Lua code that is subject to an "abbreviated"
@@ -135,7 +135,7 @@ local function run_lua(code)
end
end
if result ~= nil or code:find('^return ') then ui.print(result) end
- events.emit(events.UPDATE_UI, 0)
+ events.emit(events.UPDATE_UI, 1) -- update UI if necessary (e.g. statusbar)
end
args.register('-e', '--execute', 1, run_lua, 'Execute Lua code')
@@ -151,8 +151,8 @@ local function complete_lua()
if (not ok or type(result) ~= 'table') and symbol ~= '' then return end
local cmpls = {}
part = '^' .. part
- local sep = string.char(M.auto_c_type_separator)
local XPM = textadept.editing.XPM_IMAGES
+ local sep = string.char(M.auto_c_type_separator)
if not ok or symbol == 'buffer' or symbol == 'view' then
local sci = _SCINTILLA
local global_envs = not ok and {
@@ -161,11 +161,11 @@ local function complete_lua()
} or op == ':' and {sci.functions} or {sci.properties, sci.constants}
for _, env in ipairs(global_envs) do
for k, v in pairs(env) do
- if type(k) == 'string' and k:find(part) then
- local xpm = (type(v) == 'function' or env == sci.functions) and
- XPM.METHOD or XPM.VARIABLE
- cmpls[#cmpls + 1] = k .. sep .. xpm
- end
+ if type(k) ~= 'string' or not k:find(part) then goto continue end
+ local xpm = (type(v) == 'function' or env == sci.functions) and
+ XPM.METHOD or XPM.VARIABLE
+ cmpls[#cmpls + 1] = k .. sep .. xpm
+ ::continue::
end
end
else
@@ -216,7 +216,6 @@ local prev_key_mode
-- @usage ui.command_entry.run(ui.print)
-- @name run
function M.run(f, keys, lang, height)
- if M:auto_c_active() then M:auto_c_cancel() end -- may happen in curses
if not assert_type(f, 'function/nil', 1) and not keys then
f, keys, lang = run_lua, lua_keys, 'lua'
elseif type(assert_type(keys, 'table/string/nil', 2)) == 'string' then
@@ -231,9 +230,8 @@ function M.run(f, keys, lang, height)
keys['\n'] = function()
if M:auto_c_active() then return false end -- allow Enter to autocomplete
M.focus() -- hide
- if not f then return end
M.append_history(M:get_text())
- f(M:get_text())
+ if f then f(M:get_text()) end
end
end
if not getmetatable(keys) then setmetatable(keys, M.editing_keys) end
@@ -242,7 +240,7 @@ function M.run(f, keys, lang, height)
local mode_history = history[history.mode]
M:set_text(mode_history and mode_history[mode_history.pos] or '')
M:select_all()
- prev_key_mode = _G.keys.mode
+ prev_key_mode = _G.keys.mode -- save before M.focus()
M.focus()
M:set_lexer(lang or 'text')
M.height = M:text_height(1) * (height or 1)