#!/usr/bin/env sh if [ -f "/usr/local/bin/kak" ]; then kak="exec /usr/local/bin/kak" else kak="exec /usr/bin/kak" fi # Don't do stuff if we are being piped into if [ ! -t 0 ]; then echo "$(cat)" | $kak "$@" exit fi # Don't do stuff if any flags were passed to kak case "$1" in -L) shift $kak "$@" exit ;; -*) $kak "$@" exit ;; # Passing in a line number +*) $kak "$@" exit ;; esac # Change filename to absolute path # This only works with the first one, but that's fine if [ -n "$1" ]; then set -- "$(realpath $1)" fi # Attempt to root by git repo, or by .kakrc file basedir=$(git rev-parse --show-toplevel 2> /dev/null) if [ -n "$basedir" ]; then # Set session name session=$(basename "$basedir" | sed 's/\./-/g') # Change to project root dir cd "$basedir" else oldpwd="$PWD" while [ "$PWD" != "/" ]; do if [ -f .kakrc ] || [ -f .editorconfig ]; then session=$(basename "$PWD" | sed 's/\./-/g') break fi cd .. done # If not found, revert to original dir if [ -z "$session" ]; then cd "$oldpwd" fi fi sessions="$($kak -l)" if $(echo "$sessions" | grep -q "(dead)"); then echo "Clearing dead sessions" $kak -clear sessions="$($kak -l)" fi if [ -z "$session" ]; then $kak "$@" exit fi if $(echo "$sessions" | grep -q "^$session$"); then $kak -c $session "$@" else $kak -s $session "$@" fi