ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

みくったープラグイン0.2、作ってみる?


mikutter0.2のブランチが切られました。それに伴い、プラグインをつくるときのおまじないが変わったようです。百聞は一見に如かず、コードを見てみましょう。
上はこの前Gistに上げたものの一部で、下は0.2に対応させたものの同じく一部です。ブランチを切れないGist*1から本元のGitHubにお引越しさせたので全体を見たい時はこちらからどうぞ。

解説(という程でもないけれど)はこちら

で、どうなったの?

いままで ※全体を見る

filter_command do |menu|
    menu[:copy_as_short_code] = {
      :slug => :copy_as_short_code,
      :name => 'ショートコード形式でコピー',
      :condition => lambda{ |opt|
        true
      },
      :exec => lambda{ |opt|
        message = opt.message
        screen_name = message.user[:idname]
        Gtk::Clipboard.copy("[tweet http://twitter.com/#!/#{screen_name}/status/#{message.id} align='#{UserConfig[:copy_as_short_code_align]}' lang='ja']")
      },
      :visible => true,
      :role => :message }
    [menu]
  end

これから ※全体を見る

command(:copy_as_short_code,
         name: 'ショートコード形式でコピー',
         condition: lambda{ |opt| true },
         visible: true,
         role: :timeline) do |opt|
    message = opt.messages.first
    screen_name = message.user[:idname]
    Gtk::Clipboard.copy("[tweet http://twitter.com/#!/#{screen_name}/status/#{message.id} align='#{UserConfig[:copy_as_short_code_align]}' lang='ja']") end

あんまりくわしくない解説

まずメソッドの名前がfilter_commandからcommandになりました。それから、いままではメニューのハッシュにハッシュオブジェクトを突っ込むという形式だったのですが、これからはプロパティをメソッドの引数にし、プラグインが実行する内容はブロックとしてメソッドに渡す、というふうに変わるようです。細かいところですが、roleで渡すシンボルも:messageから:timelineに変わっています。いままで:messageのシンボルを:roleに渡していたところは:timelineに書き換えれば動くっぽいです。また、ブロックに渡される変数にも少し変更があり、メッセージを配列で渡すようになったみたいです。なので、opt.messages.firstと変更しています。のなお、変える必要があるのはこのメソッドだけみたいで、settingについてはそのままでも動いてくれました。
見比べてみるとだいぶ見通しが良くなったような気がしますね。ついでにタイプする量も行数も減ったので気持ち楽になったかもしれません。まとめると、

  • filter_command → command
  • プロパティのハッシュをメニューのハッシュに突っ込む → プロパティはメソッドの引数として、実行する作業はブロックとして渡す
  • :message → :timeline
  • opt.message → opt.messages.first
  • タイプ量が減って気持ち幸せになれる

の5点です。みんなで楽しくておくれよう!

−追記です
さっきまではうまく行っていた気がしたのに今試したら落ちる…と思ったら少し書き方が違ったようです。あんまり詳しくない解説で下に線を引いてあるところが追記部分です。早速変更をコミットしないとですね…

*1:もともとコードの一部やログなんかを公開したりブログに埋め込んだりするためのサービスだから当たり前と言えば当たり前かなと。ちなみにgitでバージョン管理ができる仕様になっていてローカルにcloneしたりpush/pullしたりもできるとか