Change BufReadFifo hook param to contain the inserted range
the buffer name was not a very interesting information, whereas the buffer range allows a hook to run only on the appended text instead of all the buffer.
This commit is contained in:
parent
021ba55b38
commit
9a68a2d3af
|
@ -131,9 +131,10 @@ name. Hooks with no description will always use an empty string.
|
||||||
*BufOpenFifo* `buffer name`::
|
*BufOpenFifo* `buffer name`::
|
||||||
executed when a buffer opens a fifo
|
executed when a buffer opens a fifo
|
||||||
|
|
||||||
*BufReadFifo* `buffer name`::
|
*BufReadFifo* `<start line>.<start column>,<end line>.<end column>`::
|
||||||
executed after some data has been read from a fifo and inserted in
|
executed after some data has been read from a fifo and inserted in
|
||||||
the buffer
|
the buffer. The hook param contains the range of text that was just
|
||||||
|
inserted, in a format compatible with the `select` command.
|
||||||
|
|
||||||
*BufCloseFifo*::
|
*BufCloseFifo*::
|
||||||
executed when a fifo buffer closes its fifo file descriptor either
|
executed when a fifo buffer closes its fifo file descriptor either
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "buffer_manager.hh"
|
#include "buffer_manager.hh"
|
||||||
#include "event_manager.hh"
|
#include "event_manager.hh"
|
||||||
#include "file.hh"
|
#include "file.hh"
|
||||||
|
#include "selection.hh"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
@ -127,8 +128,10 @@ Buffer* create_fifo_buffer(String name, int fd, Buffer::Flags flags, bool scroll
|
||||||
// if we read data slower than it arrives in the fifo, limiting the
|
// if we read data slower than it arrives in the fifo, limiting the
|
||||||
// iteration number allows us to go back go back to the event loop and
|
// iteration number allows us to go back go back to the event loop and
|
||||||
// handle other events sources (such as input)
|
// handle other events sources (such as input)
|
||||||
size_t loops = 16;
|
constexpr size_t max_loop = 16;
|
||||||
|
size_t loop = 0;
|
||||||
char data[buffer_size];
|
char data[buffer_size];
|
||||||
|
BufferCoord insert_coord;
|
||||||
const int fifo = watcher.fd();
|
const int fifo = watcher.fd();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -144,6 +147,8 @@ Buffer* create_fifo_buffer(String name, int fd, Buffer::Flags flags, bool scroll
|
||||||
if (prevent_scrolling)
|
if (prevent_scrolling)
|
||||||
pos = buffer->next(pos);
|
pos = buffer->next(pos);
|
||||||
|
|
||||||
|
if (loop == 0)
|
||||||
|
insert_coord = pos;
|
||||||
buffer->insert(pos, StringView(data, data+count));
|
buffer->insert(pos, StringView(data, data+count));
|
||||||
|
|
||||||
if (prevent_scrolling)
|
if (prevent_scrolling)
|
||||||
|
@ -155,9 +160,10 @@ Buffer* create_fifo_buffer(String name, int fd, Buffer::Flags flags, bool scroll
|
||||||
buffer->insert(buffer->end_coord(), "\n");
|
buffer->insert(buffer->end_coord(), "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (--loops and fd_readable(fifo));
|
while (++loop < max_loop and fd_readable(fifo));
|
||||||
|
|
||||||
buffer->run_hook_in_own_context(Hook::BufReadFifo, buffer->name());
|
buffer->run_hook_in_own_context(Hook::BufReadFifo,
|
||||||
|
selection_to_string({insert_coord, buffer->back_coord()}));
|
||||||
}), std::move(watcher_deleter));
|
}), std::move(watcher_deleter));
|
||||||
|
|
||||||
buffer->values()[fifo_watcher_id] = Value(std::move(watcher));
|
buffer->values()[fifo_watcher_id] = Value(std::move(watcher));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user