scripts/autoattach

161 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Auto attach to tmux
#
CONF_FILE=$HOME/.autoattach.conf
###########################
function write_setting
{
if ! sed -i -E "s/^$1=.*/$1=$2/" $CONF_FILE 2> /dev/null; then
echo "$1=$2" >> $CONF_FILE
fi
}
function is_tmux_running
{
if [ -n "${TMUX}" ]; then
return 0
fi
return 1
}
function debug
{
if ! is_tmux_running; then
echo $1
fi
}
function attach_session
{
if is_tmux_running; then
exit 0
fi
tmux attach -t $1 2> /dev/null
# Check for exit status
if [ $? -gt 0 ]; then
echo "There is no tmux session '$1'"
if [ -z "${AUTO_CREATE}" ]; then
read -p "Do you want me to auto create sessions by default? [Y/n]: "
# convert to lowercase, then match
if [ "${REPLY,,}" = "y" -o -z "${REPLY}" ]; then
write_setting 'AUTO_CREATE' '1'
AUTO_CREATE=1
else
write_setting 'AUTO_CREATE' '0'
fi
fi
if [ "${AUTO_CREATE}" = "1" ]; then
tmux new-session -s $1 2> /dev/null
exit 0
fi
echo 'Nothing to do, exiting...'
exit 1
fi
}
function usage
{
echo "Usage: ${0}"
echo " -c | --clear"
echo " Delete configuration file"
echo " -s | --set auto_create on"
echo " Set configuration variable"
echo " auto_create on/off"
echo " Auto create session on start if session is missing"
echo " -h | --help"
echo " Show this usage"
exit 0
}
# Load configuration file
test -f $CONF_FILE && . $CONF_FILE
# Detect platform
PLATFORM='unknown'
unamestr=$(uname)
case "$unamestr" in
OpenBSD* )
debug "*BSD OS detected!!"
debug "Long options is disabled!!"
OPTS=`getopt chgs: $*`
set_opts_exit_status=$?
PLATFORM=$unamestr ;;
#if [ $? -ne 0 ]; then
# echo 'Usage: ...'
# exit 2
#fi
* )
OPTS=$(getopt -o chgs: -l clear,help,set:,get: -n 'autoattach' -- "$@")
set_opts_exit_status=$?
PLATFORM='Linux' ;;
esac
if [ "$set_opts_exit_status" -gt '0' ]; then
echo 'Failed to set command line arguments'
exit 1;
fi
eval set -- "$OPTS"
CLEAR=false
SET=false
while true; do
case "$1" in
-c | --clear ) CLEAR=true; shift ;;
-s | --set )
case "$2" in
'auto_create' )
case "$4" in
'on' )
echo 'Setting auto_create to 1'
write_setting 'AUTO_CREATE' '1'
shift;;
'off' )
echo 'Setting auto_create to 0'
write_setting 'AUTO_CREATE' '0'
shift;;
esac
shift;;
*)
echo "Failed to set configuration $2 $4"
exit 1
esac
exit 0
shift ;;
-h | --help ) usage; shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
# Clear default window
if [ $CLEAR = true ]; then
echo "Deleting configuration..."
rm -f $CONF_FILE
exit 0
fi
if [ -n "${SET}" -a $SET != false ]; then
echo "Updating configuration..."
write_setting $SET
exit 0
fi
# Check if this a drop down terminal from env
if [ -n "${DROP_DOWN_TERMINAL}" ]; then
attach_session drop_down
else
attach_session regular
fi