dwmの使い勝手を向上させる5つの便利なパッチ
dwmは、わずか2000行ほどのコードで実装された、優れたミニマリスト志向のウィンドウマネージャです。軽量かつ高速に動作する一方で、プログラムサイズを抑えるために一部の機能が削ぎ落とされているのも事実です。
とはいえ、dwmはソースコードベースで配布されているため、パッチを当てることで新しい機能を追加できます。実際、基本的な設定を行うだけでも、dwmのソースコードの一部であるconfig.hを編集する必要があります。
一見複雑に思えますが、いくつかのポイントを押さえれば、dwmへのパッチ適用は決して難しくありません。この記事では、自分のdwm環境にパッチを適用するために必要な知識を解説し、おすすめのパッチを5つ紹介します。
パッチとは何か?
パッチとは、大きなコードベースに挿入できる小さなコード断片のことです。大規模なソフトウェアプロジェクトでの共同作業において、他の開発者が行った変更を素早く確認できるため、非常に有用な仕組みです。
パッチの規模はさまざまで、バグを修正するための1行程度の小さな変更から、新機能を追加するための複数ファイルにわたる大規模な変更まで存在します。
dwmのソースコードへのパッチ適用方法
ソースコードにパッチを適用する方法はいくつかあります。最も一般的なのはgitコマンドを使う方法です。例えば、gitリポジトリにパッチを適用するには、次のように入力します。
git apply -3 path/to/the/patch.diff
apply関数は、パッチファイルの内容を指定されたソースファイルに挿入しようとします。-3オプションは不整合の修復を試み、パッチ適用中のミスをユーザーが修正できるようにします。
一方、バージョン管理なしでソースコードを編集している場合は、GNU patchプログラムを使用できます。その場合は次のように入力します。
patch -p1 < path/to/the/patch.diff
-p1オプションは、パッチファイルが正しく認識されるようにラベルを調整します。
ただし、dwmにパッチを当てる場合、これらのツールが失敗することがあります。というのも、パッチ適用ツールは、対象のソースコードが「素のdwm」と同じ状態であることを前提としているからです。
つまり、パッチを重ねて適用すればするほど、ツールがうまく機能しなくなります。そのため、パッチファイルの仕組みを理解し、手動でパッチを適用できるようになっておくことが重要です。
パッチファイルの読み方
パッチファイルは主に3つの要素で構成されています。
- どのファイルにコードを挿入すべきかを示すヘッダー
- どの行番号・関数に挿入するかを示すサブヘッダー(ハンクヘッダー)
- コード本体
前述のとおり、1つのパッチファイルには複数のファイル向けのコード断片が含まれることがあります。この形式のおかげで、ソースファイルごとに個別のパッチを用意する代わりに、1つのファイルを配布するだけで済みます。
したがって、パッチファイルを読むには、ヘッダーの構文を理解するだけで十分です。それがわかれば、あとはコードをコピー&ペーストするだけです。
パッチヘッダーの構文
パッチのヘッダーには、ソースファイルの場所に関する重要な情報が含まれています。例えば、これはdwm autoresizeパッチのヘッダーです。
diff --git a/dwm.c b/dwm.c index 0362114..e4e8514 100644 --- a/dwm.c +++ b/dwm.c
1行目、3行目、4行目は、dwm.cファイルの2つのバージョン間の差分であることを示しています。つまり、編集対象のファイルは「dwm.c」であることがわかります。
しかし、どのファイルを編集するかわかっただけではパッチを適用できません。ファイル内のどこにコードを挿入すべきかも知る必要があります。そこで役立つのがパッチファイルのサブヘッダーです。
例として、同じautoresizeパッチの一部を見てみましょう。
@@ -92,7 +92,7 @@ struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int bw, oldbw;
unsigned int tags;
- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
+ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, needresize;
Client *next;
Client *snext;
Monitor *mon;
一見難しそうに見えますが、注目すべきは3点だけです。
- 最初の行は、コードを挿入すべき行番号を示します。この例では92行目です。
- 最初の行の2番目の引数「
struct Client {」は、編集対象の具体的な関数(構造体)を示します。ソースファイルにすでに多くのパッチが適用されていて、左側の行番号がずれている場合に特に役立ちます。 - 最後に注目するのは、コードブロック内の
+と-の記号です。マイナス記号は削除する行、プラス記号は追加する行を意味します。
以上で、ソースファイルへのパッチ適用の基本が理解できました。それでは、dwmにおすすめの5つのパッチを見ていきましょう。
1. Systray(システムトレイ)
多くのデスクトップ環境と異なり、dwmにはデフォルトでシステムトレイが搭載されていません。システムトレイとは、バックグラウンドで動作しているアプリケーションと素早くやり取りするために、アプリのアイコンや機能を表示しておけるデスクトップ上の領域のことです。
このパッチは、その機能をdwmに追加します。インストールすると、dwmバーの右端が現在のシステムトレイプログラムに割り当てられます。さらにマルチモニター環境にも対応しており、トレイは常にマウスカーソルのあるモニター上に表示されます。
2. Xresources
Xresourcesパッチを導入すると、xrdbプログラムでdwmのグラフィカル設定を指定できるようになります。これにより、.Xresourcesファイルを使って色やフォントを変更でき、再コンパイルが不要になります。ターミナルのカラースキームにすでに同じファイルを使っているユーザーにとっては特に便利です。
さらに、xrdbでdwmの外観を管理することで、複数のテーマを使い分けることも可能になります。.Xresourcesファイルを目的のカラースキームに書き換えて、dwmを再読み込みするだけで切り替えられます。
3. Tatami(畳レイアウト)
Tatamiは、dwmのための代替ウィンドウレイアウトです。画面上のウィンドウを、日本の伝統的な畳の敷き詰めのように配置します。従来のマスタースタックレイアウトでは、マスター以外の各ウィンドウが縦に細長くなっていくため、スタック内のウィンドウが読みにくくなりがちですが、このアプローチはそれとは異なります。
畳レイアウトは、4〜5個のウィンドウを同時に扱う場合に特に有効で、各ウィンドウに十分な画面スペースが確保されるため、快適に閲覧できます。
4. Focus Master
dwmのウィンドウ配置は、ブロックを積み重ねるのに似ています。新しく作成されたウィンドウは前のウィンドウの上に置かれ、ウィンドウ間に線形の順序が生まれるため、どのウィンドウが先に開かれたのかがわかります。
しかし、この設計には制限があり、スタックの中から自由にマスターウィンドウを選択できません。マスターを選ぶには、一番上のブロックに到達するまで各ウィンドウを順番に選択していく必要があります。このパッチはこの挙動を変え、スタック内のどこからでも現在のマスターウィンドウを選択できるようにします。
多数のウィンドウを扱う際に特に便利で、ウィンドウを順番に巡回することなく、自動的にマスターを選択できます。
5. dwmc
dwmの設定を変更するには、変更を反映させるたびにプログラムを再コンパイルする必要があります。カラースキームやデフォルトの挙動なども例外ではありません。
dwmcは、クライアントプログラム経由でdwmの挙動を変更できるようにするシンプルなパッチです。このアプローチは、bspwmがbspcを使って設定を変更するのと似ています。dwmcはbspcよりずっとシンプルですが、それでも活用できる便利な設定がいくつもあります。
例えば、togglebar関数があります。「dwmc togglebar」を実行すると、dwmバーを動的に表示/非表示できます。これにより、独自のウィンドウ操作を行うスクリプトを作成する際にもdwmcが役立ちます。
おめでとうございます!これでコードパッチの仕組みの基本と、dwm環境に適用できる5つの便利なパッチについて理解できました。ブラウザでも同様のミニマルな体験をお探しなら、こちらのチュートリアルもぜひチェックしてみてください。
よくある質問
1. dwmのパッチは安全に使えますか?
はい。sucklessの公式サイトに掲載されているパッチは、複数のメンテナーによってチェックされています。これにより、サイト上のすべてのパッチが対応するバージョンのdwmで正常に動作することが保証されています。
2. git applyを使ったのですが、パッチが失敗してdwmがコンパイルできません。どうすればいいですか?
原因はいくつか考えられます。最も多いのは、gitのヘッダーがソースファイルから削除されていないケースです。これは比較的簡単に修正できます。ヘッダーを削除して、パッチを手動で適用しましょう。
ソースファイルを開くと、「HEAD」というラベルの付いた行が見つかるはずです。これは修正箇所の始まりを示しており、続いて修正が必要な関数が表示されます。その行を削除し、手動でパッチを適用してください。コードの左側には+と-の記号があり、何を変更すべきかのガイドになります。
3. パッチの適用には成功したのに、dwmがコンパイルできず、変数や宣言が不足していると言われます。どうすればいいですか?
パッチ適用プログラムがconfig.hファイルを修正できていない可能性があります。デフォルトでは、既存の設定との競合を避けるため、パッチはconfig.def.hファイルを編集するようになっています。
しかし、その場合config.hファイルにはそのパッチに必要な設定値が反映されません。これを解決するには、config.def.hファイルに加えられた変更を、自分のconfig.hファイルにも手動で反映させる必要があります。
-
Netflix視聴体験をレベルアップ!知っておきたい6つの便利ツールと隠し機能
多くの人にとって、Netflixは日常に欠かせない動画配信サービスとなっています。豊富なコンテンツと洗練された操作性で高い評価を得ていますが、「もっと使いやすくできたら」と感じたことはありませんか?この記事では、Netflixの視聴体験をさらに向上させる便利なツールや、あまり知られていない隠し機能を6つご紹介します。なお、便利なツールや裏ワザはここで挙げる6つだけではありません。今回はその中でも特に実用性の高いものを厳選しました。1. NEnhancerブラウザでNetflixを視聴する方におすすめなのが、Chrome拡張機能の「NEnhancer」です。インストールすると、視聴したい作品の予
-
macOS Mojaveをもっと快適に使うための6つの便利なヒント
2018年にリリースされたmacOS Mojaveは、Mac向けOSとしては15番目のメジャーリリースです。前バージョンのHigh Sierraがハードウェアやシステムパフォーマンスの強化に重点を置いていたのに対し、MojaveはMacの生産性向上を主眼としており、ユーザーがデータを整理し、よりスマートに検索し、日常的なタスクを素早くこなせるよう設計されています。 macOS Mojaveが世界中で人気を集めたもう一つの理由は、Apple News、ボイスメモ、ホームなど、複数のiOSアプリをMac上で利用できるようにした点です。そしてもちろん、待望のダークモードの登場も見逃せません。 ma