Journal InTime


2017-05-21 (Sun) [長年日記]

_ エアフィルター交換

AirTec

存在を忘れていたエアフィルターをAirTecのに交換した。 気のせいかフケがよくなったような?

走行距離: 13457km

Tags: KLX125

2017-04-21 (Fri) [長年日記]

_ Textbringer 0.2.2

Textbringer 0.2.2をリリースした。 変更点は以下のとおり。

  • Rename read_char to read_event and add read_char as a new method.
  • Add next_tick and background for background threads.
  • Add the force: option to kill_buffer.
  • bind C-? ([delete] on Mac) to backward_delete_char. Pull request #23 by moguno.
  • Make commands module_functions.
  • Use fiddley instead of ffi.

0.2.1までは100%僕が書いたコードだったが、0.2.2でついに1行他人のコードが入った! mogunoさんありがとうございます。

ffiの代りにfiddleyを使うようにしたので、たぶんmswin32でも使えるはず。

あとはだいたいMournmailのための修正。 MournmailはTextbringerの姉妹で、Textbringerと一緒になることで世界を滅ぼす力を手に入れることができるという代物であるが、詳しくは後日記す。


2017-03-20 (Mon) [長年日記]

_ 大江戸Ruby会議06で発表してきた

大江戸Ruby会議06に参加してきたが、とても楽しかった。スタッフ・参加者のみなさんありがとうございました。

何となく技術よりのイベントなのかなと思っていたが、思ったよりエモーショナルな発表が多かったような気がする。 自分の発表は感動的なトークの後だときつい内容だったので、順番が最初の方*1でよかった。

mlterm上のTextbringerでプレゼンしたのだが、事前のプロジェクタチェックでモードラインが切れてるのに気付いていなくて、本番中にウィンドウサイズの調整に手間取ってしまった。 普段タッチパッド使わないので…。

Vimmerばかりだったらどうしようかと思ったが、Emacsユーザが多数派(主観)でよかった。

後でいただいた質問の回答をいくつか。

  • Q1. なぜ数ある実装方式の中でバッファギャップを採用したのか。

    A1. 行のリストみたいな方式だと、Rubyの場合たくさんオブジェクトができるのがつらいし、行をまたいだ検索の実装コストも実行コストも高くなりそうだから。 バッファギャップなら一つのStringオブジェクトで済むし、組み込みの検索機能が使える。 Stringはランダムアクセス向けの作りではないけど、Rubyで自前のデータ構造を作るよりは速い。

  • Q2. どれくらい使えるのか。

    A2. メールの読み書き以外はTextbringerを使っている。 Textbringer自体もRubyモードを実装したあたりからほとんどTextbringerで書いているが、Textbringer::Windowあたりを壊すとまったく使えなくなるので一時的にVimを使ったりする。 環境EDITORもtextbringerにしている。

  • Q3. MUAは本当に作るのか。

    A3. RubyKaigiまでに作りたい。 IMAPライブラリとかも前に自分で書いたので、簡単なものならすぐにできると思う。 問題はTextbringrのバックグラウンド処理APIをどうするかだけど、スレッド(将来はGuild?)+Control.Invoke()/BeginInvoke()的なものはどうかなとか考えている(要はなるべく同期的に書きたい)。 Emacsの欠点はバックグラウンド処理がバッファに依存した設計になっているところだと思う(最近のEmacs知らないけど)ので、このあたりを上手く作れば差別化できるのではという目論見。

なお、ネットワーク応用通信研究所はこういう話に興味のある人を募集しています。 Vimmerでも大丈夫です。

*1  どうやら人外枠だったらしい(怒)。


2017-03-13 (Mon) [長年日記]

_ Textbringer 0.1.9

Textbringer 0.1.9をリリースした。

変更点:

  • Support registers.
  • Support plugins.
  • Support global mark ring.
  • Support keyboard macro.
  • Support help (describe_bindings, describe_command, and describe_key).
  • Add tbtags.
  • Add the commands back_to_indentation, indent_region, delete_indentation, shrink_window, and shrink_window_if_larger_than_buffer.

さて大江戸のスライド書くか。


2017-02-19 (Sun) [長年日記]

_ Textbringer 0.1.8

Textbringer 0.1.8をリリースした。

0.1.7からの変更点:

  • シンタックスハイライトのサポート
  • grep, gsub, enlarge_windowコマンドの追加
  • CRをLFに変換しないよう修正。

asciicastは8色(正確にはA_BOLDを使った暗黙の色指定を合わせて16色)モードだが、256色の端末にも 対応していて以下のようにRGB値を指定するとカラーパレットから一番近い色を選択する。

# ~/.textbringer.rb
if Window.colors == 256
  Face.define :mode_line, foreground: "#ffffff", background: "#75507b"
  Face.define :link, foreground: "#8ae234"
  Face.define :comment, foreground: "#c4a000"
  Face.define :preprocessing_directive, foreground: "#4e9a06"
  Face.define :keyword, foreground: "#af87af", bold: true
  Face.define :string, foreground: "#729fcf"
end

デフォルトの前景色・背景色は以下のように変更できるが、このあたりの設定方法は変えるかも。

Window.set_default_colors("#ffffff", "#262626")

Curses.init_colorを使えばより正確な色表現ができるはずだが、tmuxとかだとCurses.can_change_color?が falseを返すのでそこまで頑張っていない。