LoginSignup
3
0

More than 1 year has passed since last update.

GNOME Terminalをショートカットキー1つで表示したりしなかったりする

Last updated at Posted at 2021-03-06


GNOME Terminalを使い始めて思ったこと

1つのキーでターミナルを表示させたり最小化させたりできないのがダルいな......

macOSでiTerm2を使っていた私は思いました。そこで、Hotkeyを実現させるべく、ちょっと何かしました。
常に他のウィンドウに重なったり、複数のワークスペースにまたがって表示されたりはしません。ただ、すぐに呼び出せるだけです。
されました。 記事の下に追記しています。

他の方法があるかどうかとかは知りません。超ド素人なのでご容赦ください。

環境

Ubuntu 20.04

xdotoolをインストール

コマンドラインからウィンドウが操作できるxdotoolをインストールします。

$ sudo apt install xdotool

細かい操作方法はこちらをご覧ください。


シェルスクリプトを作成

好きなところに置いてください。私は、termwindow.shという名前でホームディレクトリに保存しました。

$ vim ~/termwindow.sh
termwindow.sh
#!/bin/bash

TERMID=`xdotool search --onlyvisible gnome-terminal`
ACTIVEID=`xdotool getactivewindow`

if [ $TERMID = $ACTIVEID ]; then
        xdotool windowminimize $TERMID
  else
        xdotool windowactivate $TERMID
fi



xdotool search --onlyvisible gnome-terminalでGNOME TerminalのウィンドウIDを取得しています。見えない部分で動いているものもヒットしてしまうので、--onlyvisibleとしています。複数ウィンドウ開いていたら、該当するIDはその数だけあるのですが、そこらへんの処理は適当にしています。どうにかしてください。すみません......。 →どうにかなりました こちらも追記をご覧ください。


xdotool getactivewindowでアクティブなウィンドウのIDを取得しています。

if文の中身は、GNOME Terminalのウィンドウがアクティブだったらしまう、アクティブじゃなかったらアクティブにする。ただそれだけです。


次に、権限を変更します。

$ sudo chmod u+x termwindow.sh


設定からキーボードショートカットにスクリプトを割り当てる

Ubuntuの設定からキーボードショートカット→独自のショートカットと進み、追加を押したら、コマンドの欄にbash/home/ユーザー名/termwindow.shみたいな感じにコマンドとスクリプトの場所を入力して実行させるようにします。フルパスじゃないと動きません。好きな名前とキーを設定して完了です。

ターミナルを表示する度に「xdotool search--name--classとかと使うのがデフォルトです」みたいなことを言われる場合は、それを表示させないためにbash /home/ユーザー名/termwindow.sh 2>/dev/nullでエラーを捨ててしまって結構です。


termwindow.png


設定したキーを押すと、ターミナルが飛んできてくれます。嬉しいね!
20210306_comp.gif
(ガビガビGIFで失礼します)


追記

ショートカットキーひとつでウィンドウを切り替えたり、ワークスペースを自由自在に行き来できるGNOME Terminal用シェルスクリプトがなんとなくできました。xdotool楽しいですね。記事の編集が大変面倒なので、コードだけ置きます......。すみません。
こちらにコマンドの詳細が載っています。

termwindow.sh
#!/bin/bash

TERMID=`xdotool search --onlyvisible gnome-terminal | tail -n1`               # ターミナルのウィンドウのIDを取得
LASTTERMID=`xdotool search --onlyvisible gnome-terminal | head -n1` # 他のウィンドウのうち最後に控えているやつのIDを取得
ACTIVEID=`xdotool getactivewindow`                                            # アクティブなウィンドウのIDを取得
CURRENTSPACE=`xdotool get_desktop` # get current workspace                    # 現在使用中のワークスペース(デスクトップ)番号を取得
TERMSPACE=`xdotool get_desktop_for_window $TERMID`                            # ターミナルのウィンドウがいるワークスペース番号を取得


if [ $TERMSPACE != $CURRENTSPACE ]; then                                      # ターミナルがいないワークスペースで呼んだら
    xdotool set_desktop_for_window $TERMID $CURRENTSPACE                      # ウィンドウを使用中ワークスペースへ移動
    xdotool set_desktop_for_window $LASTTERMID $CURRENTSPACE
    xdotool set_desktop $CURRENTSPACE                                         # 自分も目的のワークスペースに戻る
    xdotool windowactivate $TERMID
else
    if [ $TERMID = $ACTIVEID ]; then                                          # 以下、ターミナルがいるワークスペースで呼んだ時の処理
        xdotool windowminimize $TERMID
        if [ $LASTTERMID != $TERMID ]; then
            xdotool windowactivate $LASTTERMID ; xdotool windowminimize $LASTTERMID # ここで $TERMID と $LASTTERMID が入れ替わる
        else
            :
        fi
    else
        xdotool windowactivate $TERMID
    fi
fi


参考

参考にさせていただきました。ありがとうございます!!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0