18

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:

Pre-image shortcut


  • Post-shortcut:

Post-image shortcut

9

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:

switch to windows


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:

| improve this answer | |
  • 3
    Thanks 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 Sep 16 '13 at 8:42
  • "Screenshot will be taken in 1 second"... hmm someone just lied here... – Carlos Campderrós Sep 16 '13 at 11:34
  • 1
    @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. – Radu Rădeanu Sep 16 '13 at 12:27
8

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.

| improve this answer | |
  • This 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. – TomSelleck Sep 16 '13 at 9:36
  • @Tomcelic: There's a wmctrl and bash: that's natural. – Adobe Sep 16 '13 at 9:37
  • True but it's not native :P – TomSelleck Sep 16 '13 at 9:41
  • Is 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 Sep 16 '13 at 10:45
  • Running the script directly from a running terminal doesn't seem to work either... It works for programs like gedit, but not for Terminal – TomSelleck Sep 16 '13 at 10:47
1

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.

| improve this answer | |
0

Graphically in my Ubuntu desktop, I have my icons arranged vertically on the left-hand side margin of my desktop. If you left click on the terminal icon, you will see all the terminal windows. Then you can pick whichever one to work in. If you right click on the terminal icon, you will see a list of menus with a "New terminal" on top, and all your open terminal in the lower portion of the list. You can select whichever to be your active terminal.

This same method should work for any other application such as your browser.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.