From 68168e165079b95a3a7d24e21bf9a1250c801b16 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 30 Nov 2021 14:52:50 -0500 Subject: Added optional argument to `textadept.editing.enclose()` to keep text selected. --- modules/textadept/editing.lua | 9 ++++++--- 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() -- cgit v1.2.3