Search code examples
bashubuntugnome-terminalxdotoolwmctrl

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


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?


Solution

  • 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
    }