diff options
Diffstat (limited to 'modules/textadept')
-rw-r--r-- | modules/textadept/editing.lua | 57 | ||||
-rw-r--r-- | modules/textadept/keys.lua | 2 | ||||
-rw-r--r-- | modules/textadept/menu.lua | 9 |
3 files changed, 38 insertions, 30 deletions
diff --git a/modules/textadept/editing.lua b/modules/textadept/editing.lua index 75844a44..111930c7 100644 --- a/modules/textadept/editing.lua +++ b/modules/textadept/editing.lua @@ -284,25 +284,6 @@ function M.paste() end --- --- Goes to the current character's matching brace, selecting the text in between --- if *select* is `true`. --- @param select Optional flag indicating whether or not to select the text --- between matching braces. The default value is `false`. --- @name match_brace -function M.match_brace(select) - local pos = buffer.current_pos - local match_pos = buffer:brace_match(pos) - if match_pos == -1 then return end - if not select then - buffer:goto_pos(match_pos) - elseif match_pos > pos then - buffer:set_sel(pos, match_pos + 1) - else - buffer:set_sel(pos + 1, match_pos) - end -end - ---- -- Comments or uncomments the selected lines based on the current language. -- As long as any part of a line is selected, the entire line is eligible for -- commenting/uncommenting. @@ -426,14 +407,40 @@ end -- Selects the text between strings *left* and *right* that enclose the caret. -- If that range is already selected, toggles between selecting *left* and -- *right* as well. --- @param left The left part of the enclosure. --- @param right The right part of the enclosure. +-- If *left* and *right* are not provided, they are inferred from the current +-- position or selection. +-- @param left Optional left part of the enclosure. +-- @param right Optional right part of the enclosure. -- @name select_enclosed function M.select_enclosed(left, right) - local anchor, pos = buffer.anchor, buffer.current_pos - if anchor ~= pos then buffer:goto_pos(pos - #right) end - buffer:search_anchor() - local s, e = buffer:search_prev(0, left), buffer:search_next(0, right) + local s, e, anchor, pos = -1, -1, buffer.anchor, buffer.current_pos + if left and right then + if anchor ~= pos then buffer:goto_pos(pos - #right) end + buffer:search_anchor() + s, e = buffer:search_prev(0, left), buffer:search_next(0, right) + elseif M.auto_pairs then + s = buffer.selection_start + local char_at, style_at = buffer.char_at, buffer.style_at + while s >= 0 do + local match = M.auto_pairs[char_at[s]] + left, right = string.char(char_at[s]), match + if match then + if buffer:brace_match(s) >= buffer.selection_end - 1 then + e = buffer:brace_match(s) + break + elseif M.brace_matches[char_at[s]] or + style_at[s] == style_at[buffer.selection_start] then + buffer.search_flags = 0 + buffer:set_target_range(s + 1, buffer.length) + if buffer:search_in_target(match) >= buffer.selection_end - 1 then + e = buffer.target_end - 1 + break + end + end + end + s = s - 1 + end + end if s >= 0 and e >= 0 then if s + #left == anchor and e == pos then s, e = s - #left, e + #right end buffer:set_sel(s + #left, e) diff --git a/modules/textadept/keys.lua b/modules/textadept/keys.lua index 40ff9ef9..bd389775 100644 --- a/modules/textadept/keys.lua +++ b/modules/textadept/keys.lua @@ -303,7 +303,7 @@ keys.del = buffer.clear keys[not OSX and (GUI and 'adel' or 'mdel') or 'cdel'] = m_edit[_L['D_elete Word']][2] keys[not OSX and GUI and 'ca' or 'ma'] = buffer.select_all -keys[GUI and 'cm' or 'mm'] = textadept.editing.match_brace +keys[GUI and 'cm' or 'mm'] = m_edit[_L['_Match Brace']][2] keys[not OSX and ((GUI or WIN32) and 'c\n' or 'cmj') or 'cesc'] = m_edit[_L['Complete _Word']][2] if GUI then diff --git a/modules/textadept/menu.lua b/modules/textadept/menu.lua index ad23552f..7b2f2a81 100644 --- a/modules/textadept/menu.lua +++ b/modules/textadept/menu.lua @@ -90,7 +90,10 @@ local default_menubar = { end}, {_L['Select _All'], buffer.select_all}, SEPARATOR, - {_L['_Match Brace'], textadept.editing.match_brace}, + {_L['_Match Brace'], function() + local match_pos = buffer:brace_match(buffer.current_pos) + if match_pos >= 0 then buffer:goto_pos(match_pos) end + end}, {_L['Complete _Word'], function() textadept.editing.autocomplete('word') end}, @@ -103,9 +106,7 @@ local default_menubar = { end}, { title = _L['_Select'], - {_L['Select to _Matching Brace'], function() - textadept.editing.match_brace('select') - end}, + {_L['Select to _Matching Brace'], sel_enc}, {_L['Select between _XML Tags'], function() sel_enc('>', '<') end}, {_L['Select in XML _Tag'], function() sel_enc('<', '>') end}, {_L['Select in _Single Quotes'], function() sel_enc("'", "'") end}, |