#!/bin/bash # # Mabox tint2 selection and switcher script # # Written by damo for BunsenLabs Linux, April 2015 # Ported to Manjaro by napcok , March 2016 ######################################################################## # # Tint2 config files must be in $TINT2PATH # # When the dialog opens, any running tint2s will be checkmarked. # # Click "OK" and all running tint2s are stopped, and all checkmarked # tint2s are started # # To stop a tint2 just uncheck it, and "OK" # # Running tint2s are saved to a session file, and can be run with # the "tint2-session" script. To start them at login, add the # following line to autostart: # # (sleep 2s && mb-tint2-session) & # ######################################################################## DEBUGFILE="$HOME/.config/mb-tint2-debug.txt" TINT2PATH="$HOME/.config/tint2" SESSIONFILE="$TINT2PATH/tint2-sessionfile" USAGE="\v\tUSAGE:\n\tWith no command argument, the script uses the chosen \tTint2 session file \"$TINT2PATH/tint2-sessionfile\", \tif it exists, otherwise the default tint2rc is used \v\tTo start them at login, add the following line to autostart: \v\t\t(sleep 2s && mb-tint2-session) &" ### DIALOG VARIABLES DLGDEC="yad --center --borders=20" OK="--button=OK:0" WINICON="--window-icon=distributor-logo-mabox --image=tint2conf" case $LANG in pl*) TITLE="Menedżer paneli Tint2" CANCEL="--button=Anuluj:1" SELECT_TINT="Wybierz Tint2 z listy, po kliknięcu OK wszystkie zaznaczone zostaną uruchomione." SELECT="Wybór" TINT_CONF_FILE="plik konfiguracji tint2" ;; *) TITLE="Tint2 Panels Manager" CANCEL="--button=Cancel:1" SELECT_TINT="Select Tint2s from the list. Click OK to start all selected." SELECT="Select" TINT_CONF_FILE="tint2 Name" ;; esac ######################################################################## tintRunning(){ # make blank tempfile, to save running tint2 paths TEMPFILE=$(mktemp --tmpdir tint2.XXXX) pgrep -a tint2 | while read pid cmd; do if [[ ${cmd%% *} = tint2 ]]; then TPATH=$(echo $cmd | awk '{print $NF}') echo $TPATH >> $TEMPFILE fi done } fillArrays(){ num="$1" tintsPath[$num]="$2" # full filepath to the tint2 tintsArr[$num]="$3" # displayed name # see if name matches one of the running tints if grep -qx "$2" "$TEMPFILE";then # if tint2 is running (read from tempfile) checkArr[$num]="TRUE" # make checkmark in dialog else checkArr[$num]="FALSE" fi } findTint(){ # search dirs for tint2 config files num=0 for x in $(find $TINT2PATH -type f -name *tint2rc);do # check if likely tint2 config file pm=$(grep "panel_monitor" "$x") if [[ $pm ]];then TINT2=$( echo $x | awk -F"/" '{print $(NF-1)"/"$NF}') fillArrays $num $x $TINT2 num=$(($num+1)) fi done } # get any commandline arguments if ! (( $# == 0 ));then for arg in "$@";do if [[ $1 = "-h" ]] || [[ $1 = "--help" ]];then echo -e "$USAGE" exit 0 else echo -e "\tERROR: sorry I don't understand the input" echo -e "$USAGE" exit 0 fi done fi # get tint2 directories in .tint2, add to array tintRunning findTint # loop through arrays, and build msg text for yad dialog unset LISTTINT for ((j=0; j<${#tintsArr[*]}; j++));do LISTTINT="$LISTTINT ${checkArr[j]} ${tintsArr[j]}" done ## Populate dialog from array, get return value(s) RET=$($DLGDEC $WINICON --list --title="$TITLE" \ --text="$SELECT_TINT" \ --checklist --width=350 --height=500 --multiple \ --column="$SELECT" --column="$TINT_CONF_FILE" $LISTTINT --separator=":" \ $CANCEL $OK \ ) if (( $? == 1 )); then # cancel button pressed exit 0 else > $SESSIONFILE # Create new session file # loop through returned choices, add to array i=0 OIFS=$IFS # copy original IFS IFS=":" # separator is ":" in returned choices for name in $RET; do retTint[$i]=$name i=$(($i+1)) done IFS=$OIFS # reset IFS # kill all tint2s pgrep -a tint2 | while read pid cmd; do if [[ ${cmd%% *} = tint2 ]]; then kill "$pid" fi done for name in ${retTint[*]};do # loop through checkmarked tint2 names for ((j=0; j<${#tintsPath[*]}; j++));do # traverse through elements for f in ${tintsPath[j]};do display=$( echo $f | awk -F"/" '{print $(NF-1)"/"$NF}') path=$( echo $f | awk -F"/" '{print "/"$(NF-2)"/"$(NF-1)"/"$NF}') # see if it matches the returned name if [[ $display = $name ]];then #DEBUG #echo "mb-tint2zen: path=$path" >> $DEBUGFILE #echo "mb-tint2zen: f=$f" >> $DEBUGFILE #DEBUG_KONIEC echo -e "$path" >> $SESSIONFILE tint2 -c "$f" & #start the tint2 sleep 1s fi done done done mabox-compositor --restart & # restart compositor fi rm -r $TEMPFILE exit 0