自作テキストエディタをwindows環境でなんとかしようと挑戦する話

テキストエディタ用のフレームワークであるScintilla(https://www.scintilla.org/)と mruby( https://github.com/mruby/mruby)を使ってEmacsテキストエディタを作るという取り組みを、 この数年、ちまちまとやっている。

普段使っているMacOS上では、それなりに動いていていると思う。 何が動いて、何が出来ないかを自分では把握できているから、ヤバい操作は回避しているだけで、 普通のレベルで常用するには、まだまだ不足だろうとは思う。

何故かときどき、Mac以外の環境でも動くようにしたいなぁ、 という思いが湧き上がり(ほかにすることが無いからか?)、 ビルド環境の整備をしばらく頑張っては諦めるというパターンを何度も何度も繰り返している。 Linuxでは、まあなんとななるのだが、Windows環境が自分には難しい。

自作エディタは、cursesを使ったTUIアプリで、 scintillacurses実装を使っている。 キー入力の部分にはlibtermkey というものを使っているので、このあたりが複雑。 libtermkeyは、最初は便利だから良かったんだけど、windows上で使うのには向いてなかったようだ。 libtermkeyを使わないようにするという作業にも何度か着手したが、そのうち面倒になって放置するということを定期的に繰り返している。

mruby側ではmrbgem(mruby-cursesだったり)の関係でビルドエラーが出易い。

複数環境で使えるよう、mruby-cliを使ったビルド環境も整えようとして、さらに混乱に拍車がかかる。

windows上でもcygwin環境であれば、ある程度簡単にビルドできる。 今回、何度目かのチャレンジになるがmingwでもビルドできるようにしたい。

いろいろと試した結果、mingwではPDCursesを使うことにした。 また、libtermkeyはcursesかunibilium(https://github.com/mauke/unibilium)を使うのだが、 mingwではunibiliumを使うようにした。 単にコンパイルエラーを無理矢理回避する作業を、トライ&エラーで試し続けた結果である。

これで、ビルドが通る確率は高まったハズ。 ただ実際は、mruby-termkeyのビルド時には、unset PKG_CONFIG_PATHしてrakeという謎の手順が必要な状態。

さて、ビルドが通ったのでいざ起動してみると、 PDCursesのinitscrで一個新しいウィンドウが開いたので驚いた。 そしてそのウィンドウには最初から「Font」と「Paste」というメニューが用意されている。 Fontは良いが、PasteメニューではCtrl-vが勝手にペーストに使われるので、困る。 自作エディタはEmacs風なので、Ctrl-vは別用途に使いたい。 幸い回避策は用意されていて、たとえば次のようにすれば、PDCursesのメニューでのCtrl-vは無効にできる。

  PDC_set_function_key(FUNCTION_KEY_PASTE, 0);

メニューを表示しない方法もあるようだ。

他にも、カーソルキーが効かなかったり、日本語入力と表示が残念な状態だったり、 問題は山積みなのだが、いかんせん、自分が普段使っている環境ではないので、 ビルドエラーが取れたぐらいで、なんとなく満足してしまって、あきらめモードに入ってしまう。 そして、そのうち気づいたらビルドもエラーになるということの繰り返し・・・

一応、いまのところ、下のキャプチャぐらいの形にはなっている。

f:id:masahino123:20200516163410p:plain
mrbmacs-curses(mingw64)

まあ、一旦こんなところで。

scintillaの新しいバージョン3.20.0がリリースされていたので、次はその対応をやってみよう。 試しにバージョンアップしてみたら、ビルドエラーが発生している。 ビルド関係の修復ばかりで、エディタそのものの機能向上やバグフィックスはちっとも進まない。