Editor::move_selection now either takes a LineCount or a CharCount
This commit is contained in:
parent
669d2e456f
commit
9ae8f5e47b
|
@ -98,13 +98,27 @@ std::vector<String> Editor::selections_content() const
|
||||||
return contents;
|
return contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::move_selections(const BufferCoord& offset, SelectMode mode)
|
void Editor::move_selections(CharCount offset, SelectMode mode)
|
||||||
|
{
|
||||||
|
assert(mode == SelectMode::Replace or mode == SelectMode::Extend);
|
||||||
|
for (auto& sel : m_selections)
|
||||||
|
{
|
||||||
|
auto last = sel.last();
|
||||||
|
last = clamp(last + offset,
|
||||||
|
buffer().iterator_at_line_begin(last),
|
||||||
|
buffer().iterator_at_line_end(last)-1);
|
||||||
|
sel.selection = Selection(mode == SelectMode::Extend ? sel.first() : last, last);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Editor::move_selections(LineCount offset, SelectMode mode)
|
||||||
{
|
{
|
||||||
assert(mode == SelectMode::Replace or mode == SelectMode::Extend);
|
assert(mode == SelectMode::Replace or mode == SelectMode::Extend);
|
||||||
for (auto& sel : m_selections)
|
for (auto& sel : m_selections)
|
||||||
{
|
{
|
||||||
BufferCoord pos = m_buffer.line_and_column_at(sel.last());
|
BufferCoord pos = m_buffer.line_and_column_at(sel.last());
|
||||||
BufferIterator last = m_buffer.iterator_at(pos + offset, true);
|
pos.line += offset;
|
||||||
|
BufferIterator last = m_buffer.iterator_at(pos, true);
|
||||||
sel.selection = Selection(mode == SelectMode::Extend ? sel.first() : last, last);
|
sel.selection = Selection(mode == SelectMode::Extend ? sel.first() : last, last);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,9 @@ public:
|
||||||
void replace(const String& string);
|
void replace(const String& string);
|
||||||
void replace(const memoryview<String>& strings);
|
void replace(const memoryview<String>& strings);
|
||||||
|
|
||||||
void move_selections(const BufferCoord& offset,
|
void move_selections(LineCount move,
|
||||||
|
SelectMode mode = SelectMode::Replace);
|
||||||
|
void move_selections(CharCount move,
|
||||||
SelectMode mode = SelectMode::Replace);
|
SelectMode mode = SelectMode::Replace);
|
||||||
void clear_selections();
|
void clear_selections();
|
||||||
void keep_selection(int index);
|
void keep_selection(int index);
|
||||||
|
|
18
src/main.cc
18
src/main.cc
|
@ -219,7 +219,7 @@ void do_join(Context& context)
|
||||||
editor.multi_select(std::bind(select_all_matches, _1, "\n\\h*"));
|
editor.multi_select(std::bind(select_all_matches, _1, "\n\\h*"));
|
||||||
editor.replace(" ");
|
editor.replace(" ");
|
||||||
editor.clear_selections();
|
editor.clear_selections();
|
||||||
editor.move_selections({0, -1});
|
editor.move_selections(-1_char);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<bool inner>
|
template<bool inner>
|
||||||
|
@ -340,15 +340,15 @@ String runtime_directory()
|
||||||
|
|
||||||
std::unordered_map<Key, std::function<void (Context& context)>> keymap =
|
std::unordered_map<Key, std::function<void (Context& context)>> keymap =
|
||||||
{
|
{
|
||||||
{ { Key::Modifiers::None, 'h' }, [](Context& context) { context.editor().move_selections({ 0, -std::max(context.numeric_param(),1) }); } },
|
{ { Key::Modifiers::None, 'h' }, [](Context& context) { context.editor().move_selections(-CharCount(std::max(context.numeric_param(),1))); } },
|
||||||
{ { Key::Modifiers::None, 'j' }, [](Context& context) { context.editor().move_selections({ std::max(context.numeric_param(),1), 0 }); } },
|
{ { Key::Modifiers::None, 'j' }, [](Context& context) { context.editor().move_selections( LineCount(std::max(context.numeric_param(),1))); } },
|
||||||
{ { Key::Modifiers::None, 'k' }, [](Context& context) { context.editor().move_selections({ -std::max(context.numeric_param(),1), 0 }); } },
|
{ { Key::Modifiers::None, 'k' }, [](Context& context) { context.editor().move_selections(-LineCount(std::max(context.numeric_param(),1))); } },
|
||||||
{ { Key::Modifiers::None, 'l' }, [](Context& context) { context.editor().move_selections({ 0, std::max(context.numeric_param(),1) }); } },
|
{ { Key::Modifiers::None, 'l' }, [](Context& context) { context.editor().move_selections( CharCount(std::max(context.numeric_param(),1))); } },
|
||||||
|
|
||||||
{ { Key::Modifiers::None, 'H' }, [](Context& context) { context.editor().move_selections({ 0, -std::max(context.numeric_param(),1) }, SelectMode::Extend); } },
|
{ { Key::Modifiers::None, 'H' }, [](Context& context) { context.editor().move_selections(-CharCount(std::max(context.numeric_param(),1)), SelectMode::Extend); } },
|
||||||
{ { Key::Modifiers::None, 'J' }, [](Context& context) { context.editor().move_selections({ std::max(context.numeric_param(),1), 0 }, SelectMode::Extend); } },
|
{ { Key::Modifiers::None, 'J' }, [](Context& context) { context.editor().move_selections( LineCount(std::max(context.numeric_param(),1)), SelectMode::Extend); } },
|
||||||
{ { Key::Modifiers::None, 'K' }, [](Context& context) { context.editor().move_selections({ -std::max(context.numeric_param(),1), 0 }, SelectMode::Extend); } },
|
{ { Key::Modifiers::None, 'K' }, [](Context& context) { context.editor().move_selections(-LineCount(std::max(context.numeric_param(),1)), SelectMode::Extend); } },
|
||||||
{ { Key::Modifiers::None, 'L' }, [](Context& context) { context.editor().move_selections({ 0, std::max(context.numeric_param(),1) }, SelectMode::Extend); } },
|
{ { Key::Modifiers::None, 'L' }, [](Context& context) { context.editor().move_selections( CharCount(std::max(context.numeric_param(),1)), SelectMode::Extend); } },
|
||||||
|
|
||||||
{ { Key::Modifiers::None, 't' }, select_to_next_char<SelectFlags::None> },
|
{ { Key::Modifiers::None, 't' }, select_to_next_char<SelectFlags::None> },
|
||||||
{ { Key::Modifiers::None, 'f' }, select_to_next_char<SelectFlags::Inclusive> },
|
{ { Key::Modifiers::None, 'f' }, select_to_next_char<SelectFlags::Inclusive> },
|
||||||
|
|
Loading…
Reference in New Issue
Block a user