Peppermint LinuxにWindows風タイルのショートカットキーを設定した。苦労した

**概要：Peppermint Linux 10で、Windows 風のタイルショートカットキーを使う方法について。たいへん（自分にとって）役に立ったことを書いていますが、無駄話、グチ、文句がすごく多いです……。**

#発端

ふだんはWindowsを使っている。
UNIXっぽいことをしたくなると、WindowsでWSLを使ってUbuntuを動かしている。
しかし、GPUを使ったりするのに、何かと限界を感じ、素のLinuxをインストールしたマシンが欲しくなった。

それで、Ubuntu系軽量Linuxという評判の、英国製Peppermint Linuxというのをデスクトップに入れてみた。
噂通りインストールも（日本語入力含め）簡単、動作は軽量で快適だが、微妙に設定画面が英語のままっていうか、**英語以前**のところがある。
Keyboard ShortcutsのGUI画面がそうだった。

Peppermintのデフォルトのウィンドウマネージャーはxfceである。
Windowsにあって、Peppermintになくて困ったのが、ウィンドウのタイル動作だ。
Windowsでは田キー（*注1）と矢印キー（↑↓←→）の同時押しで、アクティブウィンドウを画面の上下左右半分に配置できる。
パソコンの作業では、プログラムを動かしながらソースをいじるとか、英文を見ながら日本語に訳すとか、何かを見ながら何かをすることが多いので、この機能は多用する。
たったこれだけのことを設定するのに、大変な苦労をした。

>（*注1：Windows用のキーボードでは左Ctrlと左Altの間にある、田んぼの田みたいな刻印のキーを、WindowsではWindowsキー、UNIXではSuperキー、EmacsではS-キーと呼称する。本稿では田キーとする）

#通常のショートカット設定
![qiita_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107571/4ebd165a-894f-e0ac-7e21-73bb15e285f1.png)


キーボードのショートカットは、通常は以下のように設定する。

スクリーンの左下のMenuボタンをクリックする。
Windowsでいうところのスタートボタンで、PeppermintではWhiskerメニューと言う。

で、Peppermint Settings Panelというのを選択する。
するとその中に、Peppermint Control Centerというのがあるので、クリックして開く。
Setting PanelとかControl Centerとか、イマイチ違いが分からない画面に分離しているのは、ちょっとダサい気がする。

Peppermint Control Centerで、Keyboard Shortcutsというタブに遷移する。
表形式になっていて、Actionカラムに動作が、Shortcutカラムにショートカットキーが並んでいる。

この中からマッピングが気に入らない動作をダブルクリックすると、Assign New Shortcutという小窓が出てくる。
上のスクショでは、close_window_keyという動作がWindows風のAlt+F4になっているのを、Alt+qにしようとしているところだ。

ShiftやAltなどのいわゆる修飾キーは、クリックすると選択状態（オレンジ）と非選択状態（グレー）でトグルする。
複数の修飾キーを組み合わせて指定することもできる。
Superは前述の通り田キーである。

Enter a valid characterというところに「有効な文字」を入れる。
大文字のQを入れようとしたらInvalid characterと怒られたので、小文字のqにした。

矢印の↑キーを入れたいとき、この手の設定画面では、そのまま矢印の↑ボタンを押下すれば設定できることが多い。
しかしこの画面では、Up（大文字のユーと小文字のピー）とタイプしないといけない。
つまり、キーボードの↑キーはUpと言いますよという、OSの内輪の事情に精通していなければならないのだ。
これもダサくね。

#どのアクションが何のアクションなんだ

さて、問題はActionカラムに登場するclose_window_keyという文字列である。
この設定をするにあったって、Xfceを採用しているMintなどのディストリビューションの記事を読み漁ったが、Peppermintはちょっと独特だ。
見た限りにおいて、Mintなど、他のディストロは、以下のうちのどちらかのようである。

- 「ウィンドウを閉じる」などの日本語で書いてある
- 「Close Current Window」などのユーザーフレンドリーな英語で書いている

Peppermintのclose_window_keyというのは、そのどちらでもなく、あとで分かるけどXMLの属性の名前がそのまま書いてあるのだ。ダサい。

close_window_keyならば察しがつくからあまり問題はないかもしれない。
しかし、以下の文字列はどうだろうか。

- move_window_up_key
- raise_window_key
- above_key

どれが何の動作か、イマイチ分からない。
別にこんなキーを押したぐらいで、パソコンが壊れたりはしないから、パコパコ押してみたが、何も起きない。
いや、何かは起こっているのかもしれないが、何が起こるか前もって知らないから、何が起きているのか、それとも何も起きていないのか、分からないのである。わかってもらえますか。

あと、このリスト順番がめちゃくちゃだ。
最初が以下のアクションで始まる。

 - workspace_3_key → &lt;Control&gt;F3
 - workspace_4_key → &lt;Control&gt;F4
 - workspace_5_key → &lt;Control&gt;F5

なんで3始まりなんだろ、もしかしてPeppermintのワークスペースって1と2がないのかなと思った。
が、もちろんそんなわけはなくて、リストの下の方に1と2が上下逆に入っていたりする。
他にも、いろいろ便利そうなキーが入っているのだが、順不同としか言いようがないグチャグチャの順番で入っている。
ダセー！

そして、もともとの目的であったタイル動作が、この膨大なリストの中にあるのか、ないのか、分からない。
キーの命名規約も順序もよく分からないので、1個1個押してみて、思いも寄らない動作が起きたり、何も起きなかったりするのを見ていくしかないのか。
無理。
#XMLをいじれ！

ということで、いろいろ検索した。
途中経過はくだくだしいから書かないが、以下のことがわかった。

- ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xmlというファイルにマッピングが入っている
- 同じxfce4-keyboard-shortcuts.xmlというファイルが/usr/share/peppermintの下に2個ほどあり、su権限でしか書き換えられないが、危険をおかしてこれを書き換えても、何も起きない

ということで、ホームの下の方のXMLを書き換える。
（いちおう変更前のを同じディレクトリにxfce4-keyboard-shortcuts.xmlbackupという名前でコピーしてから作業した）

Emacsで開いてみると、下の方に

    <property name="custom" type="empty">
      <property name="&lt;Control&gt;F3" type="string" value="workspace_3_key"/>
      <property name="&lt;Control&gt;F4" type="string" value="workspace_4_key"/>
      <property name="&lt;Control&gt;F5" type="string" value="workspace_5_key"/>
      ……

という&lt;property&gt;タグ群がある。
valueがActionに、nameがキーバインドに相当するのだ。
さっきPeppermint Control Centerで見た順不同の順番であって、workspace_3_keyが先頭に来ている。

そしてタイルに関係あるタグは、この中にない。
なぜ知っているかというと、タイル動作がどういうキーの名前になるか、偶然見つけた外国の人のブログで分かったからだ。
分かって良かったのだが、あまりにもいろいろな人のブログを見て歩いていたので、どこが決定的な情報元か分からなくなってしまった。
すまん。
たしかドイツの人だった気がする。
ダンケシェーン。
ということで、以下のタグを追加した。

      <property name="&lt;Super&gt;Up" type="string" value="tile_up_key"/>
      <property name="&lt;Super&gt;Down" type="string" value="tile_down_key"/>
      <property name="&lt;Super&gt;Left" type="string" value="tile_left_key"/>
      <property name="&lt;Super&gt;Right" type="string" value="tile_right_key"/>
      <property name="&lt;Super&gt;m" type="string" value="maximize_window_key"/>
      <property name="&lt;Super&gt;f" type="string" value="fullscreen_key"/>

nameの中に「田＋↑」を「&lt;Super&gt;Up」と書く。
valueの中には、上半分のタイルに相当する動作、tile_up_keyを書く。
このtile_up_keyっていう文字列が知りたかったんだよ〜〜

下はdown、左はleft、右はright。
言われてみれば当たり前の英語だが、当てずっぽでそれを書くのはチョット。
Xfceか、peppermintのドキュメントに当たれば書いてあるのだろうが、バカだからうまく探せなかった。

maximize_window_keyはウィンドウの最大化、ウィンドウの右上にある□（四角）アイコンをクリックした状態である。
Windowsでは、田＋↑が上半分タイルだが、この状態でさらにもう1度田＋↑を押すとウィンドウが最大化する。
これは結構気が利いた動作で、気に入っている（*2）。

tile_up_keyというコマンドを2回連続実行すると、Windows互換で最大化するかと思って試してみたが、そうはならなかった。
同じ田＋↑にtile_up_keyとmaximize_windowを両方バインドしてもそうはならない。
ウィンドウ最大化動作は、もともとの設定ではAlt+F10とかになっていたが、ぜったい覚えられないし、ファンクションキーを押す習慣もないので、田＋mにしてみた。
マキシマイズの略でmね。（それだとミニマイズもmになっちゃうけどね……）

あと、田＋fでフルスクリーンというのも入れてみた。
あと、せっかくだから超・順不同のpropertyタグ群を、なんとなく見やすいように整理整頓した。

>（*注2: なんだかんだ言って、大勢の人が使うWindowsはUXという面ではいろいろ進歩していると思うよ。Linuxは無限にカスタマイズできるから好きなようにすればいいって話だけど、カスタマイズばっかりしてて仕事する時間がなくなるにも困るのよ）

#XMLをいじったが……

XMLをいじっただけの、この時点では、田＋↑を押しても、田＋↓を押しても、田＋mを押しても、何も起きない。
なんでだろ。
またPeppermint Control Centerを開いて、Keyboard Shortcutsタブを見てみる。

まず、workspace_3_keyが先頭に来ていたので、ゲンナリした。
せっかく親切に整理したのに、また元通りの順不同になっている。
じゃあ追加したタイル関係もなくなったか？ と思ったが、あった。
いちばん下に追いやられて、しかも順不同化されている。
微妙に腹が立つ。

![qiita_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107571/c77dec29-3f29-9e55-39ba-0081ce0b1611.png)

まあそれはいいけど、せっかく設定したキーが効かないのは困る。
ふと思い立って、この画面でtile_up_keyアクションをダブルクリックして、Assign New Shortcutを出して、改めてSuper＋Upを手動でアサインしてみた。
田＋↑を押す。
見事に上半分にタイルした。
ヤッター。
（Peppermint Control Centerではタイルは効かず、FirefoxやEmacsなどの通常のアプリでのみ効くようだ。良く分からん）

ということで、いまいち納得行かないが、指定した動作のキーバインドを改めて1つ1つ手動でやり直すと、なんとなく動くようになった。

GUI上で見た限りにおいて、バインドしたキーの表記（Shortcutカラム）は、XMLをいじって設定しても、手動で設定しても、変わらない。
EmacsでXMLを開いてみたが（順不同化は行われているが）、さっき自分でタイプ入力したままの状態だ。
わけがわからん。
わからんなりにこれでいいことにする。
さあ遊んでないで仕事だ仕事だ！

**（この項終わり）**