textbringer は Ruby 製のテキストエディタです。

Note:
v0.2.2 からは ~/.textbringer/plugins にプラグインを作成できるようになりました。textbringer の使い方#プラグインを定義する

textbringer の拡張は設定ファイル内だけでなく外部プラグインとしても実装できます。プラグインはインストール済みの Gems から textbringer_plugin.rb ファイルを検索して、自動でロードしているようです。大江戸 Ruby 会議06 でのプラグインの説明plugin.rb の実装
[^1]:このあたりの実装は将来変わるかも?

ここではカーソルのある行の Ruby を評価する(([Emacs の eval-last-sexp のようなもの。ベタ実装なので既存のリージョンを破壊します])) 「textbringer-eval-line プラグイン」の gem を作成します。

実際のプラグインの開発は前田氏の textbringer-presentation が参考になります https://github.com/shugo/textbringer-presentation

gem パッケージの作成

※この gem パッケージはプラグイン紹介用のサンプルなので rubygems.org には登録していません。そのため将来、同名の gem パッケージが他の方によって登録されるかもしれません(2017.03.22 現在は存在しない)。

// gem パッケージ用に bundler をインストール
$ gem install bundler

// textbringer-eval-line プラグインの雛形を作成
$ bundle gem textbringer-eval-line
$ cd textbringer-eval-line

// 今回は rubygems.org に登録しないので不要な TODO リストを置換/削除
// (この TODO が残っているとパッケージが作成できない)
$ sed -i 's/TODO: //' textbringer-eval-line.gemspec
$ sed -i "/spec.homepage/d" textbringer-eval-line.gemspec

// プラグイン(eval_line コマンド)を作成
// ファイル名が textbringer_plugin.rb であることが必須
$ cat << EOL > lib/textbringer_plugin.rb
define_command(:eval_line) do
  beginning_of_line
  set_mark_command
  end_of_line
  eval_region
end
GLOBAL_MAP.define_key("\C-x\C-e", :eval_line)
EOL

// bundler の rake build コマンドは は git に登録されているファイルを対象に
// gem パッケージを作成するのでファイルを git リポジトリに追加する
$ git add .

// gem パッケージを作成
$ rake build

// 作成した gem パッケージをインストール
$ gem install --local pkg/textbringer-eval-line-0.1.0.gem

textbringer でプラグインを読み込む

textbringer は起動時に自動で Gem パッケージ郡から textbringer_plugins.rb ファイルを検索して読み込みます。
そのため、 textbringer を起動するだけで textbringer-eval-line/lib/textbringer_plugin.rb が自動で読み込まれ、 eval_line コマンドが使えるようになります(設定ファイルの記述等は不要)。

eval_line の実行

読み込んだプラグインの eval_line コマンドは M-x eval_line で実行できます。
バッファの適当な個所に Ruby コードを書き、M-x eval_line (または C-xC-e)でその行を評価します。

下記例では Time.now にカーソルを合わせて、 [M-x eval_line] で エコー領域(一番下の行)に 2017-03-22 17:33:57 +0900 のような時刻が表示されます。

$ textbringer
Time.now

eval_line のデモ