#!/bin/zsh -f if [[ $# -eq 0 ]] ; then echo "i3-connect-screen-session [ screen-instance [ -x ] | new [ -x ] | list | dmenu ]" exit fi function new-screen { exec screen } function new-screen-x { exec xterm +samename -class XTermScreen -e screen } function open-screen { exec screen -r $1 } function open-screen-x { exec xterm -e "screen -r $1" } function list-screen-sessions { screen -list | sed '$ d' | sed 1d | awk '{print $1}' } function external-completion-dispatch { if [[ $1 == "new" ]] ; then new-screen-x else open-screen-x $1 fi } function with-external-completion { if [[ -e `which rofi` ]] ; then SCREEN=`list-screen-sessions | rofi -dmenu -p "screen session:"` [[ $SCREEN != "" ]] && external-completion-dispatch $SCREEN else SCREEN=`list-screen-sessions | dmenu -p "screen session:"` [[ $SCREEN != "" ]] && open-screen-x $SCREEN fi } SCREEN=$1 shift case ${SCREEN} in list) list-screen-sessions ;; dmenu) with-external-completion ;; new) if [[ $1 == "-x" ]] ; then new-screen-x else new-screen fi ;; *) if [[ $1 == "-x" ]] ; then open-screen-x $SCREEN else open-screen $SCREEN fi esac