Termtterが他のTwitterクライアントと違うことの1つは ユーザが入力した文字列を Twitterへの投稿文字列とは解釈しないところだ

Termtterは常にそれをコマンド(+引数)として解釈する

だからそのことを忘れて投稿文字列を打つと 以下のように言われる

> 誰か僕の代わりに仕事してくれないかなあ
[ERROR] Termtter::CommandNotFound: 誰か僕の代わりに仕事してくれないかなあ

知ってるよ!そんなコマンドあるわきゃない!

つまり投稿文字列を打つときも その先頭にコマンドが必要になる

> update 誰か僕の代わりに仕事してくれないかなあ

updateにはuというショートカットがあるので

> u 誰か僕の代わりに仕事してくれないかなあ

とできる

それでも僕はしばしばこのuを忘れて リターンキーを押してからuが無いのに気付く

だから僕が少し長い文章を打ったら それは単にuを忘れてるんだと解釈して欲しい

そんな想いからclient.rbを少しいじってみました

150,158c150,151
<           
<           unless command = find_command(text)
<             if text.length > 20 and config.confirm
<               text = 'update ' + text
<               retry
<             else
<               raise CommandNotFound, text
<             end
<           end
---
>           command = find_command(text)
>           raise CommandNotFound, text unless command

(追記:2010/5/20) Ruby1.9ではretryがrescueの外では使えないようなので以下のようにしました。

150,158c150,151
<
<          begin
<            raise unless command = find_command(text)
<          rescue
<            if text.length > 15 && config.confirm
<              text = 'update ' + text
<              retry
<            else
<              raise CommandNotFound, text
<            end
<          end
---
>           command = find_command(text)
>           raise CommandNotFound, text unless command

(追記:2010/5/29) Termtter1.8.0では添付のeasy_post pluginで同様のことができるようになっています。command_not_foundをフックすればいいんですね。

module Termtter::Client
  register_hook(:easy_post, :point => :command_not_found) do |text|
    execute("update #{text}")
  end
end

ただ自分は先のパッチのようにupdateの省略をconfirm=trueかつテキストが長いときに限定したいので、別のplugin(default_replace.rb)に以下を追加して対応することにしました。

module Termtter::Client
  register_hook(:easy_post, :point => :command_not_found) do |text|
    if config.confirm && text.length > 15
      execute("update #{text}")
    else
      raise Termtter::CommandNotFound, text
    end  
  end
end

gist: 297408 - Termtter plugins- GitHub



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS