How to Switch Focus to a Gnome Terminal Tab via Script or Shell Command

2.9k Views Asked by At

I am currently writing a script to open several tabs in gnome-terminal, and set their titles. I can open multiple tabs, but I need to change focus to those tabs (programatically) in order to set their titles from my script.

I use zsh and bash interchangeably, so any bash commands should work fine. I am starting to get familiar with xdotool and wmctrl, but unsure of a combo of commands to switch focus to an open tab.

What commands can I use to "switch to next open tab" or "switch to tab N" from a gnome-terminal CLI?

3

There are 3 best solutions below

0
On BEST ANSWER

I solved this with xdotool

On one line, first, open a new tab with the key command. The default behavior is to switch focus to this tab. Then, use the type command to run a function, script, or other program in the new tab. Last, use the key command to "press enter." Repeat for N-many tabs!

# inside a file loaded by .bashrc which contains all my functions:
function setupterm() {
  # run a command, like set a title, in the current window/tab
  customCommandOne
  # do the needful as described above
  xdotool key Control+Shift+t && xdotool type customCommandTwo && xdotool key Return
  # repeat for n-many tabs
  xdotool key Control+Shift+t && xdotool type customCommandThree && xdotool key Return
  # return focus to first tab
  xdotool key Control+Page_Down
}
1
On

In order to send the signal from Bash Shell use xdotool:

sudo apt install xdotool

In your script issue this command:

xdotool key Control+Page_Up
2
On

You could just set the title of the tabs when opening them:

gnome-terminal --geometry=80x25+0+0 --window --working-directory=<Firtst Tab Dir> \
               --title='<First Tab Title>' --command="bash" \
               --tab --working-directory=<Second Tab Dir> --title='<Second Tab Title>' \
               --command="bash" and so on...

I would have posted as a comment, but don't have enough reputation for that, yet