フロートウィンドウをおしゃれに操作する
xmonadは、ウィンドウのタイリング配置だけでなく、 フローティング配置も自由に出来ます。 特に、スクラッチパッドは、現在のウィンドウ配置に影響を与えず、 いつでも呼び出したり消したりできるフローティングウィンドウとして利用している人も多いと思います。 そして、このフローティングウィンドウは、 マウスを使ってウィンドウサイズを変更したり(Mod+マウス右ドラッグ)、その場所を移動したりする(Mod+マウス左ドラッグ)ことが出来ます。 しかし、ノートパソコンなどのタッチパッドだと、ドラッグとかの操作が上手く出来なかったりするので、 これがキーでできるとすごく便利になります。
そこで、今回は、キーボードからフローティングウィンドウのウィンドウサイズを変更する方法、そして、移動する方法をノートします。 まずは実際の動きを見てみましょう。
通常、スクラッチパッドのようなフローティングウィンドウはModキーとマウスの組み合わせで移動したり、サイズ変更するのを ここでは、このように、キーボードだけでおこなっています。
XMonad.Actions.FloatKeys
このノートでは、X.A.FloatKeysモジュールを使った、基本的な操作を見ていきます。 xmonad.hsの最初の方でモジュールをインポートしましょう。
import XMonad.Actions.FloatKeys
ウィンドウのサイズを変更するアクション
ウィンドウのサイズを変更するアクションを作成する関数として、「keysResizeWindow」関数を利用します。 具体的な利用方法は、xmonad.hsのキー定義の中で次のように定義しましょう。
...
-- フローティングウィンドウのサイズ変更
,("M-d", withFocused $ keysResizeWindow (-10, -10) (0.5, 0.5))
,("M-s", withFocused $ keysResizeWindow ( 10, 10) (0.5, 0.5))
...
この定義で、「Mod+d」でウィンドウが小さくなり、「Mod+s」でウィンドウが大きくなります。 以下で、設定を詳しく見ていきましょう。
keysResizeWindowの1つ目の引数はタプルで、(X方向の変動,Y方向の変動)を定義します。 1行目の定義では(-10,-10)とマイナスになっているので、X方向に10ピクセル小さく、Y方向に10ピクセル小さくするので、全体としてウィンドウが縮小します。 一方、2行目の定義では(10,10)とプラスになっているので、X方向に10ピクセル大きく、Y方向に10ピクセル大きくするので、全体としてウィンドウが拡大します。 もし、縦方向にだけウィンドウを伸ばしたり、縮めたりしたいならば(0,10)や(0,-10)を指定し、 逆に横方向だけならば(10,0)や(-10,0)を指定してみましょう。
次に、keysResizeWindowの2つ目の引数はタプルで、何処を中心に長さを変化させるかを指定します。 ここでは、ウィンドウの左上が(0,0)で、ウィンドウの右下が(1,1)になり、1に対する相対的な位置指定を0から1の間の実数で指定します。 ですから、(0,5, 0.5)はちょうどウィンドウの中心点を中心にウィンドウの縦横の長さが変化します。 また、(0,0)では、ウィンドウの左上を中心に、(1,1)はウィンドウの右下を中心に縦横の長さが変化します。
ウィンドウを移動させるアクション
ウィンドウを移動させるアクションを作成する関数として、「keysMoveWindow」関数を利用します。 具体的な利用方法は、xmonad.hsのキー定義の中で次のように定義しましょう。
...
-- フローティングウィンドウの移動
,("M-S-<L>", withFocused $ keysMoveWindow (-10, 0))
,("M-S-<R>", withFocused $ keysMoveWindow ( 10, 0))
,("M-S-<U>", withFocused $ keysMoveWindow ( 0,-10))
,("M-S-<D>", withFocused $ keysMoveWindow ( 0, 10))
...
この定義で、「Mod+Shift+カーソルキーの上下左右」でウィンドウが上下左右に移動します。
keysMoveWindow関数の1つ目の引数は、(X方向の移動量、Y方向の移動量)というタプルになっています。 X方向は、右方向がプラス、左方向がマイナスで、 Y方向は、下方向がプラス、上方向がマイナスです。 数字は、一度に動くピクセル量なので数字をお大きくすると早く動くことになります。
ウィンドウの移動については、特定の位置に一気に移動させることも出来ます。 この場合「KeysMoveWindowTo」関数を利用して、次のように定義します。
...
-- 指定位置へのフローティングウィンドウの移動
,("M-a", withFocused $ keysMoveWindowTo (960, 540) (0.5, 0.5))
...
この定義で、「Mod+a」でウィンドウがちょうど画面の真ん中に移動します(但し、画面の大きさが1920x1080の場合)。
keysMoveWindowTo関数の1つ目の引数は、(移動先のX座標、移動先のY座標)というタプルになっています。 そして、2つ目の引数は、移動先の座標をウィンドウのどの位置にするかを指定するタプルになっています。 ここで(0,0)ならば、ウィンドウの左上角、(1,1)ならウィンドウの右下角になり、縦横について0から1の範囲でウインドウ内の相対的位置を表現します。 例のように(0.5, 0.5)にすれば、ウィンドウの中心を第一引数で指定した座標に合わせた位置取りになります。
XMonad.Actions.FloatSnapという選択肢
フローティングウィンドウのキーボード操作としては、別の選択肢としてX.A.FloatSnapというモジュールがあります。 こちらは、ウィンドウの移動や拡大縮小の際、「他のウィンドウの枠にスナップ(ぺたっとひっつく)」ような挙動になります。 実際に、ウィンドウを操作する場合、下にあるウィンドウを見るために、 フローティングウィンドウを隣のウィンドウの上まで動かしたりすることが多いので、このスナップを使うと軽快にウィンドウを移動させることが出来ます。
0 件のコメント:
コメントを投稿