ChromeBook におけるテキスト入力環境の改善について

#　はじめに
　私は、Asus FlipというChromeBookを普段使っています。
　幸いこのマシンは、ChromeOS, Andoroid, Linuxを同時に実行できますので、使えるアプリケーションの選択の幅は、かなりあると思います。
　しかし、それでもどうしても満足できないのが、ほかならぬテキスト入力の環境だと言えます。
　ChromeOS上のテキスト・エディターにもかなり使えるものはあるのですが、そのどれもがまともに日本語入力ができません。たとえば、私が気に入ってるCaretといのがありますが、これは日本語の入力はできるのですが、なんとIMEのオンオフの切り替えができないのです。ですから、ブラウザにでも戻ってIMEの切り替えをして、もう一度Caret画面に戻ります。
　ネット上で推奨されているエディターについては、どれも「冗談でしょう、こいつで文字を打つのか」と、思えるものばかりで、まあWindowsのメモ帳以下でしょう。
　では、Androidのエディターでも使おうかと思って試してみましたが、そもそもここにもいいエディターは皆無でした。
Jotaというのが人気があるようですが、やはり「こんな程度の代物しかないのか」、という感じです。これと比べるならば、WindowsのSakuraが、神に見えます。いや、MS-DOS時代のVZが懐かしく感じました。
 では、Linuxはどうかというと、現在ではIntelチップ上ではものすごく優秀なエディターがいくつかあるのですが、悲しいかなArm7上では、そういうものは無いのです。
　結局、コンソール上でVimでも使うしかないか、というのが私の結論でした。
# 問題点
　ここで問題になるのが、以下の２点です。

 - ChromeOSのCrosh上で、そもそもどうやって日本語を入力できるようにするか。
 - ChromeOSのCroshウインドウ（ブラウザの１タブ）とChoromeOSのクリップボードの不完全なカットアンドペースト環境を、どうやって改善するか。

　前者については、実に乱暴な方法で解決してしまいました。
　前投稿「ChromeBook KaliLinux の奇妙な使い方」で書きましたが、ようするに、人間パッケージマネージャーになって、Kaliのバイナリーを手動でChromeOSにインストールしたのです。
　Locale環境の構築 → uim-fep, uim-mozcのインストールでなんとかしのいでしまいました。

　さて、後者ですが、そもそもどういう状況かというと、Crosh → ChromeOSクリップボードは、なんとか多言語でもOKなのですが（ただし、タッチパッドで選択貼付）、その逆については、ASCII文字以外はすべて化けしてしまうのです。
　これはかなり深刻で、だいぶ考えたのですが、長い間うまい解決方法が見つかりませんでした。

　ところが、とうとうその解決方法を見つけました。
　というか、解決した人がいたのです。そう、Croutonの作者による、Croutonクリップボードです。
　このCroutonクリップボードは、Croutonとは直接関係がありません。ChromeOSのクリップボードとコンソール環境を繋ぐXselのようなプログラムです。
　以下、これの導入方法について詳しく述べます。といのも、作者さんのインストール時の環境設定では、絶対まともに動かないからです。本人も「私自身は試していないが」などと述べています。はい、動きません。
　しかし、インストラーの環境設定がいいかげんなだけで、本体プログラムはすばらしいのです。
　これを丁寧に動くようにしましょう。そして、すこしばかり使いやすいように、改良しましょう。
　まあ、Vimの設定を変更するだけですが。

# CroutonクリップボードのインストールとVimでの設定
　まず、インストールするところまでは、作者さんの指示どうりで問題ありません。
　作者さんのページに書いてあることを、以下に転記します。
　なお、前提として、ChromeOSにnode.jsがインストールされてなければなりません。

　まず、以下を実行して、ChromeOSクリップボード監視サーバーをインストールする。

```
curl -sL https://cdn.rawgit.com/zwhitchcox/crouton-clipboard/c7d055f2ea0a2c23f6874c623fff9d23f6f0b431/install.sh | sh
```

　このサーバーは、単独で機能するのではなく、Chrome拡張機能Crouton Clipoardと連携して機能する。
　ということでchrome Webstoreからこれをインストールする。

　つぎに、インストーラーが勝手に書き換えたファイルを修正する。
　まず、.bashrcにおけるサーバー自動起動をコメント化する。
　毎回bashを起動するたびに、サーバーを起動する必要はない。
　OSブートした後、一回だけ立ち上げればよい。手動で起動しましょう。


```
# node ~/.crouton-clipboard/server.js &
```

　つぎに、.vimrcに加えられた記述もコメント化する。


```
" nnoremap "*p :r !cat /home/chronos/user/.crouton-clipboard/data.txt<CR>
" vnoremap "*y :'<,'>w! /home/chronos/user/.crouton-clipboard/data.txt<CR>
```

　これは、動かない。
　Windows版と違ってLinux版では、*レジストはほとんどのVimで実装されていない。
　しかし、上記動作は上書きできないように設定されている場合が多い。
　敢えて書くと、

```
nnoremap "@@ :r !cat /home/chronos/user/.crouton-clipboard/data.txt<CR>
vnoremap "@@ :'<,'>w! /home/chronos/user/.crouton-clipboard/data.txt<CR>
```

　と、でもすれば動作する。
　しかしこれでは、期待する動作とはならない。
　これでは、カレント行の下に文字列が挿入され、vmodeにおける文字単位の選択領域は無視され、カレント行がクリップボードにコピーされてしまう。
　以下のようにすれば、一般的なエディターのカットアンドペーストの動作となる。

```
function FromClip()
   let f = readfile("/home/chronos/user/.crouton-clipboard/data.txt")
   let @0 = join(f,"\n")
   let @" = @0
endfunction
```
```
function ToClip()
   call writefile(split(@","\n"),"/home/chronos/user/.crouton-clipboard/data.txt")
endfunction
```
``` 
nnoremap <C-@> i<Esc>:call FromClip()<CR>p
vnoremap <C-@> <Esc>i<Esc>:call FromClip()<CR>p
inoremap <C-@> <Esc>:call FromClip()<CR>pi
```
``` 
vnoremap @! y:call ToClip()<CR>
```

　モードに関係なく、Ctrl+@で、カーソル位置にクリップボードの内容がコピーされる。
　vmodeでは、@!で、選択領域がクリップボードにコピーされる。
　以上で、少なくともChromeとCroshとの間のカットアンドペーストは可能になる。

　もちろん、これでもまだ十分ではない。
　なぜなら、Chrome内で動作している場合に限って、Crouton Clipboardは機能するのであり、独立したアプリケーションからクリップボードにコピーされた内容は監視できない。
　逆に、Vimから貼り付けられた文字列は、独立したアプリケーションでも使える。

　以上、なかなか100％の解決とはいかないが、少なくともWebページのコピーをVimに貼付けられるので、実用上では大きな改善である。やっと、使う気にさせる最低限度の水準に達した、と思われる。

　もちろん、この程度の環境では、居心地が良いとはお世辞にも言えないだろう。
　プログラムやマークアップを全く書かないのなら、短いメモはGoogleKeep、長いものはGoogleDocumentを使うのが、素直かつ最善の選択であるように思う。まあ、そういう使い方を想定したOSですから。

　想定された使い方をしない者たちの労苦は、これからも果てしなく続く。