はじめに
私は、Asus FlipというChromeBookを普段使っています。
幸いこのマシンは、ChromeOS, Andoroid, Linuxを同時に実行できますので、使えるアプリケーションの選択の幅は、かなりあると思います。
しかし、それでもどうしても満足できないのが、ほかならぬテキスト入力の環境だと言えます。
ChromeOS上のテキスト・エディターにもかなり使えるものはあるのですが、そのどれもがまともに日本語入力ができません。たとえば、私が気に入ってるCaretといのがありますが、これは日本語の入力はできるのですが、なんとIMEのオンオフの切り替えができないのです。ですから、ブラウザにでも戻ってIMEの切り替えをして、もう一度Caret画面に戻ります。
ネット上で推奨されているエディターについては、どれも「冗談でしょう、こいつで文字を打つのか」と、思えるものばかりで、まあWindowsのメモ帳以下でしょう。
では、Androidのエディターでも使おうかと思って試してみましたが、そもそもここにもいいエディターは皆無でした。
Jotaというのが人気があるようですが、やはり「こんな程度の代物しかないのか」、という感じです。これと比べるならば、WindowsのSakuraが、神に見えます。いや、MS-DOS時代のVZが懐かしく感じました。
では、Linuxはどうかというと、現在ではIntelチップ上ではものすごく優秀なエディターがいくつかあるのですが、悲しいかなArm7上では、そういうものは無いのです。
結局、コンソール上でVimでも使うしかないか、というのが私の結論でした。
問題点
ここで問題になるのが、以下の2点です。
- ChromeOSのCrosh上で、そもそもどうやって日本語を入力できるようにするか。
- ChromeOSのCroshウインドウ(ブラウザの1タブ)と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>
モードに関係なく、+@で、カーソル位置にクリップボードの内容がコピーされる。
vmodeでは、@!で、選択領域がクリップボードにコピーされる。
以上で、少なくともChromeとCroshとの間のカットアンドペーストは可能になる。
もちろん、これでもまだ十分ではない。
なぜなら、Chrome内で動作している場合に限って、Crouton Clipboardは機能するのであり、独立したアプリケーションからクリップボードにコピーされた内容は監視できない。
逆に、Vimから貼り付けられた文字列は、独立したアプリケーションでも使える。
以上、なかなか100%の解決とはいかないが、少なくともWebページのコピーをVimに貼付けられるので、実用上では大きな改善である。やっと、使う気にさせる最低限度の水準に達した、と思われる。
もちろん、この程度の環境では、居心地が良いとはお世辞にも言えないだろう。
プログラムやマークアップを全く書かないのなら、短いメモはGoogleKeep、長いものはGoogleDocumentを使うのが、素直かつ最善の選択であるように思う。まあ、そういう使い方を想定したOSですから。
想定された使い方をしない者たちの労苦は、これからも果てしなく続く。