From 858f7a2a5070f7838ddf4d976b3612d6100a2928 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Tue, 8 Jun 2021 23:09:09 -0400 Subject: [PATCH] Added in missing boolean. --- data/core/commands/doc.lua | 56 ++++++++++++++++++++++++++++++++------ data/core/doc/init.lua | 16 ++++++----- data/core/keymap-macos.lua | 2 ++ data/core/keymap.lua | 2 ++ 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/data/core/commands/doc.lua b/data/core/commands/doc.lua index 27da949..ca29339 100644 --- a/data/core/commands/doc.lua +++ b/data/core/commands/doc.lua @@ -55,7 +55,7 @@ local function cut_or_copy(delete) if line1 ~= line2 or col1 ~= col2 then local text = doc():get_text(line1, col1, line2, col2) if delete then - doc():delete_to(idx, 0) + doc():delete_to(0) end full_text = full_text == "" and text or (full_text .. "\n" .. text) doc().cursor_clipboard[idx] = text @@ -66,6 +66,25 @@ local function cut_or_copy(delete) system.set_clipboard(full_text) end +local function split_cursor(direction) + local new_cursors = {} + for _, line1, col1 in doc():get_selections() do + local exists = false + for _, line2, col2 in doc():get_selections() do + if line1+direction == line2 and col1 == col2 then + exists = true + break + end + end + if not exists and line1 > 1 and line1 < #doc().lines then + table.insert(new_cursors, { line1 - 1, col1 }) + end + end + for i,v in ipairs(new_cursors) do + doc():set_selections(#doc().selections/4 + 1, v[1], v[2]) + end +end + local commands = { ["doc:undo"] = function() doc():undo() @@ -121,7 +140,7 @@ local commands = { if line1 == line2 and col1 == col2 and doc().lines[line1]:find("^%s*$", col1) then doc():remove(line1, col1, line1, math.huge) end - doc():delete_to(idx, translate.next_char) + doc():delete_to_cursor(idx, translate.next_char) end end, @@ -130,11 +149,11 @@ local commands = { if line1 == line2 and col1 == col2 then local text = doc():get_text(line1, 1, line1, col1) if #text >= config.indent_size and text:find("^ *$") then - doc():delete_to(idx, 0, -config.indent_size) + doc():delete_to_cursor(idx, 0, -config.indent_size) return end end - doc():delete_to(idx, translate.previous_char) + doc():delete_to_cursor(idx, translate.previous_char) end end, @@ -146,6 +165,16 @@ local commands = { local line, col = doc():get_selection() doc():set_selection(line, col) end, + + + ["doc:indent"] = function() + for idx, line1, col1, line2, col2 in doc_multiline_selections(true) do + local l1, c1, l2, c2 = doc():indent_text(false, line1, col1, line2, col2) + if l1 then + doc():set_selections(idx, l1, c1, l2, c2) + end + end + end, ["doc:select-lines"] = function() for idx, line1, _, line2 in doc():get_selections(true) do @@ -366,6 +395,15 @@ local commands = { os.remove(filename) core.log("Removed \"%s\"", filename) end + + ["doc:create-cursor-previous-line"] = function() + split_cursor(-1) + end, + + ["doc:create-cursor-next-line"] = function() + split_cursor(1) + end, + } @@ -389,9 +427,9 @@ local translations = { } for name, fn in pairs(translations) do - commands["doc:move-to-" .. name] = function() doc():move_to(nil, fn, dv()) end - commands["doc:select-to-" .. name] = function() doc():select_to(nil, fn, dv()) end - commands["doc:delete-to-" .. name] = function() doc():delete_to(nil, fn, dv()) end + commands["doc:move-to-" .. name] = function() doc():move_to(fn, dv()) end + commands["doc:select-to-" .. name] = function() doc():select_to(fn, dv()) end + commands["doc:delete-to-" .. name] = function() doc():delete_to(fn, dv()) end end commands["doc:move-to-previous-char"] = function() @@ -400,7 +438,7 @@ commands["doc:move-to-previous-char"] = function() doc():set_selections(idx, line1, col1) end end - doc():move_to(nil, translate.previous_char) + doc():move_to(translate.previous_char) end commands["doc:move-to-next-char"] = function() @@ -409,7 +447,7 @@ commands["doc:move-to-next-char"] = function() doc():set_selections(idx, line2, col2) end end - doc():move_to(nil, translate.next_char) + doc():move_to(translate.next_char) end command.add("core.docview", commands) diff --git a/data/core/doc/init.lua b/data/core/doc/init.lua index b448bbd..ef9e1f2 100644 --- a/data/core/doc/init.lua +++ b/data/core/doc/init.lua @@ -130,7 +130,7 @@ end function Doc:get_selection(sort) local idx, line1, col1, line2, col2 = self:get_selections(sort)(self.selections, 0) - return line1, col1, line2, col2 + return line1, col1, line2, col2, sort end function Doc:get_selections(sort) @@ -342,10 +342,10 @@ function Doc:text_input(text, idx) for sidx, line1, col1, line2, col2 in self:get_selections() do if not idx or idx == sidx then if line1 ~= line2 or col1 ~= col2 then - self:delete_to(sidx) + self:delete_to_cursor(sidx) end self:insert(line1, col1, text) - self:move_to(sidx, #text) + self:move_to_cursor(sidx, #text) end end end @@ -370,7 +370,7 @@ function Doc:replace(fn) end -function Doc:delete_to(idx, ...) +function Doc:delete_to_cursor(idx, ...) for sidx, line1, col1, line2, col2 in self:get_selections(true) do if not idx or sidx == idx then if line1 ~= line2 or col1 ~= col2 then @@ -384,18 +384,19 @@ function Doc:delete_to(idx, ...) end end end +function Doc:delete_to(...) return self:delete_to(nil, ...) end - -function Doc:move_to(idx, ...) +function Doc:move_to_cursor(idx, ...) for sidx, line, col in self:get_selections() do if not idx or sidx == idx then self:set_selections(sidx, self:position_offset(line, col, ...)) end end end +function Doc:move_to(...) return self:move_to_cursor(nil, ...) end -function Doc:select_to(idx, ...) +function Doc:select_to_cursor(idx, ...) for sidx, line, col, line2, col2 in self:get_selections() do if not idx or idx == sidx then line, col = self:position_offset(line, col, ...) @@ -403,6 +404,7 @@ function Doc:select_to(idx, ...) end end end +function Doc:select_to(...) return self:select_to_cursor(nil, ...) end local function get_indent_string() diff --git a/data/core/keymap-macos.lua b/data/core/keymap-macos.lua index ccbb102..3db4d4f 100644 --- a/data/core/keymap-macos.lua +++ b/data/core/keymap-macos.lua @@ -101,6 +101,8 @@ local function keymap_macos(keymap) ["cmd+shift+end"] = "doc:select-to-end-of-doc", ["shift+pageup"] = "doc:select-to-previous-page", ["shift+pagedown"] = "doc:select-to-next-page", + ["cmd+shift+up"] = "doc:create-cursor-previous-line", + ["cmd+shift+down"] = "doc:create-cursor-next-line" } end diff --git a/data/core/keymap.lua b/data/core/keymap.lua index 84bcd77..0bd153b 100644 --- a/data/core/keymap.lua +++ b/data/core/keymap.lua @@ -202,6 +202,8 @@ keymap.add_direct { ["ctrl+shift+end"] = "doc:select-to-end-of-doc", ["shift+pageup"] = "doc:select-to-previous-page", ["shift+pagedown"] = "doc:select-to-next-page", + ["ctrl+shift+up"] = "doc:create-cursor-previous-line", + ["ctrl+shift+down"] = "doc:create-cursor-next-line" } return keymap