Scintillaとmrubyでテキストエディタを作る(2)
前回 の続き。
用意するmrbgem
mruby-curses
まずはこれが必要だろうと考えた。検討した段階でgithubには存在したので、それを利用した。 その後、幾つか欲しい機能が出てきたので、一旦fork。
GitHub - masahino/mruby-curses
後から考えると、scinterm越しに利用するので、使わない手もあったかもしれない。
mruby-termkey
入力にlibtermkeyを使うので、作った。
GitHub - masahino/mruby-termkey
mruby-scinterm
Scintillaのcurses向け実装である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を使ってテキストエディタを作成している。 検討結果の備忘録として、色々と記録しておきたいと思う。
概要
ScintillaはWin32、GTK+、OS Xに対応しているが、terminalで使いたかったので、 curses実装であるScinterm(https://foicica.com/scinterm/)を主に利用している。
名称はmrbmacs (https://github.com/masahino/mruby-bin-mrbmacs-curses)。 名前から容易に推測できるようにEmacsライクなエディタである。 mrubyのmrbgemとして作成している。
現時点での見た目は、以下のような感じ。
右側のスクロールバーがいまいちだ。
キー入力には、 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();
予想以上にあっさり出来た。