🪟

AeroSpaceでフォーカス中のワークスペースのウィンドウを一括フローティング化する

に公開

AeroSpace を使い始めたばかりですが、一部のワークスペースでは他のウィンドウ管理ツールと組み合わせて使いたくなりました。そこで今回は、フォーカス中のワークスペースに属するウィンドウを一括でフローティング化する方法をまとめます。

実行コマンド

ウィンドウを一括でフローティング化するコマンド

以下のコマンドで、フォーカス中のワークスペースにあるウィンドウを一括でフローティング化できます。

$ aerospace list-workspaces --focused \
| xargs -I{} aerospace list-windows --workspace {} \
| awk -F' *\| *' '{print $1}' \
| xargs -n1 aerospace layout floating --window-id

簡単にコマンドの流れを説明すると、次のようになります。

  1. フォーカス中のワークスペースを取得する
  2. 取得したワークスペースに属する全ウィンドウを取得する
  3. 各ウィンドウごとにフローティング化する

xargs -n1 を指定することで、各ウィンドウ ID を個別に aerospace layout floating コマンドに渡しています。

ウィンドウを一括でタイリング化するコマンド

以下のコマンドで、ウィンドウを一括でタイリングに戻せます。
layout floating の部分を layout tiling に変更するだけです。

$ aerospace list-workspaces --focused \
| xargs -I{} aerospace list-windows --workspace {} \
| awk -F' *\| *' '{print $1}' \
| xargs -n1 aerospace layout tiling --window-id

AeroSpace のショートカットキーの定義

毎回コマンドを実行するのは手間なので、AeroSpace の設定ファイルで一括フローティング化・タイリング化用のショートカットキーを定義します。

一括フローティング化のショートカットキー

スクリプトの作成

$ mkdir -p ~/.config/aerospace/scripts
$ touch ~/.config/aerospace/scripts/ws_floating_all.sh
#!/bin/zsh
ws="$(aerospace list-workspaces --focused)"
[ -z "$ws" ] && exit 0

aerospace list-windows --workspace "$ws" \
| awk -F' *\| *' '{print $1}' \
| xargs -n1 aerospace layout floating --window-id
$ chmod +x ~/.config/aerospace/scripts/ws_floating_all.sh

.aerospace.toml の定義

alt-shift-f は定義済みのため、alt-ctrl の prefix にしました。

alt-ctrl-f = 'exec-and-forget /bin/zsh -lc "~/.config/aerospace/scripts/ws_floating_all.sh"'

一括タイリング化のショートカットキー

スクリプトの作成

$ mkdir -p ~/.config/aerospace/scripts
$ touch ~/.config/aerospace/scripts/ws_tiling_all.sh
#!/bin/zsh
ws="$(aerospace list-workspaces --focused)"
[ -z "$ws" ] && exit 0

aerospace list-windows --workspace "$ws" \
| awk -F' *\| *' '{print $1}' \
| xargs -n1 aerospace layout tiling --window-id
$ chmod +x ~/.config/aerospace/scripts/ws_tiling_all.sh

.aerospace.toml の定義

alt-ctrl-t = 'exec-and-forget /bin/zsh -lc "~/.config/aerospace/scripts/ws_tiling_all.sh"'
GitHubで編集を提案

Discussion