失われたウィンドウマネージャを追い求めて 〜Mac Amethyst編〜

ここ数年、開発はLinuxデスクトップ(Ubuntu)上で行うことが多く、その際ウィンドウマネージャは[xmonad](https://xmonad.org/)を使用してました。

最近になってMacで作業することが増えたのですが、マウスでウィンドウを移動するのが煩わしく、Macでもタイル型ウィンドウマネージャを使いたいな、と思って探していたら[Amethyst](https://ianyh.com/amethyst/)を見つけました。

タイル型ウィンドウマネージャと言うと設定やキーバインドが多い印象ですが、自分の使い方としては

- ウィンドウのレイアウトの切り替え
- ウィンドウの幅(高さ)の調整
- ウィンドウ間の移動
- メインウィンドウの切り替え
- タイリングさせないウィンドウの設定

この辺ができれば十分です。

この記事では、Amethystでの上記の設定方法をお伝えできればと思います。

## ウィンドウのレイアウトの切り替え

まず、ウィンドウのレイアウトですが、Amethystでどのような種類のレイアウトが用意されているかは、[公式サイト](https://ianyh.com/amethyst/)の `Available Layouts` の項目に一覧が載っています：

- Tall
- Tall-Right
- Wide
- Two Pane
- 3Column-Left
- 3Column-Middle
- 3Column-Right
- Widescreen-Tall
- Fullscreen
- Column
- Row
- Floating
- Binary Space Partitioning (BSP)
- Custom (beta)

各レイアウトについての説明も記載がありますが、実際に試して自分にあったレイアウトを探すのがオススメです。自分は以下の4つを設定しています。

- Widescreen-Tall
    - 8割方これを使っている
- Fullscreen
    - 一つの画面で集中して作業したいとき
- Column
    - 縦にウィンドウを並べたい時。あまり使わない
- Row
    - 横にウィンドウを並べたい時

レイアウトの設定方法は `Preference` -> `Layouts`から +/- ボタンで追加/削除していきます。
また、並び順を変更することで優先順位も設定可能です。Amethyst起動時には、先頭のレイアウトが設定されます。

![スクリーンショット 2023-10-07 8.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/eb342291-dc3b-a23e-7b01-39778531cc39.png)

※↑記載の通り、設定変更後は再起動しましょう

レイアウトの切り替えは、　`Prefrence` -> `Shortcuts` の　`Cycle layout` から設定できます。

![スクリーンショット 2023-10-07 8.17.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/7f21bf5a-7dfd-feeb-06c6-de8859f4408a.png)


>※自分のキーボードはキーバインドの設定ができるタイプなので、一つのキーで`Ctrl + Tab + Shift + Meta` 同時押しになる `hyper key`というキーが存在しています(Caps Lockに割り当て)。上記設定は `hyper key + ↑↓` ということです。もちろん、普通にCtrlやMetaキーと合わせて設定もできます。


![ezgif-2-6a26cff124.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/12d96da6-0fbb-3bc9-bd7f-1672d8b33fb6.gif)

## ウィンドウの幅(高さ)の調整

ウィンドウの幅(高さ)の調整は`Shortcuts`の`Shrink (Expand) main pane` の設定を使ってます。

![スクリーンショット 2023-10-07 9.09.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/1254af6a-9b41-59e2-34bd-92638f22ab03.png)

![ezgif-2-2169371191.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/12160014-bd3c-fa03-9961-50192d973e76.gif)

## ウィンドウ間の移動

ウィンドウの間の移動は`Shortcuts` の　`Move focus` で設定しています。

![スクリーンショット 2023-10-07 9.26.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/1436a577-81bc-5928-dec2-b4ece475c8e0.png)

![ezgif-2-397a32d789.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/3d271aaa-2a32-df8e-a0d4-c3742a37295c.gif)

## メインウィンドウの切り替え
自分が開発作業する際は、主に

- 左側にメインウィンドウとしてエディターを置き
- 右側に参照のためブラウザ・Slack等を開く

スタイルで作業を行っていますが、ブラウザでの作業が発生したとき（例：Github上でのアクション等）などは、ブラウザをメインウィンドウに切り替えます。

ウィンドウの切り替えには `Shortcuts`の`Swap focused window with main window`を使用しています。

![スクリーンショット 2023-10-07 10.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/f2e477a2-aaee-756c-0332-9479360e2414.png)


![ezgif-4-b0473c0a2f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/f860959b-000b-6ea5-b6b7-7a6b9c070e92.gif)

`ウィンドウ間の移動` でメインにしたいウィンドウに移動してから、切り替えする感じです。
もっといい方法があるかもしれませんが、今の所、これで十分間に合ってます :ok_woman: 

## タイリングさせないウィンドウの設定
タイル型ウィンドウマネージャを使っていると、タイリングさせたくないウィンドウが出てくると思います。
自分の場合、Finder、画像のプレビュー、スマホのエミュレータ等がそうです。

例えば画像のプレビューが毎回タイリングされるとこんな感じになります：

![ezgif-4-d41767a30f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/b79bc0a7-0fb1-d2c9-4752-7cf14ce787c1.gif)

プレビューを使うときは自由にマウスで画像を移動して見たい場合が多く、また複数画像を開くことも多いので、画像を開く度にウィンドウが占領されていってしまうと困ります。

このようなケースでは、`Prefernce` -> `Floating`からアプリを設定をして、アプリごとにタイリングを回避できます。

![スクリーンショット 2023-10-07 10.22.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597113/6f3aec92-5f27-1984-1eba-783192b15df3.png)


+ボタンより、アプリをFinderから選択するか、もしくはBundle IDを直接入力して選択することができます。

## まとめ
xmonadは偉大（Haskellは書けない :muscle: :muscle: )
Amethystの便利設定あれば、ぜひ共有お願いします :bow: 


## おまけ
たまに上手くレイアウトが反映されないことがあります。そういう場合はAmethystを再起動すると復活します。
再起動用のキーバインドは `Preference` -> `Shortcuts` -> `Relaunch Amethyst` で設定可能です。