dotfiles/.config/kak/scripts/kak-session.sh

31 lines
797 B
Bash
Executable file

#!/bin/sh
root="$(
set -e
gitdir=$(git rev-parse --git-dir 2>/dev/null)
set +e
cd "$gitdir"/.. # This is horrible.
git rev-parse --show-toplevel
)"
session_name="$(printf %s ${root##*/} | sed s/[^a-zA-Z0-9_-]/_/g)"
if printf %s "$1" | grep -q '^[^+-][^:]\+:[0-9]\+'; then
file=${1%:*}
pos=${1#*:}
shift
set -- "+$pos" "$file" "$@"
fi
# "kak -l" hangs occasionally, so check the socket directly
if [ -n "$session_name" ] && {
[ -e "${XDG_RUNTIME_DIR}/kakoune/$session_name" ] ||
[ -e "${TMPDIR:-/tmp}/kakoune-$USER/$session_name" ]
} ; then
# Force-reload if we get a file argument (useful for .git/COMMIT_EDITMSG).
if [ $# -gt 0 ] && ! printf %s\\n "$@" | grep -q ^-e; then
set -- -e 'try edit!' "$@"
fi
exec kak -c $session_name "$@"
else
exec kak -s "$session_name" "$@"
fi