🚅

爆速!デスクトップアプリの切り替え!(Ubuntu対象)

2024/09/08に公開

どうも、最近Ubuntuデビューをしました効率厨です🤖

はじめに

以前このような記事を書きました
https://zenn.dev/yokojp/articles/a4939e92c3fc31

Before After

Afterのように「特定のキーを叩くことで、キーに紐づくデスクトップアプリへ切り替えを行う」といったものです

ただ、当時使用していたツールであるhammerspoonはMac限定だったため、
Ubuntuでも同じことを実現するぜというモチベです

やること

  • アプリの表示/非表示を行うScriptを作る
  • それをショートカットキーの入力時に実行させる(アプリの数だけ定義)

設定

Scriptの保存

ローカルに以下のshell scriptを保存してください

#!/bin/bash

APP_NAME=$1

WINDOW_ID=$(xdotool search --onlyvisible --class "$APP_NAME" | head -n 1)
if [ -z "$WINDOW_ID" ]; then
  $APP_NAME &
  exit 0
fi

IS_HIDDEN=$(xprop -id "$WINDOW_ID" | grep "_NET_WM_STATE_HIDDEN")
if [ -n "$IS_HIDDEN" ]; then
  xdotool windowactivate "$WINDOW_ID"
else
  ACTIVE_WINDOW=$(xprop -root _NET_ACTIVE_WINDOW | awk '{print $5}')
  HEX_WINDOW_ID=$(printf "0x%x\n" "$WINDOW_ID")
  if [ "$HEX_WINDOW_ID" != "$ACTIVE_WINDOW" ]; then
    xdotool windowactivate "$WINDOW_ID"
  else
    xdotool windowminimize "$WINDOW_ID"
  fi
fi

自分の場合はこのような配置です
/home/$USER/scripts/toggle_spp.sh

内容

実行する際は、引数に対象とするアプリケーション名を指定します(Slackを例に)
./toggle_app.sh slack

処理としては、scriptの上から順に以下の条件分岐です

  • アプリが
    • 未起動であれば起動する
    • 起動中であれば
      • アプリが最小化中であれば表示
      • アプリが背面にいるなら前面に表示
      • アプリが前面にいるなら非表示

カスタムショートカットの定義

「設定 > キーボード > カスタムショートカット」に移動

以下のように、名前・実行するコマンド・キーを設定

yokoは筆者のユーザ名です

筆者の例

冒頭に貼ったMacの時とほぼ同じですが、
h, j, k, l, spaceに主力アプリを設定しています

あるあるですが、特定のキーだけ設定しても反応しない場合は
デフォルトのキーバインドと衝突している可能性があります
dconf-editorなどを駆使して、デフォルト設定を削除しちゃいましょう

tips

アプリのwindowの開閉アニメーションがあると、瞬間的な切り替えを妨げると思います

煩わしい方は、以下のコマンドでアニメーションを無効にしちゃいましょう

gsettings set org.gnome.desktop.interface enable-animations false

お疲れ様でした

快適な環境で楽しく仕事しましょう🌹

Discussion