#!/bin/sh

in_tmux () {
	[ X != "X$TMUX" ]
}

need_tmux () {
	in_tmux || { echo >&2 "Not in tmux"; exit 1; }
}

safe_exec () {
	exec "$@"
	echo >&2 "Exec failed!"
	exit 255
}

# tmux has the opposite convention for which split is horizontal vs
# which split is vertical.

case $SHELL in
*csh) shellcmd="$SHELL -c '$*'" ;;
*) shellcmd="$SHELL -ilc '$*'" ;;
esac

if command -v vimx >/dev/null 2>&1; then
	vim=vimx
elif command -v vim >/dev/null 2>&1; then
	vim=vim
else
	vim=vi
fi

if in_tmux; then
	new_verb=new-window
else
	new_verb=new-session
fi

cmd=${0##*/}
if [ "$cmd" = "tmux_helper" ]; then
	cmd=${1##*/}
	shift
fi

case $cmd in
tmicro)                 safe_exec tmux $new_verb -n "file:$*" "micro \"$*\"" ;;
tnano)                  safe_exec tmux $new_verb -n "file:$*" "nano \"$*\"" ;;
thx)                    safe_exec tmux $new_verb -n "file:$*" "hx \"$*\"" ;;
tvim)                   safe_exec tmux $new_verb -n "file:$*" "$vim \"$*\"" ;;
tvims)       need_tmux; safe_exec tmux split-window    "$vim \"$*\"" ;;
tvimv)       need_tmux; safe_exec tmux split-window -h "$vim \"$*\"" ;;
tnew)                   safe_exec tmux $new_verb       "$shellcmd" ;;
tspl|tnews)  need_tmux; safe_exec tmux split-window    "$shellcmd" ;;
tvspl|tnewv) need_tmux; safe_exec tmux split-window -h "$shellcmd" ;;
tcd)
	cd "$*" || return $?
	safe_exec tmux $new_verb -n "${PWD##*/}" -c "$PWD"
	;;
tcds)
	need_tmux
	cd "$*" || return $?
	safe_exec tmux split-window -c "$PWD"
	;;
tcdv)
	need_tmux
	cd "$*" || return $?
	safe_exec tmux split-window -h -c "$PWD"
	;;
*)
	echo >&2 "Unknown command $cmd"
	exit 1
	;;
esac


# vim:ft=sh:noet:ts=8:sts=8:sw=8
