Buffer insert and erase takes coord rather than iterators
This commit is contained in:
parent
2902cc3275
commit
7f17644a6b
|
@ -571,7 +571,7 @@ void Buffer::apply_modification(const Modification& modification)
|
||||||
{
|
{
|
||||||
ByteCount count = content.length();
|
ByteCount count = content.length();
|
||||||
BufferCoord end = advance(coord, count);
|
BufferCoord end = advance(coord, count);
|
||||||
kak_assert(string({*this, coord}, {*this, end}) == content);
|
kak_assert(string(coord, end) == content);
|
||||||
do_erase(coord, end);
|
do_erase(coord, end);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -580,31 +580,32 @@ void Buffer::apply_modification(const Modification& modification)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buffer::insert(BufferIterator pos, String content)
|
void Buffer::insert(BufferCoord pos, String content)
|
||||||
{
|
{
|
||||||
|
kak_assert(is_valid(pos));
|
||||||
if (content.empty())
|
if (content.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (pos.is_end() and content.back() != '\n')
|
if (is_end(pos) and content.back() != '\n')
|
||||||
content += '\n';
|
content += '\n';
|
||||||
|
|
||||||
if (not (m_flags & Flags::NoUndo))
|
if (not (m_flags & Flags::NoUndo))
|
||||||
m_current_undo_group.emplace_back(Modification::Insert, pos.coord(), content);
|
m_current_undo_group.emplace_back(Modification::Insert, pos, content);
|
||||||
do_insert(pos.coord(), content);
|
do_insert(pos, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buffer::erase(BufferIterator begin, BufferIterator end)
|
void Buffer::erase(BufferCoord begin, BufferCoord end)
|
||||||
{
|
{
|
||||||
if (end.is_end() and (begin.column() != 0 or begin.is_begin()))
|
if (is_end(end) and (begin.column != 0 or begin == BufferCoord{0,0}))
|
||||||
--end;
|
end = { line_count() - 1, m_lines.back().length() - 1};
|
||||||
|
|
||||||
if (begin == end)
|
if (begin == end)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (not (m_flags & Flags::NoUndo))
|
if (not (m_flags & Flags::NoUndo))
|
||||||
m_current_undo_group.emplace_back(Modification::Erase, begin.coord(),
|
m_current_undo_group.emplace_back(Modification::Erase, begin,
|
||||||
string(begin, end));
|
string(begin, end));
|
||||||
do_erase(begin.coord(), end.coord());
|
do_erase(begin, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Buffer::is_modified() const
|
bool Buffer::is_modified() const
|
||||||
|
|
|
@ -112,8 +112,8 @@ public:
|
||||||
|
|
||||||
bool set_name(String name);
|
bool set_name(String name);
|
||||||
|
|
||||||
void insert(BufferIterator pos, String content);
|
void insert(BufferCoord pos, String content);
|
||||||
void erase(BufferIterator begin, BufferIterator end);
|
void erase(BufferCoord begin, BufferCoord end);
|
||||||
|
|
||||||
size_t timestamp() const { return m_timestamp; }
|
size_t timestamp() const { return m_timestamp; }
|
||||||
|
|
||||||
|
@ -123,10 +123,6 @@ public:
|
||||||
|
|
||||||
String string(const BufferCoord& begin,
|
String string(const BufferCoord& begin,
|
||||||
const BufferCoord& end) const;
|
const BufferCoord& end) const;
|
||||||
String string(const BufferIterator& begin,
|
|
||||||
const BufferIterator& end) const
|
|
||||||
{ return string(begin.coord(), end.coord()); }
|
|
||||||
|
|
||||||
ByteCount offset(const BufferCoord& c) const;
|
ByteCount offset(const BufferCoord& c) const;
|
||||||
ByteCount distance(const BufferCoord& begin, const BufferCoord& end) const;
|
ByteCount distance(const BufferCoord& begin, const BufferCoord& end) const;
|
||||||
BufferCoord advance(BufferCoord coord, ByteCount count) const;
|
BufferCoord advance(BufferCoord coord, ByteCount count) const;
|
||||||
|
|
|
@ -38,7 +38,7 @@ void Editor::erase()
|
||||||
scoped_edition edition(*this);
|
scoped_edition edition(*this);
|
||||||
for (auto& sel : m_selections)
|
for (auto& sel : m_selections)
|
||||||
{
|
{
|
||||||
m_buffer->erase(sel.begin(), sel.end());
|
m_buffer->erase(sel.begin().coord(), sel.end().coord());
|
||||||
avoid_eol(sel);
|
avoid_eol(sel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ static BufferIterator prepare_insert(Buffer& buffer, const Selection& sel,
|
||||||
case InsertMode::Replace:
|
case InsertMode::Replace:
|
||||||
{
|
{
|
||||||
BufferIterator pos = sel.begin();
|
BufferIterator pos = sel.begin();
|
||||||
buffer.erase(sel.begin(), sel.end());
|
buffer.erase(sel.begin().coord(), sel.end().coord());
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
case InsertMode::Append:
|
case InsertMode::Append:
|
||||||
|
@ -72,17 +72,14 @@ static BufferIterator prepare_insert(Buffer& buffer, const Selection& sel,
|
||||||
case InsertMode::InsertAtNextLineBegin:
|
case InsertMode::InsertAtNextLineBegin:
|
||||||
return buffer.iterator_at_line_end(sel.end()-1);
|
return buffer.iterator_at_line_end(sel.end()-1);
|
||||||
case InsertMode::OpenLineBelow:
|
case InsertMode::OpenLineBelow:
|
||||||
{
|
|
||||||
LineCount line = (sel.end() - 1).line();
|
|
||||||
buffer.insert(buffer.iterator_at_line_end(line), "\n");
|
|
||||||
return buffer.iterator_at_line_begin(line + 1);
|
|
||||||
}
|
|
||||||
case InsertMode::OpenLineAbove:
|
case InsertMode::OpenLineAbove:
|
||||||
{
|
{
|
||||||
auto pos = buffer.iterator_at_line_begin(sel.begin());
|
auto line = mode == InsertMode::OpenLineAbove ?
|
||||||
buffer.insert(pos, "\n");
|
sel.begin().line() : (sel.end() - 1).line() + 1;
|
||||||
return pos;
|
buffer.insert(line, "\n");
|
||||||
|
return {buffer, line};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
kak_assert(false);
|
kak_assert(false);
|
||||||
return BufferIterator{};
|
return BufferIterator{};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user