diff --git a/bin/linux-toggle-app b/bin/linux-toggle-app new file mode 100755 index 0000000..75053c5 --- /dev/null +++ b/bin/linux-toggle-app @@ -0,0 +1,80 @@ +#!/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 + +APPLICATION="$1" + +# Checking if the application name provided by the user exists +if ! hash $APPLICATION 2>/dev/null; then + echo -e "$APPLICATION 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 $APPLICATION. +PID=$(pgrep $APPLICATION | head -n 1) + +# If the application is not running, we will try to launch it. +if [ -z $PID ]; then + echo "$APPLICATION not running, launching it.." + $APPLICATION +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 "$APPLICATION 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. + wmctrl -x -R $APPLICATION + fi +fi