ガジェットブログの有名サイト「ひとりぶろぐ」に以下のエントリがあった。
そのブコメによると、Android上でDebianが動くという。
早速検索してみると、以下の記事が見つかったので真似してみた末にターミナル環境でEmacsが実用的に動くようになったので以下にそのメモ書きを残す。
AndroidでLinux!root化不要でAndroid上にGNU/Linux環境を構築する方法 – OTTAN.XYZ(消滅)
(追記)残念ながらページが消えてしまっていた。またGNURoot Debianは開発終了してしまったらしく、以下のアプリへの移行が案内されていた。後日検証してみたい。
(2017/10/21 追記)
同じくAndroidのターミナルアプリであるTermuxでは記事本文で挙げた日本語フォントの表示不具合が無いのでTermuxの利用をおすすめする(Termuxのリポジトリにmozcパッケージが存在しないのだけが残念だが)。
以下リンク先の記事でTermux上でのEmacs使用方法が紹介されている。
Android上でEmacsをまともに使うには | mhatta's mumbo jumbo
(2017/10/29 さらなる追記:簡単な使用メモとノウハウ)
フォントの拡大縮小はまさかのピンチ動作で可能。
画面左端をスワイプでメニューが出る。メニューでは仮想ターミナルの一覧表示と新たな仮想ターミナルを増やすことができ(キーボードからCtrl-Alt-Cでも可能)、キーボードからCtrl-Alt-Nを押すと次の仮想ターミナルへ移動することができる。
ターミナルのその他のショートカットキーは以下。
ショートカットキー |
機能 |
C-A-P |
前の仮想ターミナルへ移動 |
C-A-数字 |
指定した番号の仮想ターミナルを開く |
C-A-+(プラス) |
フォントサイズを大きくする |
C-A--(マイナス) |
フォントサイズを小さくする |
C-A-M |
右クリックメニューのようなものを出す |
C-A-F |
フルスクリーン |
C-A-R |
現在の仮想ターミナルにセッション名を付ける |
C-A-U |
ターミナルに表示されているURLを抽出してコピーもしくは開く |
C-A-→ |
仮想ターミナル(セッション)一覧を表示 |
C-A-← |
仮想ターミナル(セッション)一覧を閉じる |
現在の仮想ターミナルを閉じるにはC-A-Mからkill processする。
テキストを編集する際に端末からemacsclientするにはemacsでM-x server-startしておいて、別の仮想ターミナルからemacsclientを実行し、C-A-Nでemacsの仮想ターミナルへ移動すればよい。
余談だが、併せてPC-Android間でファイルの同期ができるadb-sync(google/adb-sync)の導入をお勧めしたい。Dropboxなどのクラウドストレージを利用してもよいが、クラウドに上げたくない私的な・内部的なファイルでは使いにくいのと、サイズの大きいファイルでもスピーディーに同期できる点でadb-syncが優れている。adb-syncコマンドはるびきちメルマガ(Emacsの鬼るびきちのココだけの話)より知った。大変便利。
導入方法
上の記事の通りGoogle Playから「GNURoot Debian」をインストールし、記事の説明の手順を終えた後にemacs24をインストールする。GUI環境が必要なら記事に紹介されているように「XServer XSDL」をインストールするが、手元の端末ではGUI環境は動作が重く操作もしにくいため動作確認を行なったのみで詳しい使い勝手は調べていない。
Debianのシステムは/sdcard/GNURoot以下にディレクトリが展開されている模様。
フォント表示
設定メニュー→テキスト→フォントサイズでフォントの大きさを変更できる。Emacsでの入力時に読みやすくするには20ポイントぐらいに設定する。.emacsでフォントを変更しても適用されないようだ。現在のAndroidスマートフォンで一般的な大きさである6インチ弱の端末の場合、ウインドウを分割するなら16ポイントが良い。端末は通常横向きで使用すると思われるが、20ポイントだと上下にウインドウを分割した際に各ウィンドウが2行ぐらいしか表示されない。
日本語入力
ddskkをインストールするとEmacsでskkによる日本語入力が可能となるが、漢字変換をしてskk辞書を学習させているとEmacsの終了時にモードラインに「cannot set file date」と出て終了できない(Androidシステム上でのファイルパーミッション設定(変更不能)が原因か)。
仕方が無いのでCtrl+Shift+Nで別ウィンドウを作成しemacsプロセスを強制終了させることで対処する(.skk-jisyoは正常に保存されている模様)。別の端末ウィンドウに移動するごとにAndroidの日本語入力がオンになってしまい、コマンドを入力するには漢字変換キーを2回押ししなければならないのは煩わしいところ。
SKKによる日本語入力の様子。1行目と5行目で漢字変換により画面描画が乱れ入力位置直前の1文字が消えてしまっている。Ctrl-lで画面を再描画することで正しく表示されるが煩わしい。
以上に挙げたSKK利用による不具合を回避すべく、代替案としてmozcを利用しようとemacs-mozcパッケージをインストールしてみる。C-\でmozcが起動でき快適に入力ができる。
Mozcによる日本語入力の様子。三点リーダ(…)の箇所で画面描画が乱れ三点リーダの直後にアンダースコアが入って見えるが、アンダースコアを消そうとすると実際には三点リーダが削除されてしまう。この他、長い文章を入力した際に長い変換候補の表示によって画面描画の乱れが発生し、カーソル位置と思っている箇所への文字入力や文字削除が位置ずれして反映されてしまうこともあり煩わしい。
ただ予測候補への変更でTabやC-iを押すとカタカナに代わってしまい予測変換ができない。GUI上のEmacsだと正常にTabで選択できたのでコンソールだけダメである模様。色々と試行錯誤したが上手く行かず諦めた。また上記に挙げた予測候補が表示されるときに画面が乱れ、カーソル位置が入力位置と異なる位置に移動したかのように見える不具合については、mozc-popupというmozcの予測候補の表示方法を変更するパッケージがあり、それを利用すると改善するとの情報があった。試行錯誤した内容とmozc-popupの設定については以下の囲みを参照。
JapaneseEnvironment/Mozc - Debian Wikiによると、mozc-utils-guiからキーバインドを変更できるとのことだがGUI環境でmozc設定ツールを起動してもウィンドウは表示されるものの設定項目の内容が表示されない。
emacs-mozc を動かすための設定(emacs 設定編) - NTEmacs @ ウィキ - アットウィキの「8) (「サーバ準備編」利用の場合) mozc のキーバインドを設定する。」 にて他のOSの設定を~/.mozc ディレクトリにコピーすればよいとされているが、その通り実行しても設定が適用されない。
mozc-popupを入れるためのパッケージシステムの設定はbind-key.el : define-keyを直接書くのは時代遅れ!Emacsの重鎮が行っているスタイリッシュキー割り当て管理術!- るびきち「新生日刊Emacs」の説明を参照。これを設定してmozc-popupを入れてみたが「Tabキーで選択」という候補選択の案内表示はされるもののTabを押してもカタカナになってしまうのは変わらず。しかし画面の乱れは無くなり快適な日本語入力が可能となった。ただ、そもそもAndroidのIMEを使えば予測変換は可能なので、場合によってはAndroidのIMEを使って入力した方が楽かもしれない。
mozc-popupによる日本語入力の様子。画面描画が乱れることなく入力ができる。