xmonadの0.17.0へおしゃれにバージョンアップ
2021年10月27日、約3年ぶりにxmonadの新しいバージョン0.17.0がリリースされました!!
これにともなって、「The Xmonad Logo Contest」が開催中。 締切は、2022年1月31日で、その後投票があるみたいです。賞金も100ドル出るみたいですよー! 詳しくは上のリンクを辿ってください。 僕は絵心とかないけれど、新しい、楽しいxmonadのロゴが沢山出てくるといいなーと思ってウオッチ中。まだ、誰も応募してません。
archlinuxでxmonad0.17を使う
さて、2021年11月5日現在、archlinuxの公式パッケージはまだxmonad0.15のままですが、 AURのxmonad-gitとxmonad-contrib-gitをインストールすれば、0.17にバージョンアップできます。 もう早速、xmonadを新しくしちゃいましょう!!
$ yay -S xmonad-git xmonad-contrib-git
現時点では、aurでのパッケージのバージョン名がまだ0.15や0.16ですが、gitのリポジトリはすでに0.17なので0.17がインストールされます。 公式のxmonadパッケージxonad-contribパッケージとはコンフリクトするので、 今まで公式パッケージを使っている場合、指示に従って公式側を消し、git側に入れ替えましょう。
さてここで、AURのxmonad-gitとxmonad-contrib-gitを初めて使う場合、注意が必要です。
haskellライブラリアップグレードの際、AURのxmonad-git等の再インストールを忘れない
archlinuxのパッケージでxmonadを使っている場合、haskell関連のプログラムファイルは動的ライブラリになっています。 ですから、普段からxmonadを使っている人たちは、haskellの関連するライブラリが更新されると、 xmonad.hs自体も再コンパイルするのが習慣になっていると思います。 そして、これは、公式リポジトリのxmonadパッケージは、 関連ライブラリのアップグレードとともに、 xmonad自身も再コンパイルした新しいパッケージが公式リポジトリにリリースされているので、 xmonad.hsだけを自分で再コンパイルすればよいようになっています。 しかし、公式リポジトリのxmonadではなく、 AURのxmonad-gitを使う場合、新しい関連ライブラリのもとでビルドされた新しいxmonadはアップデートで自動的に降ってこないので、 xmonadの再コンパイルを自分でしなければならなくたります。
だからといって、なにか難しいことをしないといけないわけではなく、 単に、yay等で、もう一度、xmonad-git、xmonad-contrib-gitを上書きインストールするだけです。 まぁ、コンパイルにちょっとだけ時間がかかる(数分)ので、のんびりやりましょう。
もちろん、その後に、xmonad.hsを「M-q」で再コンパイルするのも忘れずに!!
非推奨を無視してコンパイルする
バージョンアップによって関数等の書き方が変わり、もともとの書き方が「Deprecated(非推奨)」に指定されているものがあります。 そこで、今まで使っていたxmonad.hsのコードの中に非推奨のものが含まれるとエラーとなって、リコンパイルができないことがあります。 この場合、エラーメッセージで新しく推奨される書き方の指示がされるので、 そのとおりに、訂正すればコンパイルが通るようになります。
しかし、とりあえず、非推奨でもそのまま使いたい場合には、GHCへ次のオプションを渡すことで、非推奨を無視してコンパイルすることが出来ます。 xmonad.hsの一番はじめの行に以下の一行を加えてみましょう。
{-# OPTIONS_GHC -Wno-deprecations #-}
XMonad.Hooks.WindowSwallowingを試す
さて、せっかくなので、xmonad-contribの0.17になって新しく加わったモジュールの一つを紹介します。
XMonad.Hooks.WindowSwallowing というモジュールで、twitterでもはじめに話題になっていていました。 どんな機能なのかというと、、、
ターミナルからchromiumを呼ぼうとおもったとき
普段使っているレイアウトTallの場合、 呼び出したターミナルは、右側のペインに移り、ワークスペースの右側は、ウィンドウサイズがそれぞれ小さくなっています。 しかも、呼び出したターミナルはGUIからのエラー出力等を見ない限り、実質的には使わないウィンドウにります。そのくせ、かさばって実は邪魔な存在だったりします。
しかし、WindowSwallowingを使うと、
呼び出されたGUIが もとにあった、ターミナルを飲み込んで(swallow)くれるのです。 つまりは、必要なくなったターミナルアプリがワークスペースから隠れることで、ワークスペースを広く使うことが出来るのです。
隠れたターミナルは、呼び出されたGUIアプリを終了すると、吐き出されるようにワークスペースへ戻ってきます。
どうですか?なかなか、かゆいところに手が届くxmonadらしいユーザー目線の機能でしょ??
WindowSwallowingを使う
まずは、モジュールのインポートです。
import XMonad.Hooks.WindowSwallowing
次に、swallowEventHook関数で、イベントフックを作成します。 以下のコードは、kittyとalacrittyとxtermからGUIが呼ばれたときに、飲み込まれるようにするイベントフックを作成する例です。
myHandleEventHook
= swallowEventHook ( className =? "Alacritty"
<||> className =? "kitty"
<||> className =? "XTerm") (return True)
クラス名の文字列でターミナルを判定します。他のターミナルを設定したいときは、
xpropコマンドを利用して、クラス名を調べ、"kitty"のような文字列部分を書き換えたり、
「または」を意味する「<||>
」演算子を追加して、新たな条件を追加して調整しましょう。
また、2つ目の引数で、上記の例では常にTrueを返すアクションを定義して渡していますが、
第一引数と同じように、
条件設定をすることでターミナルを飲み込むGUIを限定することも出来ます。
このmyHandleEventHookの定義ができたら、xmonad関数に渡すXConfig l型のdefの「handleEventHook」にこのmyHandleEventHookを追加しましょう。
...他の設定
handleEventHook = myHandleEventHook <+> handleEventHook def
...他の設定
注意としては、今の所、レイアウトでスマートボーダーやノーボーダーを利用している場合、
GUI終了時に飲み込まれたターミナルが行方不明になるバグがあるようなので、
うまく行かない場合には、それらのレイアウトを外してみてください。
もともと、スマートボーダー機能と相性が悪いバグがありましたが、既に修正済みです。
0.17.0版のxmonad.hsの例
0.17.0用に書き換えたうちのxmonad.hsです。 特にステータスバー周りは、別途、ステータスバープログラムを立ち上げるコードを自分で書く必要がなくなり、 また、データのやり取りにXのプロパティを利用するようになったので、 色々と刷新されています。
特にxmobarの場合、新しいモジュールの関数を使えば、1関数で、簡単に管理できるようになっています。 但し、実際にやってみると、xmobar側でXのプロパティーで情報のやり取りをする設定をしないと、xmobar自体が立ち上がってくれないかもしれません (うちでは、その設定をしないとうまくいかなかった)。 一方、polybarについては、自作しないといけないところがあるので、その辺を適当にやっています。 新しいモジュールで、自分の好きなステータスバーを管理するための関数等を自作する場合の参考にして下さい。
0 件のコメント:
コメントを投稿