# GNOME Terminalを使い始めて思ったこと
1つのキーでターミナルを表示させたり最小化させたりできないのがダルいな......
macOSでiTerm2を使っていた私は思いました。そこで、Hotkeyを実現させるべく、ちょっと何かしました。
常に他のウィンドウに重なったり、複数のワークスペースにまたがって表示されたりはしません。ただ、すぐに呼び出せるだけです。
→ されました。 記事の下に追記しています。
他の方法があるかどうかとかは知りません。超ド素人なのでご容赦ください。
環境
Ubuntu 20.04
xdotoolをインストール
コマンドラインからウィンドウが操作できるxdotoolをインストールします。
$ sudo apt install xdotool
細かい操作方法はこちらをご覧ください。
## シェルスクリプトを作成
好きなところに置いてください。私は、termwindow.shという名前でホームディレクトリに保存しました。
$ vim ~/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
でエラーを捨ててしまって結構です。
設定したキーを押すと、ターミナルが飛んできてくれます。嬉しいね!
(ガビガビGIFで失礼します)
追記
ショートカットキーひとつでウィンドウを切り替えたり、ワークスペースを自由自在に行き来できるGNOME Terminal用シェルスクリプトがなんとなくできました。xdotool楽しいですね。記事の編集が大変面倒なので、コードだけ置きます......。すみません。
こちらにコマンドの詳細が載っています。
#!/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
参考
参考にさせていただきました。ありがとうございます!!