Shortcut to bring all open terminals to the front
Solution 1
You can press Alt+Tab to switch forward between windows and Alt+Shift+Tab to switch back between windows. This shortcut is made to work in almost all graphical operating systems. Yow can also use Super+W and arrow keys for the same purpose.
After you bring one terminal window in the front, press Alt+~ to bring all other terminal windows in the front one by one:
To automatically bring all open terminals in the front (not one by one as I described before) you will need to add a keyboard shortcut for the following script (script taken from Adobe's answer and improved considering that version of script hasn't worked for me):
#!/bin/bash
if [ $# -ne 1 ];then
echo -e "Usage: `basename $0` PROGRAM_NAME\n
For example:\n\t
'`basename $0` gnome-terminal' for Terminal\n\t
'`basename $0` firefox' for Firefox\n\t
'`basename $0` chromium-browser' for Chromium\n\t..."
exit 1
fi
pids=" $(pidof $@) "
if [ "$pids" = " " ]; then # the string " " contain two spaces
echo "There is no program named '$@' opened at the moment."
exit 1
fi
wmctrl -lp | while read identity desktop_number PID window_title; do
if [ "${pids/ $PID }" != "$pids" ]; then
wmctrl -ia $identity
fi
done
Don't forget to make the script executable:
chmod +x /path/to/script/script_name
After you test the script in terminal, you must to see:
- How can I change what keys on my keyboard do? (How can I create custom keyboard commands/shortcuts?)
Solution 2
Here's a small bash script which brings all the windows whose title matches ARG to the front:
bring-all-windows.bash ARG
The script:
#!/bin/bash
Program=$@
wmctrl -l | while read Window; do
if [[ "$Window" == *"$Program"* ]]; then
echo "DEBUG: I bring $Window"
code=`echo "$Window" | cut -f 1 -d " "`
wmctrl -i -a $code
fi
done
You can bind
bring-all-windows.bash Terminal
to a hotkey (don't forget to put the script in a login shell PATH, or write a full path to it).
The script requires wmctrl
to be installed.
Edit:
To run something from the terminal, navigate to the dir where you put the script, then
chmod +x bring-all-windows.bash
./bring-all-windows.bash Terminal
When you're sure it works from the terminal, try to bind it to a hotkey, giving the full path. When you're sure it works with a hotkey and the full path to the script, then try adding it's dir to the login shell PATH, and see if it works that way.
Solution 3
Another way is using xdotool
. You should install it first so sudo apt-get install xdotool
is mandatory.
xdotool search --class "terminal" windowactivate %@
xdotool search --name "braiam@bt" windowactivate %@
The first look for any binary called *terminal*
, the second looks for any window that has as title *braiam@bt*
. Then if you put that into a bash script:
#!/bin/bash
set -e
program=$@
xdotool search --class '$program' windowactivate %@
xdotool search --name '$program' windowactivate %@
You can know more about this in the xdotool
manual.
Related videos on Youtube
TomSelleck
Updated on September 18, 2022Comments
-
TomSelleck over 1 year
After I navigate out to a webpage or editor, is there any way to bring all the open terminals back to the front in their original positions? It is a bit of a pain clicking the terminal icon and then bringing each one back individually.
Thanks!
Example:
- Pre-shortcut:
- Post-shortcut:
-
TomSelleck over 10 yearsThanks but that is essentially the same as clicking the terminal icon and selecting each one to bring to the front. I mean a short cut which will bring all open terminals to the front. An example being I could be writing code in gedit, want to compile it in one terminal while watching the output of a log in another terminal.
-
TomSelleck over 10 yearsThis sounds good! I will give it a try shortly and get back to you. I'm still a bit stumped as to why there isn't a native method for this, it seems like it should be natural.
-
Adobe over 10 years@Tomcelic: There's a
wmctrl
andbash
: that's natural. -
TomSelleck over 10 yearsTrue but it's not native :P
-
TomSelleck over 10 yearsIs there any chance you would mind running through how to use this script?? I have created the script and saved it in my home folder and added it's path to /etc/shells. I have also added a shortcut in keyboard settings with the name bring_terminals_forward and the command is bash /home/michael/Scripts/bring-all-windows.bash Terminal
-
TomSelleck over 10 yearsRunning the script directly from a running terminal doesn't seem to work either... It works for programs like gedit, but not for Terminal
-
Carlos Campderrós over 10 years"Screenshot will be taken in 1 second"... hmm someone just lied here...
-
Radu Rădeanu over 10 years@Tomcelic See my new edits. Want to say that I was working on such a script while Adobe has posted his How to Answer(which for me hasn't worked), so please do not take this in the wrong way.
-
Adobe over 10 years@Tomcelic: see edit of the answer.
-
Radu Rădeanu over 10 years@Adobe See this answer to see why in same cases the script will not work.
-
Adobe over 10 years@RaduRădeanu: Isn't it obvious from the script that the window title should have
Terminal
, and if You don't have it there -- either think of different string, or add the Terminal to the window title. There's a possiblity to debug things built-in into the script, so it shouldn't be a problem to fix issues. I'd claim that the basic idea is fine: loop over windows, bring all matching regexp/glob. I saw Your script -- it isn't minimal any more.