Merge pull request #1098 from Guldoman/PR_command_predicate_params
Allow command predicates to manage parameters, allow overwriting commands
This commit is contained in:
@@ -271,7 +271,7 @@ local function get_partial_symbol()
|
||||
end
|
||||
|
||||
local function get_active_view()
|
||||
if getmetatable(core.active_view) == DocView then
|
||||
if core.active_view:is(DocView) then
|
||||
return core.active_view
|
||||
end
|
||||
end
|
||||
@@ -621,12 +621,13 @@ end
|
||||
-- Commands
|
||||
--
|
||||
local function predicate()
|
||||
return get_active_view() and #suggestions > 0
|
||||
local active_docview = get_active_view()
|
||||
return active_docview and #suggestions > 0, active_docview
|
||||
end
|
||||
|
||||
command.add(predicate, {
|
||||
["autocomplete:complete"] = function()
|
||||
local doc = core.active_view.doc
|
||||
["autocomplete:complete"] = function(dv)
|
||||
local doc = dv.doc
|
||||
local line, col = doc:get_selection()
|
||||
local item = suggestions[suggestions_idx]
|
||||
local text = item.text
|
||||
|
||||
@@ -33,8 +33,8 @@ function RootView:draw(...)
|
||||
end
|
||||
|
||||
command.add("core.docview!", {
|
||||
["context:show"] = function()
|
||||
menu:show(core.active_view.position.x, core.active_view.position.y)
|
||||
["context:show"] = function(dv)
|
||||
menu:show(dv.position.x, dv.position.y)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
@@ -299,10 +299,10 @@ local function set_indent_type(doc, type)
|
||||
doc.indent_info = cache[doc]
|
||||
end
|
||||
|
||||
local function set_indent_type_command()
|
||||
local function set_indent_type_command(dv)
|
||||
core.command_view:enter("Specify indent style for this file", {
|
||||
submit = function(value)
|
||||
local doc = core.active_view.doc
|
||||
local doc = dv.doc
|
||||
value = value:lower()
|
||||
set_indent_type(doc, value == "tabs" and "hard" or "soft")
|
||||
end,
|
||||
@@ -327,11 +327,11 @@ local function set_indent_size(doc, size)
|
||||
doc.indent_info = cache[doc]
|
||||
end
|
||||
|
||||
local function set_indent_size_command()
|
||||
local function set_indent_size_command(dv)
|
||||
core.command_view:enter("Specify indent size for current file", {
|
||||
submit = function(value)
|
||||
value = math.floor(tonumber(value))
|
||||
local doc = core.active_view.doc
|
||||
local doc = dv.doc
|
||||
set_indent_size(doc, value)
|
||||
end,
|
||||
validate = function(value)
|
||||
|
||||
@@ -19,8 +19,8 @@ end
|
||||
|
||||
|
||||
command.add("core.docview", {
|
||||
["quote:quote"] = function()
|
||||
core.active_view.doc:replace(function(text)
|
||||
["quote:quote"] = function(dv)
|
||||
dv.doc:replace(function(text)
|
||||
return '"' .. text:gsub("[\0-\31\\\"]", replace) .. '"'
|
||||
end)
|
||||
end,
|
||||
|
||||
@@ -25,8 +25,8 @@ end
|
||||
|
||||
|
||||
command.add("core.docview", {
|
||||
["reflow:reflow"] = function()
|
||||
local doc = core.active_view.doc
|
||||
["reflow:reflow"] = function(dv)
|
||||
local doc = dv.doc
|
||||
doc:replace(function(text)
|
||||
local prefix_set = "[^%w\n%[%](){}`'\"]*"
|
||||
|
||||
|
||||
@@ -41,17 +41,17 @@ end
|
||||
|
||||
|
||||
command.add("core.docview", {
|
||||
["tabularize:tabularize"] = function()
|
||||
["tabularize:tabularize"] = function(dv)
|
||||
core.command_view:enter("Tabularize On Delimiter", {
|
||||
submit = function(delim)
|
||||
if delim == "" then delim = " " end
|
||||
|
||||
local doc = core.active_view.doc
|
||||
local doc = dv.doc
|
||||
local line1, col1, line2, col2, swap = doc:get_selection(true)
|
||||
line1, col1 = doc:position_offset(line1, col1, translate.start_of_line)
|
||||
line2, col2 = doc:position_offset(line2, col2, translate.end_of_line)
|
||||
doc:set_selection(line1, col1, line2, col2, swap)
|
||||
|
||||
|
||||
doc:replace(function(text)
|
||||
local lines = gmatch_to_array(text, "[^\n]*\n?")
|
||||
tabularize_lines(lines, delim)
|
||||
|
||||
+17
-19
@@ -679,16 +679,16 @@ local function treeitem() return view.hovered_item or view.selected_item end
|
||||
|
||||
command.add(
|
||||
function()
|
||||
return treeitem() ~= nil
|
||||
local item = treeitem()
|
||||
return item ~= nil
|
||||
and (
|
||||
core.active_view == view or core.active_view == menu
|
||||
or (view.toolbar and core.active_view == view.toolbar)
|
||||
-- sometimes the context menu is shown on top of statusbar
|
||||
or core.active_view == core.status_view
|
||||
)
|
||||
), item
|
||||
end, {
|
||||
["treeview:delete"] = function()
|
||||
local item = treeitem()
|
||||
["treeview:delete"] = function(item)
|
||||
local filename = item.abs_filename
|
||||
local relfilename = item.filename
|
||||
if item.dir_name ~= core.project_dir then
|
||||
@@ -732,9 +732,11 @@ command.add(
|
||||
})
|
||||
|
||||
|
||||
command.add(function() return treeitem() ~= nil end, {
|
||||
["treeview:rename"] = function()
|
||||
command.add(function()
|
||||
local item = treeitem()
|
||||
return item ~= nil, item
|
||||
end, {
|
||||
["treeview:rename"] = function(item)
|
||||
local old_filename = item.filename
|
||||
local old_abs_filename = item.abs_filename
|
||||
core.command_view:enter("Rename", {
|
||||
@@ -764,9 +766,8 @@ command.add(function() return treeitem() ~= nil end, {
|
||||
})
|
||||
end,
|
||||
|
||||
["treeview:new-file"] = function()
|
||||
["treeview:new-file"] = function(item)
|
||||
local text
|
||||
local item = treeitem()
|
||||
if not is_project_folder(item.abs_filename) then
|
||||
text = item.filename .. PATHSEP
|
||||
end
|
||||
@@ -787,9 +788,8 @@ command.add(function() return treeitem() ~= nil end, {
|
||||
})
|
||||
end,
|
||||
|
||||
["treeview:new-folder"] = function()
|
||||
["treeview:new-folder"] = function(item)
|
||||
local text
|
||||
local item = treeitem()
|
||||
if not is_project_folder(item.abs_filename) then
|
||||
text = item.filename .. PATHSEP
|
||||
end
|
||||
@@ -806,15 +806,13 @@ command.add(function() return treeitem() ~= nil end, {
|
||||
})
|
||||
end,
|
||||
|
||||
["treeview:open-in-system"] = function()
|
||||
local hovered_item = treeitem()
|
||||
|
||||
["treeview:open-in-system"] = function(item)
|
||||
if PLATFORM == "Windows" then
|
||||
system.exec(string.format("start \"\" %q", hovered_item.abs_filename))
|
||||
system.exec(string.format("start \"\" %q", item.abs_filename))
|
||||
elseif string.find(PLATFORM, "Mac") then
|
||||
system.exec(string.format("open %q", hovered_item.abs_filename))
|
||||
system.exec(string.format("open %q", item.abs_filename))
|
||||
elseif PLATFORM == "Linux" or string.find(PLATFORM, "BSD") then
|
||||
system.exec(string.format("xdg-open %q", hovered_item.abs_filename))
|
||||
system.exec(string.format("xdg-open %q", item.abs_filename))
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -823,10 +821,10 @@ command.add(function()
|
||||
local item = treeitem()
|
||||
return item
|
||||
and not is_primary_project_folder(item.abs_filename)
|
||||
and is_project_folder(item.abs_filename)
|
||||
and is_project_folder(item.abs_filename), item
|
||||
end, {
|
||||
["treeview:remove-project-directory"] = function()
|
||||
core.remove_project_directory(treeitem().dir_name)
|
||||
["treeview:remove-project-directory"] = function(item)
|
||||
core.remove_project_directory(item.dir_name)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ end
|
||||
|
||||
|
||||
command.add("core.docview", {
|
||||
["trim-whitespace:trim-trailing-whitespace"] = function()
|
||||
trim_trailing_whitespace(core.active_view.doc)
|
||||
["trim-whitespace:trim-trailing-whitespace"] = function(dv)
|
||||
trim_trailing_whitespace(dv.doc)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user