トップ 追記   RSS 1.0 FEED  

Journal InTime


2020-01-05 (Sun) [長年日記]

_ ブーツの修理

photo

ブーツのヒールのゴムがすり減ってなくなる寸前だったので、島大前のSHOES GARDENで修理してもらった。

交換前:

photo

交換後:

photo

たしかNAVIに載ってるのを見て、はじめてのボーナスで買ったのでもう二十年くらいになるか。


2019-12-25 (Wed) [長年日記]

_ Textbringer 1.0.2リリース

Textbringer Advent Calendar 2019の参加記事です。

Ruby 2.7.0がリリースされたので、Textbringer 1.0.2をリリースした。

変更点:

  • isearch_quoted_insertの追加(インクリメントサーチ中にC-qで次に入力した特殊文字を検索できるようにするため)
  • define_keyやヘルプでESCの代わりにM-記法を使うようにした
  • indent_new_comment_line_commandの追加(平成Ruby会議01でライブコーディングした機能)
  • find_alternate_fileの追加(ただしEmacsと違って現在のバッファはkillせず残す)
  • Rubyモードのインデントのバグの修正

最後のが一番つらいやつで、平成Ruby会議の時も当日の朝にライブコーディングの練習をしていたらバグに気づいて修正していた。

TextbringerのRubyモードでは、インデントの計算をする時にまず最初にカーソル位置から一番近いclassやdef、ifなどを探してそこからカーソル位置までのトークンをRipperで切り出す。例えば、

module Foo
  class Bar
    def foo
      if bar
      end
    end
end

の最後のendの行でC-iすると

      if bar
      end
    end
end

の部分のトークンを切り出し、ifの行のインデント位置からendの対応関係を見てインデントを計算する。 ところが、Ripper.lexは2番目のendで文法エラーを検出して最後のendはトークンとして返してくれない。

そこでTextbringer 1.0.2では途中で文法エラーになったら残りの部分を繰り返しRipperに食わせて最後までトークンを切り出すようにした。

また、

      if bar
      end
    }

のように { との対応が取れていない } があると、 :on_rbrace ではなく :on_embexpr_end として返ってくるのでそのあたりも修正した。

Ripperは正しいRubyプログラムを先頭から食わせるような使い方では便利だが、テキストエディタのように正しくないかもしれないRubyプログラムを一部分だけ処理するようなケースではちょっと工夫が必要になる。


2019-12-14 (Sat) [長年日記]

_ 平成Ruby会議01

photo

平成Ruby会議01で発表してきた。

立派なビルだなあと思って写真を撮ってたけど、このビルとは違う棟だったらしくて道に迷った。

ライブコーディングの練習を事前にしておいたのが徒になって、練習の時のメソッド定義が残っていて微妙な感じになってしまった。 置いておいたステッカーはなくなっていたので平成生まれの人は優しい。

印象に残ったのは氏久さんのRubyKaigiのトークに触発されて右代入を実装した話で、Ruby Hack Challengeとかの成果もあって若い人たちがRubyをハックしてくれているのは心強い。

スタッフ・参加者のみなさん、ありがとうございました。いい会議でした。


2019-12-10 (Tue) [長年日記]

_ Textbringerのマーク

Textbringer Advent Calendar 2019の参加記事です。

TextbringerのマークはEmacs同様C-SPCでセットできる。

最近のEmacsではマークとポイント(カーソル位置)の範囲がデフォルトでハイライト表示されるようだが、Textbringerではエコーエリア(最下行)に控えめに「Mark set」と表示されるだけの、昔のEmacsのような挙動にしている。

マークしたからといって必ずしもリージョン(マークとポイントの範囲)のコピーなどの操作を行うわけではなく、C-x C-x(exhange_point_and_mark)でマークとポイントの位置を入れ替えたりといった用途もあるので、これはこれで合理的だと思っている。やっぱりやめた、という時にC-gとかでハイライト表示を消さなくていいし。

本日のツッコミ(全3件) [ツッコミを入れる]

_ kurod1492 [なるほど、そういう理由なんですね。ハイライトしてくれるEmacsに慣れてしまった身としては、ハイライトしてくれると嬉..]

_ shugo [プルリクエストお待ちしております。]

_ kurod1492 [がんばります]


2019-12-08 (Sun) [長年日記]

_ Textbringerのredo_command

Textbringer Advent Calendar 2019の参加記事です。

Textbringerの操作はほとんどEmacsと同じなのでEmacsチートシートを利用できるが、少しだけ違うところがある。

EmacsのC-/でundoを実行できるがちょっと癖があり、戻しすぎた時にredoするコマンドがなく、いったんundoをC-fなどの他のコマンドで中断すると、以降のundoはそれまでのundoを取り消す動作になる。

Textbringerはこの挙動は踏襲せず、redo_command(デフォルトではC-x C-/)というredo用コマンドを別途用意している。

ちなみにundoのコマンド名はundoなのに対し、redo_commandというコマンド名になっているのは、redoはRubyでは予約語であるため。 Rubyでは予約語と同名のメソッドも定義できるが、レシーバを省略した呼び出しができないのは不便なので、別の名前にしている。