summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-02-18 14:48:24 +1100
committerMaxime Coste <mawww@kakoune.org>2018-02-18 14:48:24 +1100
commit10c6c59a26f2c2ffec81aeadeac079aeac0e32cf (patch)
tree42166d0e7077417c6b7891ac8ef120e164dde2a8
parent82c8a6e9dd7aab04463b8795f5bc53591d374891 (diff)
Buffer: avoid expensive option flattening in on_registred with NoHooks
-rw-r--r--src/buffer.cc6
-rw-r--r--src/main.cc4
2 files changed, 8 insertions, 2 deletions
diff --git a/src/buffer.cc b/src/buffer.cc
index 22f4a794..2de29b97 100644
--- a/src/buffer.cc
+++ b/src/buffer.cc
@@ -107,6 +107,12 @@ void Buffer::on_registered()
options().register_watcher(*this);
+ if (m_flags & Buffer::Flags::NoHooks)
+ {
+ on_option_changed(options()["readonly"]);
+ return;
+ }
+
run_hook_in_own_context("BufCreate", m_name);
if (m_flags & Flags::File)
diff --git a/src/main.cc b/src/main.cc
index 555f5eba..088f9c0f 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -772,7 +772,7 @@ int run_filter(StringView keystr, StringView commands, ConstArrayView<StringView
for (auto& file : files)
{
- Buffer* buffer = open_file_buffer(file);
+ Buffer* buffer = open_file_buffer(file, Buffer::Flags::NoHooks);
if (not suffix_backup.empty())
write_buffer_to_file(*buffer, buffer->name() + suffix_backup);
apply_to_buffer(*buffer);
@@ -782,7 +782,7 @@ int run_filter(StringView keystr, StringView commands, ConstArrayView<StringView
if (not isatty(0))
{
Buffer& buffer = *buffer_manager.create_buffer(
- "*stdin*", Buffer::Flags::None, read_fd(0), InvalidTime);
+ "*stdin*", Buffer::Flags::NoHooks, read_fd(0), InvalidTime);
apply_to_buffer(buffer);
write_buffer_to_fd(buffer, 1);
buffer_manager.delete_buffer(buffer);