2018年6月〜7月中旬の近況

2018年も半年が過ぎてしまった。

GNU nanoが2.9.8になった。

wrappingやjustifyあたりの改善が主。クォートの閉じ忘れでクラッシュする問題が修正されたとのこと。

なお、一ヶ月ぐらい2.9.8-12で更新が止まっていたが、ここ最近で更新が進んでいる。私家版のとのコンフリクトを解消するときに、tigを使っている。tigやっぱり便利だ。

なお、2.9.8-58でついに^?に単語レベルでの削除が実装された模様。

さくらのVPSをUbuntu 18.04にアップグレードした。

nginx/PHPまわりで一部設定を書き直す必要があったが、基本的にはすんなりアップグレード出来た。

私家版GNU nanoの開発にはgcc4.9を使っていたが、これを機会にclangに変更。そしてgnulibの実装を使わないようにする。gnulibではAndroid用にnanoをコンパイルする際に地雷を踏みまくった(パッチもかなり充てた)ので、極力使いたくないのだ。

Android端末で実装が無いと困るのはglobだが、クロスコンパイルでもmuslの実装を一部修正すれば対応出来るのでgnulibを積極的に使う理由が自分にはもう無い。

gnulibを使わないようにするには、lib/Makefile.inを適当に作成して、autogen.shの代わりにautoreconf -f -s -iで良い。

Owltech OWL/BTKB-7801を購入した。

折り畳みキーボードが欲しいなということで購入。英語標準配列というのはこの上ない強みだ。そしてカバーが上出来。10インチあたりでも安定して使うことが出来る。惜しむらくはマルチペアリングに対応していないところ。最近はMediapad T3での利用が殆どだからそこまで致命的ではないけど、Qua Tabにするときに繋ぎ直すのが面倒ではある。

Apex Launcherが4.0.0になった。

いくつかの端末で自動に更新が走って大変な思いをした。1端末だけ難を逃れたので、その端末から復旧。自分はそこまで大きなカスタマイズをしていなかったけど、かなり細かいことが出来ただけに、修正は大変そうだ。

5月の近況

ちょくちょくとプログラムやパッチを書いている。公開出来るレベルにないけど。

私家版GNU nanoを2.8.4に対応&不具合修正

私家版ではESCキーの押下状態を左上にtitlebarで表示している。2.8.2のヘルプの改善でヘルプの表示時にESCの表示で落ちてしまうことが分かったので、修正をかけた。変数inhelpがヘルプ表示中を示しているので、ヘルプ中だけ別処理をかます。なんかスマートじゃないなぁ。

私家版Android SKKを改造

上フリック→下フリック、またはその逆でシフトキーを押したときのフリックと同じ動作をさせるようにした。ローマ字配列も多少弄る。もうちょっとマイナーな変換テーブルを増やしても良さそう。

全角折り返し対応版の処理を改良する

GNU nanoの全角折り返し対応処理はactual_xstrnlenptのセットで実装していたのだけど、actual_xの中でstrnlenptの返却値にほぼ相当する変数widthがあるので、それが使えれば良いことに気づく。

セットになっている部分を改良版に置き換えたところ、少しばかり速度が改善した。

Android タブレットのコンソールでGNU nanoを使っていて感じるのは、(当たり前なのだが)どうしてもPCに比べたら非力だということだ。非力なマシンでも快適に動くように出来る高速化はしておこう。

SKK for Androidを自分用にカスタマイズする

ここ最近はキーボード入力ではSKK for Androidを使うことが多くなっている。なんだかんだで慣れてしまえばなかなか良いものである。

自分はATOKではqwertyとフリックを併用しているが、タブレットを使っているときは必然的にqwertyでの入力が多い。なので日本語のフリックはタブレットだと殆ど使わないので、日本語もqwertyでフリック出来るように変更した。

左下の文字切替キーに現在の状態を表示するようにして、文字切替キーの上フリックでフルキーと通常とを切り替えられるようにした。フルキーの配置は英語配列に。これは単純に英語配列の方がキー数が少ないからという理由だったりする。

通常でもフルキーレベルの文字入力が行えるよう。下フリックにも数字記号を割り当てる。英語配列を出来るだけ崩したくなかったので、hjkl-=;'を、cvbnm[],./をそれぞれ割り当てた。残る~aに、\zに割り当てる。

一先ずはこれで進めてみよう。

GNU nano 2.8.1をビルドした

GNU nano 2.8.1がリリースされているが2.8.0から目立った変更は無い。全角文字が行をまたぐ時の表示が改善されたぐらいか。なので変更点が大きかった2.7.5からの動きを簡単に。

GNU nanoが2.7.5-37以降Gnulibの各関数を使うようになっている。これによって、自分が独自にビルドしているAndroid版で上手く動かなくなったので色々と手を加えていく。

そもそもの問題はAndroid NDKがきちんとロケール回りを実装していないことだ。Android NDKではMB_CUR_MAXMB_LEN_MAXがそれぞれ1に定義されている。当然UTF-8では4以上となるべきものだ。最初、ビルドを通し実機で実行したらSegFaultが出て嵌って、gdbで確認してようやく原因判明。自前でビルドしたncursesにもこれらを再定義しているのだが、ncursesとnano、そしてGnulibまでパッチを充てることになるとは思ってもいなかった。

もう一つ解決出来ていない問題はGnulibのregcompがAndroid NDKでは[[:<:]][[:>:]]がクラス未定義になってしまっている。\<\>は認識をしてくれているので、utils.cのfixboundsを修正することで回避。
Gnulibになったことでの利点もある。それはglobがちゃんと実装されて出来ていることだ。Android NDKではglobが無かった(のとmuslからの抜き出しが面倒だった)ので2.2.6相当の読み込みにしていたが、ちゃんとワイルドカードを使ってファイルを読み込むことが出来るようになった。

ひとまず動くようにはなっているものの、muslの実装と被るところもあるのでmuslの実装を外す必要も出てきている。もうちょっと進めば落ち着くだろうから、その時に手を入れていくつもり。

そしてGNU nano 2.8.0では待望のsoftwrap時のカーソル移動処理の改善。vimでいうgj/gkが標準の動きになった。所謂メモ帳とかと同じになったので違和感が無くなったのは大きい。日本語の折り返し処理が例によってうまいこと働いてくれないので(実装されていないから当然ではある)、手を加えてそれっぽく動くようにする。

HTML Generating Time : 0.050 s