add alt-X for trimming non full lines

This commit is contained in:
Maxime Coste 2013-04-16 14:30:11 +02:00
parent 979cfc1ff2
commit d3961768ec
4 changed files with 20 additions and 0 deletions

View File

@ -59,6 +59,8 @@ Basic Movement
* _x_: select line on which selection end lies (or next line when end lies on
an end-of-line)
* _alt-x_: expand selections to contain full lines (including end-of-lines)
* _alt-X_: trim selections to only contain full lines (not including last
end-of-line)
* _%_: select whole buffer

View File

@ -759,6 +759,7 @@ KeyMap keymap =
{ { Key::Modifiers::None, 'x' }, repeated(select<SelectMode::Replace>(select_line)) },
{ { Key::Modifiers::None, 'X' }, repeated(select<SelectMode::Extend>(select_line)) },
{ { Key::Modifiers::Alt, 'x' }, select<SelectMode::Replace>(select_whole_lines) },
{ { Key::Modifiers::Alt, 'X' }, select<SelectMode::Replace>(trim_partial_lines) },
{ { Key::Modifiers::None, 'm' }, select<SelectMode::Replace>(select_matching) },
{ { Key::Modifiers::None, 'M' }, select<SelectMode::Extend>(select_matching) },

View File

@ -379,6 +379,22 @@ Selection select_whole_lines(const Selection& selection)
return Selection(first, last);
}
Selection trim_partial_lines(const Selection& selection)
{
// same as select_whole_lines
BufferIterator first = selection.first();
BufferIterator last = selection.last();
BufferIterator& to_line_start = first <= last ? first : last;
BufferIterator& to_line_end = first <= last ? last : first;
while (not is_begin(to_line_start) and *(to_line_start-1) != '\n')
++to_line_start;
while (*(to_line_end+1) != '\n' and to_line_end != to_line_start)
--to_line_end;
return Selection(first, last);
}
Selection select_whole_buffer(const Selection& selection)
{
const Buffer& buffer = selection.first().buffer();

View File

@ -29,6 +29,7 @@ template<bool punctuation_is_word>
Selection select_whole_word(const Selection& selection, bool inner);
Selection select_whole_lines(const Selection& selection);
Selection select_whole_buffer(const Selection& selection);
Selection trim_partial_lines(const Selection& selection);
template<bool forward>
Selection select_next_match(const Selection& selection, const Regex& regex);