All Articles
    Search by

    komorebiでwindowsにタイルウィンドウマネージャを実現する

    komorebiとは タイルウインドウマネージャとは

    ウインドウがたくさんになってくると画面分割したり色々とめんどくさい。最近では昔のBetterSnapToolみたいな挙動がWindowsでも標準搭載されているが、タイル型ウインドウマネージャはウインドウが開くと勝手に画面分割される。ウインドウをドラッグすればウインドウどうしがスワップできるし、空白のマルチディスプレイに動かせば全画面になる。

    調べてみたところこうしたウインドウマネージャはLinuxでは多数あるものの、Windowsではまだまだ少ないようだ。たまたま見つけたkomorebiというツールが軽量でそこそこうまく動作したので、使い方をメモしておく。1

    なお、komorebiはwritten in Rust。

    導入

    Powershellの設定

    Long path supportをenableにしておくことが推奨されているので、とりあえずやっておく。管理者権限でPowershellを開いて以下のコマンドを実行。

    Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1

    Install

    Wingetでinstallした。https://lgug2z.github.io/komorebi/installation.html#winget

    キーマップの設定

    komorebiはAltキーと色々なキーを組み合わせて操作ができる。AutoHotKeyとwhkdの二通りでキーマップを設定できるが、whkdでやるのが簡単じゃないかな。

    AutoHotKeyはCtrl+CまたはEscでIMEオフを設定するのに使っていたのでAutoHotKeyを使おうかなと思ったけど、whkdはkomorebi本体と一緒に起動できるのでこっちの方が楽。komodebic --wkhd で起動すればキーマッピングは自動で適用される。

    多分、whkdはwindow-hotkey-daemonの略だと思う。

    Configの設定

    デフォルトではマージンがバカでかく、かなり作業領域を狭められてしまうので、最初に設定をいじくっておくのが吉。

    mkdir -p ~/.config/komorebi
    nvim $PROFILE

    以下を追記。

    $Env:KOMOREBI_CONFIG_HOME = 'C:\Users\dakes\.config\komorebi'

    $PROFILEをロードしなおして、パスが通ることを確認。

    . $PROFILE
    $Env:KOMOREBI_CONFIG_HOME

    あとはconfigの中身を書いていく。何が何に対応しているのかの説明はあんまりなされていないので、あれやこれやと試して以下になった。

    komorebi.jsonとして C:\Users\username.config\komorebi\komorebi.jsonに保存する。

    {
      "$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/v0.1.29/schema.json",
      "animation": {
              "duration": 100,
              "fps": 90,
              "enabled": true,
              "style": "EaseInOutSine"
      },
      "app_specific_configuration_path": "$Env:KOMOREBI_CONFIG_HOME/applications.yaml",
      "window_hiding_behaviour": "Cloak",
      "cross_monitor_move_behaviour": "Insert",
      "default_workspace_padding": 2, // 全体的な枠のpadding
      "default_container_padding": 2,
      "border": true, // Activeなwindowにつける枠
      "border_width": 1,
      "border_offset": -1,
      "theme": {
        "palette": "Base16",
        "name": "Helios", // 種類が多数あるもののここではあまり意味がない
        "unfocused_border": "Base03",
        "bar_accent": "Base0D"
      },
      "stackbar": { // stack機能(Alt+←→)を使うとおもむろにプログラム名を記載したタブが出てくる。正直結構不格好なので使ってない。
        "height": 10,
        "mode": "OnStack",
        "tabs": {
          "width": 300
        }
      },
      "focus_follows_mouse": "Komorebi",
      "transparency": true,
      "transparency_alpha": 250,
      "global_work_area_offset": { // 上部と下部に謎の隙間ができるので調整
                "left": 0,
                "top": 50,
                "right": 0,
                "bottom": 50
      },
      "monitors": [
        {
    		"work_area_offset": {
    				"left": 0,
    				"top": 400,
    				"right": 0,
    				"bottom": 0
    		},
    		"workspaces": [ // 仮想デスクトップに名前とレイアウトを付ける
            {
              "name": "CODING",
              "layout": "Columns"
            },
            {
              "name": "WATCH",
              "layout": "Columns"
            },
            {
              "name": "COMMUNICATION",
              "layout": "Columns"
            }
          ]
        }
      ]
    }

    Barの設定

    かっちょいいステータスバーを作ることができる。正直自分にはかっこいいだけであんまり活用できてないけど、一応あれこれ設定してみた。

    標準では日本語非対応フォントなので、適当なフォントに変えておく。

    多様なthemeが用意されているので、ここは自分好みにしていいかも。

    Komorebiクラスを設定することで仮想デスクトップの何番目にいるかを表示させつつ、クリックで遷移できるようにもなるのだが、残念なことにキーバインドから遷移(Alt+1/2/3/4/…)してもそれは反映されない。今後のアプデに期待。

    {
      "$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/v0.1.29/schema.bar.json",
      "monitor": {
        "index": 0,
        "work_area_offset": {
          "left": 0,
          "top": 40,
          "right": 0,
          "bottom": 40
        }
      },
      "font_family": "Noto Sans JP",
      "theme": {
        "palette": "Base16",
        "name": "AyuDark",
        "accent": "Base0D"
      },
      "left_widgets": [
        {
          "Komorebi": {
            "workspaces": {
              "enable": true,
              "hide_empty_workspaces": false
            },
            "layout": {
              "enable": true
            },
            "focused_window": {
              "enable": true,
              "show_icon": true
            }
          }
        }
      ],
      "right_widgets": [
        {
          "Media": {
            "enable": true
          }
        },
        {
          "Storage": {
            "enable": true
          }
        },
        {
          "Memory": {
            "enable": true
          }
        },
        {
          "Network": {
            "enable": true,
            "show_total_data_transmitted": false,
            "show_network_activity": true
          }
        },
        {
          "Date": {
            "enable": true,
            "format": "DayDateMonthYear"
          }
        },
        {
          "Time": {
            "enable": true,
            "format": "TwelveHour"
          }
        },
        {
          "Battery": {
            "enable": true
          }
        }
      ]
    }

    起動と停止

    起動は以下にて。これでホットキー設定とかっこいいステータスバーが現れる。

    komorebic start --whkd --bar

    止めるときは以下。ちょいちょいバグって空白のウィンドウが一部を占有して消せないという状況になるので、リスタートする羽目になることもしばしば。

    komorebic stop --bar

    覚えておきたいキーバインド

    • atl+q Quit Window
    • alt+m Minimize Window
    • Move focus (vimの動き)
      • alt+h
      • alt+j
      • alt+k
      • alt+l
    • Move window
      • alt+x flip window
      • alt+shift+h
      • alt+shift+j
      • alt+shift+k
      • alt+shift+l
    • Resize
      • alt++ 大きく
      • alt+- 小さく
    • alt+p Pause komorebi (壊れた時とかpicture in pictureが出たときとかに使う)
    • alt+1/2/3/4/... Workspaceの移動
    • alt+shift+1/2/3/4... カレントwindowを別のworkspaceへ移動

    スタートアップ起動を設定する

    下記起動コマンドを記述した.ps1ファイルをどこかに置き、ショートカットから起動するように設定したものをスタートアップフォルダ2に入れる。

    komorebic shart --whkd --bar

    おわりに

    結構バグを感じる瞬間が多かったり、barが一つのウインドウにしか表示されなかったりと不満はあるが、精力的にメンテされているし、極めて軽量に動作するのでwindowsではデファクトではなかろうか。

    とりあえず職場PCと自宅PCに導入して3日くらいたったが、window切り替えが非常にやりやすく、キーバインドが体に染みついてくるととてもいい感じになってきた。デュアルディスプレイとの相性は悪いが、komorebiを使い始めるとむしろシングルディスプレイをフル活用できるようになるのが興味深い。

    今後の開発に超期待!


    1. ランキング形式の紹介サイトでも筆頭に上げられる。
    2. Win+R 、shell:startupでスタートアップフォルダを開けるのは覚えておいた方がいい。

    Published Oct 16, 2024

    © 2020-2024 Hiroyuki Odake