diff options
author | mitchell <none@none> | 2021-11-30 14:52:50 -0500 |
---|---|---|
committer | mitchell <none@none> | 2021-11-30 14:52:50 -0500 |
commit | 68168e165079b95a3a7d24e21bf9a1250c801b16 (patch) | |
tree | b165c21b44584714c50893375e8c4720735504a2 | |
parent | b424a7e63cf35c31e3ba1a3b283f9d028b99dcd5 (diff) |
Added optional argument to `textadept.editing.enclose()` to keep text selected.
-rw-r--r-- | modules/textadept/editing.lua | 9 | ||||
-rw-r--r-- | test/test.lua | 8 |
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() |