mirror of
https://github.com/jimeh/dotfiles.git
synced 2026-02-19 06:26:39 +00:00
104 lines
3.3 KiB
Bash
Executable File
104 lines
3.3 KiB
Bash
Executable File
#!/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
|
|
xdotool search --onlyvisible --name "$WIN_NAME" windowactivate
|
|
else
|
|
# This allows window name to be a regular expression
|
|
WIN_TITLE="$(xdotool search --onlyvisible --name "$WIN_NAME" getwindowname %@ | head -n 1)"
|
|
wmctrl -R "$WIN_TITLE"
|
|
fi
|
|
fi
|
|
fi
|