Awesome window manager のタグ切り替えを modkey + スクロールボタンでできるようにする

ふとしです。

先月突然 Awesome window manager を導入して便利に使っています。

ただタグを各スクリーンに 20 個とかにしているので移動が大変です。Awesome の強みの一つはキーボードで全部操作できることなので、さすがにそこそこショートカットを使うようになってきましたが、根本がマウサーなので、マウスでタグを切り替えたいと思いました。

デフォルトでは

デフォルトではタグのリスト上や、なにもないスクリーンでスクロールボタンを動かすとタグが替わるようになっています。

4、5 がそれぞれマウスのスクロールボタンの上下に対応しています。

root.buttons(gears.table.join(
    -- snip
    awful.button({ }, 4, awful.tag.viewnext),
    awful.button({ }, 5, awful.tag.viewprev)
))

この設定ではクライアント、なんらかのウィンドウを表示しているタグでは切り替えが停まってしまいます。ウィンドウ上でスクロールボタンを動作させたときにスクロールが発生せずにタグの切り替えが発生しても困るので当たり前の設定ですね。

modkey + スクロールボタンでタグを切り替えられるようにする

root の設定を参考に buttons の 4、5 でも同じ動作をするようにします。

awful.tag.viewnext はタグがあるスクリーンのインデックスを引数に取り、そのスクリーンのタグを切り替えます。

しかし、awful.button のコールバックで得られる引数は Client クラス なので、適切なプロパティからタグを切りかえるスクリーンのインデックスを得る必要があります。

clientbuttons = gears.table.join(
    awful.button({ modkey }, 4, function(c) awful.tag.viewnext(c.screen.index) end),
    awful.button({ modkey }, 5, function(c) awful.tag.viewprev(c.screen.index) end),
    -- snip
)

何も無いときでも modkey + スクロールボタンでタグを切り替えられるようにする

このままだと modkey を押して気持ちよく切り替えていると、何もないスクリーンでは切り替えが停まってしまうので、modkey を押しているときも切り替える設定を入れます。

root.buttons(gears.table.join(
    -- snip
    awful.button({ }, 4, awful.tag.viewnext),
    awful.button({ }, 5, awful.tag.viewprev),
    -- 追加分
    awful.button({ modkey }, 4, awful.tag.viewnext),
    awful.button({ modkey }, 5, awful.tag.viewprev)
))

設定を適用する

設定を保存し modkey + ctrl + r で設定をリロードすると、めでたくスクロールボタンで高速に タグが切り替えられるようになりました。