aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/textadept/editing.lua18
1 files changed, 15 insertions, 3 deletions
diff --git a/modules/textadept/editing.lua b/modules/textadept/editing.lua
index 06776219..8f8cdaa0 100644
--- a/modules/textadept/editing.lua
+++ b/modules/textadept/editing.lua
@@ -359,13 +359,25 @@ end
---
-- Encloses the selected text or the current word within strings *left* and
--- *right*.
+-- *right*, taking multiple selections into account.
-- @param left The left part of the enclosure.
-- @param right The right part of the enclosure.
-- @name enclose
function M.enclose(left, right)
- if buffer.selection_empty then M.select_word() end
- buffer:replace_sel(left..buffer:get_sel_text()..right)
+ buffer:begin_undo_action()
+ for i = 0, buffer.selections - 1 do
+ local s, e = buffer.selection_n_start[i], buffer.selection_n_end[i]
+ if s == e then
+ buffer:set_target_range(buffer:word_start_position(s, true),
+ buffer:word_end_position(e, true))
+ else
+ buffer:set_target_range(s, e)
+ end
+ buffer:replace_target(left..buffer.target_text..right)
+ buffer.selection_n_start[i] = buffer.target_end
+ buffer.selection_n_end[i] = buffer.target_end
+ end
+ buffer:end_undo_action()
end
---