summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-09-12 19:54:46 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-09-12 19:54:46 +0200
commitf6d2533caed435f407f034cf0ffcdf3c4f0999aa (patch)
tree57bffdd8bad9af5a0ec8f2f97e354c9b7df52850 /src
parenta467d7311593dc4a7f6ffe4a4db9254e5ade3b8c (diff)
rework fifo handling, use real fifos in {make,grep}.kak, update README
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc12
-rw-r--r--src/event_manager.cc2
-rw-r--r--src/rc/grep.kak7
-rw-r--r--src/rc/make.kak7
4 files changed, 17 insertions, 11 deletions
diff --git a/src/commands.cc b/src/commands.cc
index 2ef70a17..90dfa394 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -247,11 +247,15 @@ Buffer* open_fifo(const String& name , const String& filename, Context& context)
EventManager::instance().watch(fd, [buffer, &context](int fd) {
char data[512];
ssize_t count = read(fd, data, 512);
- if (count > 0)
+ buffer->insert(buffer->end()-1,
+ count > 0 ? String(data, data+count)
+ : "*** kak: fifo closed ***\n");
+ buffer->reset_undo_data();
+ context.draw_ifn();
+ if (count <= 0)
{
- buffer->insert(buffer->end()-1, String(data, data + count));
- buffer->reset_undo_data();
- context.draw_ifn();
+ close(fd);
+ EventManager::instance().unwatch(fd);
}
});
diff --git a/src/event_manager.cc b/src/event_manager.cc
index 2a8df29c..3ac0ce3a 100644
--- a/src/event_manager.cc
+++ b/src/event_manager.cc
@@ -36,7 +36,7 @@ void EventManager::handle_next_events()
{
for (size_t i = 0; i < m_events.size(); ++i)
{
- if (m_events[i].revents & POLLIN)
+ if (m_events[i].revents)
m_handlers[i](m_events[i].fd);
}
}
diff --git a/src/rc/grep.kak b/src/rc/grep.kak
index a1a25874..e5ef5230 100644
--- a/src/rc/grep.kak
+++ b/src/rc/grep.kak
@@ -1,12 +1,13 @@
def -shell-params -file-completion \
grep %{ echo grep in progress, please wait...; %sh{
- output=$(mktemp -t kak-grep.XXXXXXXX)
- grep -PHn $@ >& ${output} < /dev/null &
+ output=$(mktemp -t -d kak-grep.XXXXXXXX)/fifo
+ mkfifo ${output}
+ ( grep -PHn "$@" >& ${output} ) >& /dev/null < /dev/null &
echo "echo
try %{ db *grep* } catch %{ }
edit -fifo ${output} *grep*
setb filetype grep
- hook buffer BufClose .* %{ %sh{ rm ${output} } }"
+ hook buffer BufClose .* %{ %sh{ rm -r $(dirname ${output}) } }"
}}
hook global WinSetOption filetype=grep %{
diff --git a/src/rc/make.kak b/src/rc/make.kak
index 346c70f0..f64cea01 100644
--- a/src/rc/make.kak
+++ b/src/rc/make.kak
@@ -1,11 +1,12 @@
def -shell-params make %{ echo make in progress, please wait...; %sh{
- output=$(mktemp -t kak-make.XXXXXXXX)
- make $@ >& ${output} < /dev/null &
+ output=$(mktemp -t -d kak-make.XXXXXXXX)/fifo
+ mkfifo ${output}
+ ( make $@ >& ${output} ) >& /dev/null < /dev/null &
echo "echo
try %{ db *make* } catch %{ }
edit -fifo ${output} *make*
setb filetype make
- hook buffer BufClose .* %{ %sh{ rm ${output} } }"
+ hook buffer BufClose .* %{ %sh{ rm -r $(dirname ${output}) } }"
}}
hook global WinSetOption filetype=make %{