WSLを使ってWindowsの操作性を向上させる

# やりたいこと
WSLを使ってもっとWindowsを便利にしたい。次のことを実現する

* ファイルマネージャーをキーボードで利用できるようにする(**rangerの利用**)
* rangerから**MS Office**や**Adobe Reader**を使ってファイルを開けるようにする
* ドラッグアンドドロップのために**bashからExplorer**を開けるようにしておく(パワポとかで画像をドラッグアンドドロップすることが多いため)

# 環境
* Windows10
* Windows Subsystem for Linux (WSL) (私はUbuntuを入れています)

# 実現方法

## rangerのインストール
rangerとは、bash上で利用できるファイルマネージャーです。windowsでいうところのExplorerです。その大きな特徴は**Vimのようにファイルマネージャーを操作できる**点です。つまりマウスがいりません。


こちらのサイトを参考にしました。
[CLI で Linux ファイルマネージャ ranger を使うことのメモ](http://malkalech.com/ranger_filer)

前提としてPythonがパソコンに入っていることが必要ですが、WSLなら最初から入っているので気にしなくてよいです。ただ、```pip```が必要なので、入れておきます。

```bash:bash
$ sudo apt-get install python-pip
```
次のコマンドを打てばrangerのインストールは終わりです。

```bash:bash
$ sudo pip install http://nongnu.org/ranger/ranger-stable.tar.gz
```
bash上で```ranger```と打てば下のような画面が起動します（薄いのは私のbashの設定です、スミマセン）。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/226092/672e600e-f6a8-46db-4430-ee3c7494f2c9.png)


Vimのようにh,j,k,lで移動ができます（h, lはディレクトリの上下の階層への移動になっています。）。操作方法は上のリンクが詳しいです。

rangerではVimと同様に```:q```で抜け出すことができますが、抜け出したときにrangerでいたフォルダに移動していたら何かと便利です。これを実現するためには[こちらのGitHub](https://github.com/ranger/ranger/blob/master/examples/bash_automatic_cd.sh)のbash_automatic_cd.shの内容を```~/.bashrc```に記述しておきます。ただし、```/usr/bin/ranger```はWSLの場合には次のように変えておきます。

```bash:~/.bashrc
/usr/local/bin/ranger
```
これで```Ctrl+o```でrangerが起動し、さらに```:q```で抜けたときにフォルダ移動がされます。


## rangerからWindows上のソフトウェアを使ってファイルを開く
さて、rangerは```r```と打てばカーソルのある位置のファイルを開くことができます。私は普段の作業ではMS OfficeやAdobe Readerを使っているので、rangerでこれらを使ってファイルを開きたいわけです。

しかし、WSL上で、```~/.profile```でOfficeやAdobeにパスを通しておいてもrangerから開こうとするとファイルが見つかりませんというエラーが出ます。これを解決するためには```~/.config/ranger/rifle.conf```に次のような行を追加します。

```bash:~/.config/ranger/rifle.conf
ext docx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start winword
ext xlsx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start excel
ext pptx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start powerpnt
ext pdf = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
ext exe = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start
```
これを追加しておけば、```r```コマンドをranger上で打ったときに、OfficeやAdobeが候補として出てきて、それを選択すればちゃんと開けるようになります。

# bash上からExplorerを開けるようにする
rangerは非常に操作性が高く、使いやすいのですが、一つExplorerに負けている点があります。それが**ドラッグアンドドロップ**です。パワポなどを使っていると、画像を張るためにパワポ上にファイルをドラッグアンドドロップすることがあります。

rangerには残念ながらその機能がないため、仕方ないのでせめてbashからカレントディレクトリをExplorerで開けるようにしておきます。```~/.bashrc```上に次を追加します。

```bash:~/.bashrc
function winp {
    pwd | sed -e "s;/mnt/c;C:;" -e "s;\/;\\\\\\\\;g" | xargs explorer.exe
}  
```
これを通しておけば、bash上で```winp```と打てばカレントディレクトリがExplorerで開きます。

# 参考サイト
* [CLI で Linux ファイルマネージャ ranger を使うことのメモ](http://malkalech.com/ranger_filer)
* [GitHub- ranger/ranger](https://github.com/ranger/ranger/blob/master/examples/bash_automatic_cd.sh)
* [StackExchange](https://unix.stackexchange.com/questions/402724/open-file-behavior-using-ranger-in-windows-subsystem-for-linux)