#!/bin/bash function screen-new-session() { # Usage: screen-new-session session-name screen -d -m -S $1 } function screen-kill-session() { # Usage: screen-kill-session session-name screen -S $1 -X quit || echo Failed to kill session "$1" } function screen-guarantee-session() { # Usage: screen-guarantee session-name screen -ls | grep -i '(dead' && screen -wipe screen -ls | egrep -e "[0-9]+\.${1}[[:space:]]" || screen-new-session $1 } function screen-new-window() { # Usage: screen-new-window session-name window-name screen -S "$1" -X screen -t "$2" # FIXME: when involing -X screen -t "$2", some crazy tty settings # get put in place (backspace kills lines instead of backspacing) screen-send-line "$1" "$2" "stty sane; bash; exit" } function screen-get-current-window() { # Usage: screen-get-current-window # stdout := name of current window screen -S "$1" -X screen -t "$2" } function screen-send-line() { # Usage: screen-new-line session-name window-name line screen -S "$1" -p "$2" -X stuff "${3} " } function v() { # v - attach to the v screen # v filename - edit filename in a v screen screen-guarantee-session v if [ "$*" != "" ]; then pushd `dirname $*` dir=`pwd` popd basename=`basename $*` echo "$basename" "$dir" >> ~/.v_history window="$basename $dir" screen-new-window v "$window" screen-send-line v "$window" "cd \"`pwd`\"" screen-send-line v "$window" "vim \"$*\"" fi echo $TERMCAP | grep screen > /dev/null && echo 'You are inside of a screen' || screen -x v -p "$window" } function e() { # e filename - edit filename using emacs in a v screen screen-guarantee-session v if [ "$*" != "" ]; then pushd `dirname $*` dir=`pwd` popd basename=`basename $*` echo "$basename" "$dir" >> ~/.v_history window="$basename $dir" screen-new-window v "$window" screen-send-line v "$window" "cd \"`pwd`\"" screen-send-line v "$window" "DISPLAY='' emacs \"$*\"" fi echo $TERMCAP | grep screen > /dev/null && echo 'You are inside of a screen' || screen -x v -p "$window" }