my x wrapping tool
This commit is contained in:
parent
406e24dff9
commit
7286240119
1 changed files with 106 additions and 0 deletions
106
scripts/prefix/bin/x
Executable file
106
scripts/prefix/bin/x
Executable file
|
@ -0,0 +1,106 @@
|
|||
#!/bin/bash
|
||||
# This bash script is designed to be called from a command prompt in your #
|
||||
# favorite tiling window-manager or desktop environment or from any graphical #
|
||||
# program running in X. #
|
||||
# It handles wrapping the command you give it as an argument in X, that is #
|
||||
# to say in your favorite terminal emulator. By default it also wraps your #
|
||||
# command in a tmux terminal, either by creating a new session, or by adding a #
|
||||
# window to a pre-existing session: #
|
||||
# #
|
||||
# Terminal [ Tmux ( Command ) ] #
|
||||
# #
|
||||
# Called without argument, it will start the command $DEFAULTSHELL. If a #
|
||||
# terminal window has already been opened, it will NOT create a new one, but #
|
||||
# add instead a new tmux window in the current tmux session, or if no session #
|
||||
# is started, this script will start a new session. #
|
||||
|
||||
# An example of generated command after a simple call to this script with no #
|
||||
# arguments: #
|
||||
# termite -t Ephemere --geometry=1920x800 -e \ #
|
||||
# "tmux new-window -t Ephemere '/bin/zsh' \; attach" #
|
||||
# Here there was no terminal window already open, but a tmux session was #
|
||||
# already created. #
|
||||
|
||||
|
||||
# Default tmux session name
|
||||
SESSIONNAME="Ephemere"
|
||||
|
||||
# Default shell
|
||||
DEFAULTSHELL="/bin/zsh"
|
||||
|
||||
# Default window name
|
||||
WINDOWNAME="Unnamed"
|
||||
|
||||
# Don't wrap these apps
|
||||
NOWRAPL="irc"
|
||||
|
||||
# Don't start new window but attach these apps (if already started)
|
||||
PREFERATTACH="mutt agenda playlist alsamixer rtorrent journalctl"
|
||||
|
||||
|
||||
# You shouldn't need to tweak after this comment ###############################
|
||||
|
||||
TERMW=`xwininfo -tree -root | grep $SESSIONNAME`
|
||||
TMUXS=`tmux ls | grep $SESSIONNAME`
|
||||
|
||||
# For reference, this works:
|
||||
# tmux new-session -AD -s "Ephemere"\; neww -t "Ephemere" -n "somename" cmd
|
||||
|
||||
NEWSC="new-session -A -s $SESSIONNAME"
|
||||
NEWWC="new-window -t $SESSIONNAME"
|
||||
X="termite -t $SESSIONNAME --geometry=1920x800 -e"
|
||||
XNW="termite -t LonesomeCowboy --geometry=1920x800 -e"
|
||||
|
||||
# Any args?
|
||||
if [[ -n "$@" ]]
|
||||
then
|
||||
ARGS=$@
|
||||
|
||||
# Start the following CMD
|
||||
CMD="$ARGS"
|
||||
|
||||
# Set the current window name
|
||||
WINDOWNAME=$1
|
||||
|
||||
# Don't wrap some commands
|
||||
if [[ $NOWRAPL =~ $1 ]]
|
||||
then
|
||||
exec $XNW \'$CMD\'
|
||||
fi
|
||||
|
||||
# Check for a preexisting session
|
||||
if [[ $PREFERATTACH =~ $1 ]]
|
||||
then
|
||||
PREEXSESSIONNAME=`tmux lsw -a | grep $1 | sed 's/^\(.*\):[0-9]:.*/\1/' | head -n 1`
|
||||
echo "$WINDOWNAME is in session $PREEXSESSIONNAME"
|
||||
fi
|
||||
else
|
||||
CMD="$DEFAULTSHELL"
|
||||
fi
|
||||
|
||||
# Enrich the commands with a window name
|
||||
NEWWC="$NEWWC -n $WINDOWNAME"
|
||||
NEWSC="$NEWSC -n $WINDOWNAME"
|
||||
|
||||
# Is there already a window in a session with this $COMMANDNAME?
|
||||
if [[ ! -z $PREEXSESSIONNAME ]]
|
||||
then
|
||||
CMD="tmux attach -t \"$PREEXSESSIONNAME:$WINDOWNAME\""
|
||||
echo "I'd rather attach $PREEXSESSIONNAME"
|
||||
# Is there already a session with this $SESSIONNAME?
|
||||
elif [[ -z $TMUXS ]]
|
||||
then
|
||||
CMD="tmux $NEWSC '$CMD'"
|
||||
else
|
||||
CMD="tmux $NEWWC '$CMD' \\; attach -t $SESSIONNAME:$WINDOWNAME"
|
||||
fi
|
||||
|
||||
# Should I start a new term?
|
||||
if [[ -z $TERMW ]]
|
||||
then
|
||||
CMD="$X \"$CMD\""
|
||||
fi
|
||||
|
||||
# Finally exec CMD
|
||||
echo $CMD
|
||||
eval $CMD
|
Loading…
Reference in a new issue