aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mitchell <none@none>2021-11-30 14:52:50 -0500
committerGravatar mitchell <none@none>2021-11-30 14:52:50 -0500
commit68168e165079b95a3a7d24e21bf9a1250c801b16 (patch)
treeb165c21b44584714c50893375e8c4720735504a2
parentb424a7e63cf35c31e3ba1a3b283f9d028b99dcd5 (diff)
Added optional argument to `textadept.editing.enclose()` to keep text selected.
-rw-r--r--modules/textadept/editing.lua9
-rw-r--r--test/test.lua8
2 files changed, 14 insertions, 3 deletions
diff --git a/modules/textadept/editing.lua b/modules/textadept/editing.lua
index f4f46f37..bd7c57d9 100644
--- a/modules/textadept/editing.lua
+++ b/modules/textadept/editing.lua
@@ -448,10 +448,13 @@ end
-- multiple selections into account.
-- @param left The left part of the enclosure.
-- @param right The right part of the enclosure.
+-- @param select Optional flag that indicates whether or not to keep enclosed text selected. The
+-- default value is `false`.
-- @name enclose
-function M.enclose(left, right)
+function M.enclose(left, right, select)
assert_type(left, 'string', 1)
assert_type(right, 'string', 2)
+ assert_type(select, 'boolean/nil', 3)
buffer:begin_undo_action()
for i = 1, buffer.selections do
local s, e = buffer.selection_n_start[i], buffer.selection_n_end[i]
@@ -461,8 +464,8 @@ function M.enclose(left, right)
end
buffer:set_target_range(s, e)
buffer:replace_target(left .. buffer.target_text .. right)
- buffer.selection_n_start[i] = buffer.target_end
- buffer.selection_n_end[i] = buffer.target_end
+ buffer.selection_n_start[i] = not select and buffer.target_end or buffer.target_start + #left
+ buffer.selection_n_end[i] = buffer.target_end - (not select and 0 or #right)
end
buffer:end_undo_action()
end
diff --git a/test/test.lua b/test/test.lua
index d81a3c0c..daffec91 100644
--- a/test/test.lua
+++ b/test/test.lua
@@ -1922,10 +1922,18 @@ function test_editing_enclose()
buffer:add_selection(buffer:position_from_line(2), buffer.line_end_position[2])
textadept.editing.enclose('-', '-')
assert_equal(buffer:get_text(), '-foo bar-\n-foo bar-')
+ assert(buffer.selection_empty, 'enclosed text still selected')
+ buffer:undo()
+ textadept.editing.enclose('*', '*', true)
+ assert_equal(buffer:get_sel_text(), 'bar')
+ textadept.editing.enclose('*', '*')
+ assert_equal(buffer:get_text(), 'foo **bar**\nfoo bar')
buffer:close(true)
assert_raises(function() textadept.editing.enclose() end, 'string expected, got nil')
assert_raises(function() textadept.editing.enclose('<', 1) end, 'string expected, got number')
+ assert_raises(function() textadept.editing.enclose('<', '>', 1) end,
+ 'boolean/nil expected, got number')
end
function test_editing_auto_enclose()