diff --git a/.config/fish/conf.d/abbr.fish b/.config/fish/conf.d/abbr.fish index f546fad2..7419303b 100644 --- a/.config/fish/conf.d/abbr.fish +++ b/.config/fish/conf.d/abbr.fish @@ -18,6 +18,3 @@ abbr -a blu systemctl --user restart blueman-applet.service abbr -a hniri hx /home/fic/.config/niri/main.kdl abbr -a hbf hut builds show --follow abbr -a k kak -abbr -a krc kak -e \'cd ~/.config/kak\' ~/.config/kak/kakrc -abbr -a kakrc kak -e \'cd ~/.config/kak\' ~/.config/kak/kakrc -abbr -a kniri kak -e \'cd ~/.config/niri\' ~/.config/niri/main.kdl diff --git a/.config/fish/functions/kakrc.fish b/.config/fish/functions/kakrc.fish new file mode 100644 index 00000000..7ab2e61f --- /dev/null +++ b/.config/fish/functions/kakrc.fish @@ -0,0 +1,3 @@ +function kakrc + kak -e 'cd ~/.config/kak' ~/.config/kak/kakrc +end diff --git a/.config/fish/functions/kniri.fish b/.config/fish/functions/kniri.fish new file mode 100644 index 00000000..d303cd20 --- /dev/null +++ b/.config/fish/functions/kniri.fish @@ -0,0 +1,3 @@ +function kniri + kak -e 'cd ~/.config/niri' ~/.config/niri/main.kdl +end diff --git a/.config/kak/scripts/kak-typ-zathura.fish b/.config/kak/scripts/kak-typ-zathura.fish index 88d4940c..b7bc2eb1 100755 --- a/.config/kak/scripts/kak-typ-zathura.fish +++ b/.config/kak/scripts/kak-typ-zathura.fish @@ -3,14 +3,13 @@ # hx-typ-zathura: easily preview your typst documents from Helix! # This script will automatically find a pdf that matches your # current Typst document and attempt to open it with Zathura. -# Optionally, it will quit Zathura when you close Helix, and -# uses typst watch to continuously compile the file. +# Optionally, it will quit Zathura when you close Helix. # Run this script with --help for usage info! # Author: Daniel Fichtinger ' echo 'License: MIT' return 0 @@ -48,70 +43,40 @@ function qecho end end -# absolute path of %{buffer_name} file -set -g src_path (path resolve $argv[1]) - # check if the user asked to kill zathura on helix exit -# or to watch the pdf -if set -q _flag_k || set -q _flag_w - if set -q _flag_k - set kill_parent - end - if set -q _flag_w - set typst_watch +if set -q _flag_k + set kill_parent + set client_id $_flag_p + # traverse up process tree to find caller Helix PID + # We use this PID to kill zathura if Helix exits first! + # we only need to define this function + # inside this scope + function find_parent_process + echo "$client_id" end - if not set -q _flag_s - qecho "You must provide --session= with --kill-on-exit or --watch." + set parent_pid (find_parent_process hx) + if test -z "$parent_pid" + qecho "Couldn't find parent hx process!" return $ret end - set session_name $_flag_s - set session_socket "$XDG_RUNTIME_DIR/kakoune/$session_name" - if not test -S "$session_socket" - qecho "Session $session_name not found!" - return $ret - end - -end - -function monitor_kak - set -l socket $argv[1] - set -l zathura_pid $argv[2] - set -l typst_pid $argv[3] - - set -l dir (path dirname "$socket") - set -l file (path basename "$socket") - - inotifywait -q -e delete,delete_self,moved_from --format '%f' "$dir" | while read filename - if test "$filename" = "$file" - kill $zathura_pid &> /dev/null - if test -n "$typst_pid" - kill $typst_pid &>/dev/null - end - break - end - end end # opens zathura, optionally watching for helix closing function zopen --wraps zathura - set -f pdf_path $argv[1] - # this should be set if the user asked to kill + # this should be set if the user asked to watch if set -q kill_parent # create background sub-process # otherwise helix will hang begin - zathura "$pdf_path" &>/dev/null & + zathura "$argv[1]" &>/dev/null & set zathura_pid $last_pid - if set -q typst_watch - typst watch "$src_path" "$pdf_path" &>/dev/null & - set -f typst_pid $last_pid - end - monitor_kak "$session_socket" "$zathura_pid" "$typst_pid" & + waitpid -c 1 "$parent_pid" "$zathura_pid" + kill $zathura_pid &>/dev/null end & else - # user didn't ask for kill, so open normally - zathura "$pdf_path" &>/dev/null & + # user didn't ask for watch, so open normally + zathura "$argv[1]" &>/dev/null & end true end @@ -128,17 +93,19 @@ function find_pdf end end -# echo $src_path +# absolute path of %{buffer_name} file +set -l src (path resolve $argv[1]) +# echo $src # return 0 # exit if not a typst file -if not string match -q '*.typ' $src_path - qecho "$(path basename $src_path) is not a Typst file!" +if not string match -q '*.typ' $src + qecho "$(path basename $src) is not a Typst file!" return $ret end # change abs path to pdf extension -set -l targ (string replace --regex '\.typ$' '.pdf' $src_path) +set -l targ (string replace --regex '\.typ$' '.pdf' $src) # get pdf target's base name -set -l base (path basename --no-extension $src_path).pdf +set -l base (path basename --no-extension $src).pdf # if a suitable pdf exists in the same dir, open it if test -f "$targ" @@ -160,3 +127,4 @@ else end end end +