GNU nano2.6.3をAndroid Terminal Emulatorで日本語を打てるように

8/10にGNU nano2.6.3が公開された。今回のポイントはAlt+3でコメント化ができるようになったことだろう。Ctrl+矢印もそれなりに使い勝手が上がりそうである。

早速Build。一部関数名が違っていたりするのでパッチの修正はそのぐらい。相変わらずglobには対応させていない。

現状、自分がAndroid用にコンパイルしているncursesはja_JP.UTF-8を決め打ちで返すようにしてしまっている。自分が使う分にはまったく困らないのだけど、公開するとなると気が引けているのが実情。

とりあえず、パッチを当てるときに嵌まった点を列挙。

MB_MAX_LENとMB_CUR_LEN

日本語パッチを作ろうとして大嵌まりしたのはこれにつきる。NDKだと1なのよね。マルチバイトまわりをmusl実装で置き換えたときに期待通りに動かなくてかなり悩んだ。

再定義して事なきを得たけど、UTF-8環境では4か6か、どちらで定義するのかという問題がある。

本来5オクテット以上の表現は不正なのだから、4だというのはわかるのだけど、6オクテットまでは例えそれが不正な形式とはいえ、形式上は取りうることができるのだからと言う理由で6で定義。もちろん、それが不正な形式を許容してよいという意味ではない。

もっとも、UTF-8の第1オクテットを見れば、その時点で5オクテット以上になるかどうかはわかるのだから、4で問題ないはずなんだけど。

ttynameとgetpwentとglob

NDKで実装されていない関数。

ttynameはひとまず使わなくてもすむように強制コメント化。

getpwentはなにもしない実装して空ぶらせることに。~userみたいなのはどうせ使わないから、なにもしない実装で困ることはないだろうということで。

globの実装は2.5.3と同様に見送り。2.2相当のファイル指定ができれば、自分は困らないので優先度を落とした。

2016-07あたりの近況

生存報告がてら。

nano 2.5.3日本語対応版パッチ

暫定パッチは出来た。が、肝心のタブレットが故障。環境が回復するまでスマホで確認することに。その後Android 5.1のタブレットを購入できたので、動作確認したらOK。最初PIEにするのを忘れて怒られたが。公開するためにはちょっと手直しが必要かな。

phina.js

phina.jsを使って、タッチ時の移動ルーチンとかを作成してみた。意外とすんなり書けるものだなぁと。ドキュメントも見るけど、どちらかと言うとソース本体を見ながら書いている。JavaScriptの勉強にもなるし。

Windows10のアップデート関連

XPS17をWindows10にアップデート。期限前にギリギリ滑りこませた形。aspire switch 10EはAnniversary updateに。

nano 2.5.3をAndroid Terminal Emulatorで日本語が使えるようにビルドした。

Linux環境でのテキストエディタはメインにnanoを使っている。jedも併用してるけど、nanoの方が気楽ではある。

Androidのターミナルでもnanoを使っているのだけど、通常だと日本語で文字化けしてしまう。日本語を開く機会はあまりないのだけども、文字化けしないに越したことはないので、nano 2.5.3をutf-8に対応させるべく、ソースからビルドしてみることに。予めapt-getでgcc-arm-linux-androideabiを入れておく。

more…

jedをAndroidタブレットに導入する

jedをAndroidタブレットに入れて運用することにする。自分用に作成しているUTF-8対応Android版nanoと使い分けることに。

jedはemacsライクのテキストエディタ。emacsはLISPだけど、代わりにS-Langを使うらしい。

emacsライクだけあって、emacsキーバインド。nanoがemacsに近いキーバインドのためにあまり苦にならない。昔はemacsキーバインドって抵抗あったんだけどなぁ(それでもviと比べればかなりマシではある)。

インストールは Android端末にEmacs風テキストエディタjedを移植する を参照。すんなり導入成功。

以下変更点や嵌った点を。

Altキーが効かない

Android Terminal Emulator(以下ATE)の「AltキーでESCを送出する」にチェックをすることで、解決。

キーバインドの変更

多少nanoライクに。

キー設定内容備考
C-lredrawnanoと同じキーバインド
C-uyp_yanknanoと同じキーバインド
C-ypage_upnanoと同じキーバインド
C-zundoサスペンドはさせたくない
`self_insert_cmd`はそのまま入力
M-asmart_set_mark_cmdnanoと同じキーバインド
M-Ltoggle_line_number_mode行番号の表示切り替え
\e[3~delete_char_cmdATEでの[DEL]
\e[1;5Apage_upATEの[CTRL]+[↑]
\e[1;5Bpage_downATEの[CTRL]+[↓]

AndroidタブレットでPythonを使う。

昔ちょっとだけ書いたことあるけど、あんまり勉強していなかったんだよな。

Androidタブレットでコードを書こうとしたときに、まず試したのがさくらのVPSにsshでログインしてnanoで書くという方法。nanoなのは単に単純にキーバインドが慣れているからだが。実際に書いてみると悪くはないが、如何せんネットワーク前提なので移動中にセッションが切れると面倒なので、結局次の2つを使うことにした。

1つはQPython。Consoleがあるので確認がしやすい。エディタのキーバインドもクセがあまりない。一番のメリットはCtrl+Rで実行で簡単にできるのも良い。タブキーを使うとフォーカスが飛ぶので、Ctrl+]Ctrl+[を使う。nanoのインデント入力がAlt+Shift+]Alt+Shift+[なので、あまり違和感はない。
もう1つは本家?であるSL4APY4A。コードの入力環境はお世辞にも良いとは言えないのでコーディングはDroid Editorを使うことにする。ちゃんとタブも効くし、キーボードショートカットを設定すればSL4Aを呼び出せるので、動作確認もしやすい。Ctrl+Shift+Rで実行するようにした。

PC側ではPyCharmを使うことにした。こっちもいろいろ調べてみよう。

HTML Generating Time : 0.149 s