From 3d6c4435d931d07ad5aaf7866a8791f5f0844612 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Thu, 28 Apr 2016 08:48:59 -0400 Subject: `enclose()` works with multiple selections; modules/textadept/editing.lua Thanks to Brian Schott. --- modules/textadept/editing.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'modules') 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 --- -- cgit v1.2.3