From 3d5a0c672e6f3cf87944b33712e17531aa42c607 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 28 Feb 2024 19:00:51 +1100 Subject: Templatize StringData::create This improves performance by letting the compiler optimize most use cases where string count and length are known are compile time. --- src/buffer_manager.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/buffer_manager.cc') diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 32d03fc1..22ccf366 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -83,8 +83,8 @@ Buffer& BufferManager::get_first_buffer() { if (all_of(m_buffers, [](auto& b) { return (b->flags() & Buffer::Flags::Debug); })) create_buffer("*scratch*", Buffer::Flags::None, - {StringData::create({"*** this is a *scratch* buffer which won't be automatically saved ***\n"}), - StringData::create({"*** use it for notes or open a file buffer with the :edit command ***\n"})}, + {StringData::create("*** this is a *scratch* buffer which won't be automatically saved ***\n"), + StringData::create("*** use it for notes or open a file buffer with the :edit command ***\n")}, ByteOrderMark::None, EolFormat::Lf, {InvalidTime, {}, {}}); return *m_buffers.back(); -- cgit v1.2.3 From b8a151ab46cc873a36f6c44e61842e5db3f523ca Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 28 Feb 2024 20:54:37 +1100 Subject: Fix unnecessary buffer line copy in BufferManager::create_buffer --- src/buffer_manager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/buffer_manager.cc') diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 22ccf366..45a50c3c 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -34,7 +34,7 @@ Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, BufferLin throw runtime_error{"buffer name is already in use"}; } - m_buffers.push_back(std::make_unique(std::move(name), flags, lines, bom, eolformat, fs_status)); + m_buffers.push_back(std::make_unique(std::move(name), flags, std::move(lines), bom, eolformat, fs_status)); auto* buffer = m_buffers.back().get(); buffer->on_registered(); -- cgit v1.2.3 From 5fd9bb59e35ceeeb0d6661ff5fad950a85c7612a Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 19 Apr 2024 16:37:21 +1000 Subject: Add buffer -matching switch --- src/buffer_manager.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/buffer_manager.cc') diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 45a50c3c..447b47c1 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -7,6 +7,7 @@ #include "file.hh" #include "ranges.hh" #include "string.hh" +#include "regex.hh" namespace Kakoune { @@ -79,6 +80,24 @@ Buffer& BufferManager::get_buffer(StringView name) return *res; } +Buffer* BufferManager::get_buffer_matching_ifp(const Regex& regex) +{ + for (auto& buf : m_buffers | reverse()) + { + if (StringView name = buf->name(); regex_match(name.begin(), name.end(), regex)) + return buf.get(); + } + return nullptr; +} + +Buffer& BufferManager::get_buffer_matching(const Regex& regex) +{ + Buffer* res = get_buffer_matching_ifp(regex); + if (not res) + throw runtime_error{format("no buffer matching '{}'", regex.str())}; + return *res; +} + Buffer& BufferManager::get_first_buffer() { if (all_of(m_buffers, [](auto& b) { return (b->flags() & Buffer::Flags::Debug); })) -- cgit v1.2.3 From e8ad943532f2211dcbaeb2e75f71ef2f6516dd7f Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 19 Apr 2024 17:04:41 +1000 Subject: Ensure re-used fifo buffers makes that buffer the latest opened --- src/buffer_manager.cc | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/buffer_manager.cc') diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 447b47c1..35f0fcde 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -149,4 +149,11 @@ void BufferManager::arrange_buffers(ConstArrayView first_ones) m_buffers = std::move(res); } +void BufferManager::make_latest(Buffer& buffer) +{ + auto it = find(m_buffers, &buffer); + kak_assert(it != m_buffers.end()); + std::rotate(it, it+1, m_buffers.end()); +} + } -- cgit v1.2.3