Added in cut, copy and paste to the context menu. Also removed find pattern, as that's no longer a valid command. Also made it so commands only show up if their predicates are valid.
This commit is contained in:
parent
d7b6fe3d42
commit
64f66e5d1e
|
@ -41,6 +41,9 @@ function command.get_all_valid()
|
||||||
return res
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function command.is_valid(name, ...)
|
||||||
|
return command.map[name] and command.map[name].predicate(...)
|
||||||
|
end
|
||||||
|
|
||||||
local function perform(name, ...)
|
local function perform(name, ...)
|
||||||
local cmd = command.map[name]
|
local cmd = command.map[name]
|
||||||
|
|
|
@ -92,6 +92,21 @@ local function set_cursor(x, y, snap_type)
|
||||||
core.blink_reset()
|
core.blink_reset()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local selection_commands = {
|
||||||
|
["doc:cut"] = function()
|
||||||
|
cut_or_copy(true)
|
||||||
|
end,
|
||||||
|
|
||||||
|
["doc:copy"] = function()
|
||||||
|
cut_or_copy(false)
|
||||||
|
end,
|
||||||
|
|
||||||
|
["doc:select-none"] = function()
|
||||||
|
local line, col = doc():get_selection()
|
||||||
|
doc():set_selection(line, col)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
local commands = {
|
local commands = {
|
||||||
["doc:undo"] = function()
|
["doc:undo"] = function()
|
||||||
doc():undo()
|
doc():undo()
|
||||||
|
@ -101,14 +116,6 @@ local commands = {
|
||||||
doc():redo()
|
doc():redo()
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["doc:cut"] = function()
|
|
||||||
cut_or_copy(true)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["doc:copy"] = function()
|
|
||||||
cut_or_copy(false)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["doc:paste"] = function()
|
["doc:paste"] = function()
|
||||||
local clipboard = system.get_clipboard()
|
local clipboard = system.get_clipboard()
|
||||||
-- If the clipboard has changed since our last look, use that instead
|
-- If the clipboard has changed since our last look, use that instead
|
||||||
|
@ -173,11 +180,6 @@ local commands = {
|
||||||
doc():set_selection(1, 1, math.huge, math.huge)
|
doc():set_selection(1, 1, math.huge, math.huge)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
["doc:select-none"] = function()
|
|
||||||
local line, col = doc():get_selection()
|
|
||||||
doc():set_selection(line, col)
|
|
||||||
end,
|
|
||||||
|
|
||||||
["doc:select-lines"] = function()
|
["doc:select-lines"] = function()
|
||||||
for idx, line1, _, line2 in doc():get_selections(true) do
|
for idx, line1, _, line2 in doc():get_selections(true) do
|
||||||
append_line_if_last_line(line2)
|
append_line_if_last_line(line2)
|
||||||
|
@ -481,3 +483,6 @@ commands["doc:move-to-next-char"] = function()
|
||||||
end
|
end
|
||||||
|
|
||||||
command.add("core.docview", commands)
|
command.add("core.docview", commands)
|
||||||
|
command.add(function()
|
||||||
|
return core.active_view:is(DocView) and core.active_view.doc:has_any_selection()
|
||||||
|
end ,selection_commands)
|
||||||
|
|
|
@ -66,9 +66,13 @@ function ContextMenu:show(x, y)
|
||||||
for _, items in ipairs(self.itemset) do
|
for _, items in ipairs(self.itemset) do
|
||||||
if items.predicate(x, y) then
|
if items.predicate(x, y) then
|
||||||
items_list.width = math.max(items_list.width, items.items.width)
|
items_list.width = math.max(items_list.width, items.items.width)
|
||||||
items_list.height = items_list.height + items.items.height
|
items_list.height = items_list.height
|
||||||
for _, subitems in ipairs(items.items) do
|
for _, subitems in ipairs(items.items) do
|
||||||
table.insert(items_list, subitems)
|
if not subitems.command or command.is_valid(subitems.command) then
|
||||||
|
local lw, lh = get_item_size(subitems)
|
||||||
|
items_list.height = items_list.height + lh
|
||||||
|
table.insert(items_list, subitems)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -149,6 +149,13 @@ function Doc:has_selection()
|
||||||
return line1 ~= line2 or col1 ~= col2
|
return line1 ~= line2 or col1 ~= col2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Doc:has_any_selection()
|
||||||
|
for idx, line1, col1, line2, col2 in self:get_selections() do
|
||||||
|
if line1 ~= line2 or col1 ~= col2 then return true end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
function Doc:sanitize_selection()
|
function Doc:sanitize_selection()
|
||||||
for idx, line1, col1, line2, col2 in self:get_selections() do
|
for idx, line1, col1, line2, col2 in self:get_selections() do
|
||||||
self:set_selections(idx, line1, col1, line2, col2)
|
self:set_selections(idx, line1, col1, line2, col2)
|
||||||
|
|
|
@ -62,15 +62,15 @@ menu:register("core.logview", {
|
||||||
|
|
||||||
if require("plugins.scale") then
|
if require("plugins.scale") then
|
||||||
menu:register("core.docview", {
|
menu:register("core.docview", {
|
||||||
{ text = "Font +", command = "scale:increase" },
|
{ text = "Cut", command = "doc:cut" },
|
||||||
{ text = "Font -", command = "scale:decrease" },
|
{ text = "Copy", command = "doc:copy" },
|
||||||
{ text = "Font Reset", command = "scale:reset" },
|
{ text = "Paste", command = "doc:paste" },
|
||||||
|
{ text = "Font +", command = "scale:increase" },
|
||||||
|
{ text = "Font -", command = "scale:decrease" },
|
||||||
|
{ text = "Font Reset", command = "scale:reset" },
|
||||||
ContextMenu.DIVIDER,
|
ContextMenu.DIVIDER,
|
||||||
{ text = "Find", command = "find-replace:find" },
|
{ text = "Find", command = "find-replace:find" },
|
||||||
{ text = "Replace", command = "find-replace:replace" },
|
{ text = "Replace", command = "find-replace:replace" }
|
||||||
ContextMenu.DIVIDER,
|
|
||||||
{ text = "Find Pattern", command = "find-replace:find-pattern" },
|
|
||||||
{ text = "Replace Pattern", command = "find-replace:replace-pattern" },
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue