Thursday, February 18, 2016

How To Make Terminator Behave Like Guake (Ubuntu)

Terminator is a tool to arrange multiple terminals in a single window, structured on a customizable grid.

When I started using Terminator on Ubuntu, I missed two key features that I had with Guake: an hide/show shortcut, and the possibility to hide its icon from the alt-tab list of running applications.

Hide/Show Terminator like Guake

This solution has been proposed on StackOverflow (see references). I will just copy the code with its attributions and some minor changes.

  • Install xdotool and wmctrl:

    sudo apt-get install xdotool wmctrl
  • Create a file /usr/bin/launch_focus_min.sh.

  • Add the following content to the file:

    #!/bin/bash
    #
    # This script does this:
    # launch an app if it isn't launched yet,
    # focus the app if it is launched but not focused,
    # minimize the app if it is focused.
    #
    # by desgua - 2012/04/29
    # modified by olds22 - 2012/09/16
    #  - customized to accept a parameter
    #  - made special exception to get it working with terminator
    
    # First let's check if the needed tools are installed:
    tool1=$(which xdotool)
    tool2=$(which wmctrl)
    
    if [ -z $tool1 ]; then
      echo "Xdotool is needed, do you want to install it now? [Y/n]"
      read a
      if [[ $a == "Y" || $a == "y" || $a = "" ]]; then
        sudo apt-get install xdotool
      else
        echo "Exiting then..."
        exit 1
      fi
    fi
    
    if [ -z $tool2 ]; then
      echo "Wmctrl is needed, do you want to install it now? [Y/n]"
      read a
      if [[ $a == "Y" || $a == "y" || $a = "" ]]; then
        sudo apt-get install wmctrl
      else
        echo "Exiting then..."
        exit 1
      fi
    fi
    
    
    # check if we're trying to use an app that needs a special process name
    # (because it runs multiple processes and/or under a different name)
    app=$1
    if [[ $app == terminator ]]; then
      process_name=usr/bin/terminator
    else
      process_name=$app
    fi
    
    # Check if the app is running (in this case $process_name)
    
    #pid=$(pidof $process_name) # pidof didn't work for terminator
    pid=$(pgrep -f $process_name)
    
    # If it isn't launched, then launch
    
    if [ -z $pid ]; then
      $app
    
    else
    
      # If it is launched then check if it is focused
    
      foc=$(xdotool getactivewindow getwindowpid)
    
      if [[ $pid == $foc ]]; then
    
        # if it is focused, then minimize
        xdotool getactivewindow windowminimize
      else
        # if it isn't focused then get focus
        wmctrl -x -R $app
      fi
    fi
    
    exit 0
    
  • Make the script executable:

    sudo chmod +x /usr/bin/launch_focus_min.sh
  • Assign the script to a keyboard shortcut. You can do it on Ubuntu using the Keyboard settings:

    Keyboard > Shortcuts > Customized Shortcuts

    From there, you can now add the following custom command:

    /usr/bin/launch_focus_min.sh terminator

    Note that the **launch_focus_min.sh** script can be also used with applications other than **terminator**.

Hide Terminator icon from Alt-Tab menu

  • Download CompizConfig Settings Manager and the compiz-plugins-extra package

    sudo apt-get install compizconfig-settings-manager compiz-plugins-extra
  • Open CompizConfig Settings Manager.

  • Click on Manage Windows.

  • Tick the box next to Window Rules to enable them.

  • Click on Window Rules.

  • Fill in the Skip Taskbar and Skip Pager fields with the following:

    (name=terminator) & class=Terminator

    Note - Here is the meaning of the two fields we filled:

    Skip taskbar These windows will not show up on the task bar (the list of buttons you click on to switch between open windows).
    Skip pager These windows will not show up on the desktop pager (the applet you click on to switch to desktops/workspaces/viewports).

Terminator should now disappear from the Alt-Tab menu.


References