#!/bin/bash # Borrowed from: # - http://bytefreaks.net/gnulinux/bash/howto-make-terminator-terminal-act-like-guake-terminal-in-fedora-20ubuntu-14-10 # The purpose of this script is to allow the user to toggle the visibility of # (almost) any window. Please note it will work on the first match, so if there # are multiple instances of an application it would be a random window of them # the one to be affected. # Only checks dependencies on request to keep toggling behavior as fast as # possible. if [ "$1" == "--install-deps" ]; then # Checking that all dependencies are met, since we cannot proceed without # them. DEPENDENCIES=("xdotool" "wmctrl") MANAGERS=("yum" "apt-get") echo "Checking dependencies:" for DEPENDENCY in ${DEPENDENCIES[@]}; do if hash $DEPENDENCY 2>/dev/null; then echo "- $DEPENDENCY: ok" else echo "- $DEPENDENCY: not found" for MANAGER in ${MANAGERS[@]}; do if hash $MANAGER 2>/dev/null; then echo -n "$DEPENDENCY is missing, would you like to try and install " \ "it via $MANAGER now? [Y/N] (default is Y): " read ANSWER if [[ "$ANSWER" == "Y" || "$ANSWER" == "y" || "$ANSWER" == "" ]]; then sudo "$MANAGER" install "$DEPENDENCY" else echo "Terminating" exit -1 fi fi done fi done exit 0 fi if [ "$1" == "-a" ]; then MOVE_TO="yes" shift 1 fi APP_NAME="$1" if [ -n "$2" ]; then APP_BIN="$2" else APP_BIN="$APP_NAME" fi if [ -n "$3" ]; then WIN_NAME="$3" else WIN_NAME="$APP_NAME" fi # Checking if the application name provided by the user exists if ! command -v $APP_BIN 2>/dev/null; then echo -e "$APP_BIN does not seem to be a valid executable\nTerminating" exit -2 fi # Checking if the application is running. We are using pgrep as various # application are python scripts and we will not be able to find them using # pidof. pgrep will look through the currently running processes and list the # process IDs of all the processes that are called $APP_NAME. PID=$(pgrep $APP_NAME | head -n 1) # If the application is not running, we will try to launch it. if [ -z $PID ]; then echo "$APP_NAME not running, launching it.." $APP_BIN else # Since the application has a live instance, we can proceed with the rest of # the code. We will get the PID of the application that is currently focused, # if it is not the application we passed as parameter we will change the focus # to that. In the other case, we will minimize the application. echo -n "$APP_NAME instance found - " FOCUSED=$(xdotool getactivewindow getwindowpid) if [[ $PID == $FOCUSED ]]; then echo "It was focused so we are minimizing it" # We minimize the active window which we know in this case that it is the # application we passed as parameter. xdotool getactivewindow windowminimize else echo "We are setting the focus on it" # We set the focus to the application we passed as parameter. If it is # minimized it will be raised as well. if [ "$MOVE_TO" == "yes" ]; then wmctrl -x -a $WIN_NAME else wmctrl -x -R $WIN_NAME fi fi fi