aboutsummaryrefslogtreecommitdiff
path: root/dot_config/kak/autoload/rc/tools/fifo.kak
diff options
context:
space:
mode:
authortwells46 <173561638+twells46@users.noreply.github.com>2025-12-31 13:28:05 -0600
committertwells46 <173561638+twells46@users.noreply.github.com>2025-12-31 13:28:05 -0600
commit2140ab51deed88e90eafebf9520fa5f9995dc7c9 (patch)
tree03cf1dcd2900495c1efb79aaa85f3254ecd5fb87 /dot_config/kak/autoload/rc/tools/fifo.kak
parentff8f50638e4b17a9d7cc88d2f0d9560b7effce39 (diff)
Migrate from stow
Diffstat (limited to 'dot_config/kak/autoload/rc/tools/fifo.kak')
-rw-r--r--dot_config/kak/autoload/rc/tools/fifo.kak35
1 files changed, 35 insertions, 0 deletions
diff --git a/dot_config/kak/autoload/rc/tools/fifo.kak b/dot_config/kak/autoload/rc/tools/fifo.kak
new file mode 100644
index 0000000..ea98c0e
--- /dev/null
+++ b/dot_config/kak/autoload/rc/tools/fifo.kak
@@ -0,0 +1,35 @@
+provide-module fifo %{
+
+define-command -params .. -docstring %{
+ fifo [-name <name>] [-scroll] [-script <script>] [--] <args>...: run command in a fifo buffer
+ if <script> is used, eval it with <args> as '$@', else pass arguments directly to the shell
+} fifo %{ evaluate-commands %sh{
+ name='*fifo*'
+ while true; do
+ case "$1" in
+ "-scroll") scroll="-scroll"; shift ;;
+ "-script") script="$2"; shift 2 ;;
+ "-name") name="$2"; shift 2 ;;
+ "--") shift; break ;;
+ *) break ;;
+ esac
+ done
+ output=$(mktemp -d "${TMPDIR:-/tmp}"/kak-fifo.XXXXXXXX)/fifo
+ mkfifo ${output}
+ if [ -n "$script" ]; then
+ ( eval "$script" > ${output} 2>&1 & ) > /dev/null 2>&1 < /dev/null
+ else
+ ( "$@" > ${output} 2>&1 & ) > /dev/null 2>&1 < /dev/null
+ fi
+
+ printf %s\\n "
+ edit! -fifo ${output} ${scroll} ${name}
+ hook -always -once buffer BufCloseFifo .* %{ nop %sh{ rm -r $(dirname ${output}) } }
+ "
+ }}
+
+complete-command fifo shell
+
+}
+
+hook -once global KakBegin .* %{ require-module fifo }