We tried to toggle the visibility of the terminator window using the configuration in the ‘Terminator Preferences’ under Keybindings.
But, we could not get the hide_window keybinding to work and so we could not toggle the window visibility with a single key.
After trying other versions of the terminator source which also failed we switched to an alternative solution.
This solution requires two additional packages: xdotool and wmctrl.
In Fedora you can install them using sudo yum install xdotool wmctrl
and in Ubuntu using sudo apt-get install xdotool wmctrl
After the installation is complete, you need to paste the following code in a file and make it an executable.
e.g From a terminal issue nano ~/toggle_visibility.sh
, then paste the code and hit CTRL+X to exit. When prompted if you want to save press ‘Y’ and enter.
#!/bin/bash #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. #Checking that all dependencies are met, since we cannot proceed without them. declare -a DEPENDENCIES=("xdotool" "wmctrl"); declare -a MANAGERS=("yum" "apt-get"); for DEPENDENCY in ${DEPENDENCIES[@]}; do echo -n "Checking if $DEPENDENCY is available"; if hash $DEPENDENCY 2>/dev/null; then echo "- OK, Found"; else echo "- ERROR, Not Found in $PATH"; 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 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 exit 0
Afterwards, you need to make the script an executable so you should issue chmod +x ~/toggle_visibility.sh
to do that.
Then, execute ~/toggle_visibility.sh
in your terminal once. We need to do that in order to install any missing dependencies for the tool.
Finally, you need to create a custom shortcut that will call the script using the key combination you like at any point.
For Fedora,
- Issue the following in a terminal
gnome-control-panel
to start the gnome control panel. - In the newly appeared window, click on the ‘keyboard’ icon that is in the category ‘Hardware’.
- After that, click on the tab ‘Shortcuts’
- and on the left list, click on custom shortcuts.
- You will see a button with the + sign, click that.
- In the dialog box that will appear enter the following:
– In the name field enter anything you like. e.g ‘Toggle Terminator Visibility’
– In the command field enter ‘/home/<USER>/toggle_visibility.sh terminator’ where user enter your own username.
– Click apply. - You will see a new row with two columns with the name you just set in the first column. Click on the second column, where it should say ‘Disabled’ and the press the key combination you want for toggling terminator e.g F12
For Ubuntu, go to System Settings and follow the same procedure after step 2.
You are ready to go 🙂
Just try the key combination you just provided and terminator will appear in front of you. Pressing it once more it will hide it.
This post is also available in: Greek
Not working on Ubuntu 14.04.
Everytime I press F12 a new instance of terminator is opened
I have the same behavior than previous comment. I noticed that was the pgrep command who was faulty.
By the way, according to the comment line 4: “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.”, I think it is the pgrep too.
So I replaced this on line 46:
PID=$(pgrep $APPLICATION);
By this:
PID=$(ps x | grep “${APPLICATION}” | grep -vE ‘toggle|grep’ | awk ‘{print $1}’);
It is working now.
Hello,
What OS do you have and which version of pgrep is installed?
According to the documentation of the pgrep command:
“The pattern is normally only matched against the process name. When -f is set, the full command line is used.”
We did not use -f parameter so it should not match something other than terminator.
Thanks for the help AnatomicJC. It worked for me 🙂
Initially it didn’t worked for me. then when I replaced the single quotes and double quotes in your code with proper onces.. It worked for me
PID=$(ps x | grep “${APPLICATION}” | grep -vE ‘toggle|grep’ | awk ‘{print $1}’);
Hello
Which version of pgrep do you have and which OS?
On Fedora 23 with version pgrep from procps-ng 3.3.10 it works as expected with one window.
Updated instructions for Fedora 23 can be found here http://bytefreaks.net/gnulinux/bash/howto-make-terminator-terminal-act-like-guake-terminal-in-fedora-23
HOWTO: Make Terminator Terminal Act Like Guake Terminal in Ubuntu 16.04 LTS (The easy ways)
http://bytefreaks.net/gnulinux/howto-make-terminator-terminal-act-like-guake-terminal-in-ubuntu-16-04-lts-the-easy-ways
Thanks. Very useful.