#!/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