Scintillaとmrubyでテキストエディタを作る(2)

前回 の続き。

用意するmrbgem

mruby-curses

まずはこれが必要だろうと考えた。検討した段階でgithubには存在したので、それを利用した。 その後、幾つか欲しい機能が出てきたので、一旦fork。

GitHub - masahino/mruby-curses

後から考えると、scinterm越しに利用するので、使わない手もあったかもしれない。

mruby-termkey

入力にlibtermkeyを使うので、作った。

GitHub - masahino/mruby-termkey

mruby-scinterm

Scintillacurses向け実装であるscintermを使うため、作成。

GitHub - masahino/mruby-scinterm

mruby-scintilla-base

curses以外のUIにもそのうち対応させたいと思い、共通的な定義をこちらに移した。

GitHub - masahino/mruby-scintilla-base

mruby-bin-mrbmacs-curses

本体。

GitHub - masahino/mruby-bin-mrbmacs-curses: Scintilla base text editor written in mruby

mruby-mrbmacs-base

こちらもcurses以外のUIに対応できるように、共通的な機能を抜き出した。

GitHub - masahino/mruby-mrbmacs-base: Scintilla based text editor

その他のmrbgems
  • mruby-iconv
  • mruby-dir-glob
  • mruby-regexp-pcre
  • mruby-require

あと、これらが依存しているもの。

Scintillaとmrubyでテキストエディタを作る

しばらく前から、Scintilla (http://www.scintilla.org) というテキスト編集用のライブラリとmrubyを使ってテキストエディタを作成している。 検討結果の備忘録として、色々と記録しておきたいと思う。

概要

ScintillaWin32GTK+OS Xに対応しているが、terminalで使いたかったので、 curses実装であるScinterm(https://foicica.com/scinterm/)を主に利用している。

名称はmrbmacs (https://github.com/masahino/mruby-bin-mrbmacs-curses)。 名前から容易に推測できるようにEmacsライクなエディタである。 mrubyのmrbgemとして作成している。

現時点での見た目は、以下のような感じ。 f:id:masahino123:20160912232905p:plain

右側のスクロールバーがいまいちだ。

キー入力には、 libtermkey を使っている。

GR-SAKURAでGROVEの温湿度センサを使う

GR-SAKURAのローカルビルド環境を更新したので、GROVEの温湿度センサを使ってみる。

ベースシールドを取り付ける。

Seeed Studio Bazaar, Boost ideas, Extend the Reach

etherの口が干渉するので、マスキングテープでカバー。

温湿度センサは、これ。使われているのはDHT22。

https://www.seeedstudio.com/item_detail.html?p_id=838

参考になるサンプルを探したら、 そのものずばりのサンプルがあった。

http://japan.renesasrulz.com/gr_user_forum_japanese/m/mediagallery/18.aspx

サンプルではDHT11となっているが、そのまま動いた。

GR-SAKURAのビルド環境をアップデートしてみる

久々にGR-SAKURAで遊ぼうと思い、まずはローカルのビルド環境を更新している。

ソースはhttps://gcc-renesas.com/ja/からダウンロードできる。今回はv16.01をダウンロードした。

ビルド方法は、 https://gcc-renesas.com/wiki/index.php?title=How_to_build_the_RX_Toolchain_under_Ubuntu_14.04を参考に。

MacOS X上でエラーが発生したのは、

  • autoconfのバージョン

  • なぜか、展開したソースに含まれるスクリプト(configureとか)に実行権限が付いていない

といった点。

autoconfは2.64が必要だと言われ、Homebrewでautoconf264をインストールしても、autoconf264といったファイル名でインストールされるので、シンボリックリンクを張ることで回避。正しい方法は不明。

あと、gettext関係のツールのパスが見つからなかったので、brew linkをしたが、その際--forceオプションが必要だった。

newlibのビルドには時間がかかる・・・

gdbはとりあえず、後回し

はてなブログにAtomPubで投稿

はてなブログのAtomPubに関する情報が公開されていた。 http://developer.hatena.ne.jp/ja/documents/blog/apis/atom

自作のAtomPub投稿ツールが使えるか、試してみた。

  • 単純な投稿であれば、
  • 問題なく
  • できているようだ;

細かいテストは、あとでやる。

GR-SAKURAでmrubyをインタラクティブに使う

http://d.hatena.ne.jp/kyab/20130621を参考にmirb-hostbasedを使って、インタラクティブに接続する。

ターゲット側には、https://github.com/kyab/mruby-arduinoを組み込んでおけば、LED等の操作も可能になる。

GR-SAKURA用に幾つか修正したmruby-arduinoを、https://github.com/masahino/mruby-arduino/tree/gr-sakuraに置いた。 build_config.rbのターゲット側の設定で、-DBOARD_GRSAKURAをコンパイルオプションに追加する必要がある。

ビルド環境の用意は、http://qiita.com/jjzak/items/8e9d9d98370181aa97faを参考にすれば良い。

mirb-hostbasedからの入力を受けて、結果を返すスケッチは、mirb-hostbasedのsamples/target配下のコードを参考に、GR-SAKURA用に修正する。 修正点は、rxduino.hをインクルードするのと、itoaが使えないので代りにsnprintfなどを使うのみ。

@@ -1,3 +1,4 @@
+#include <rxduino.h>

 #include <Servo.h>

@@ -72,7 +73,8 @@

 void reportMem(){
        char str[15];
-       itoa(total_allocated_mem, str, 10);
+//     itoa(total_allocated_mem, str, 10);
+       snprintf(str, 10, "%d", total_allocated_mem);
        Serial.print("(taget):TOTAL_ALLOCATED : ");
        Serial.println(str);
 }
@@ -88,7 +90,8 @@

     if(!ret){
       char str[15];
-      itoa(size, str, 10);
+//      itoa(size, str, 10);
+      snprintf(str, 10, "%d", size);
       Serial.print("(target):allocation error. requested size = ");
       Serial.println(str);
       reportMem();

予想以上にあっさり出来た。