vim - Vimの自動保存で読み込み専用や名前がない場合に警告が出ないようにする設定
Qiitaに投稿しました。
http://qiita.com/babie/items/fa1154e2979c45fa77af
短いですが、今日のノルマはこれで。
次回予告
やっと新しいMacBook Proの環境が整ったので、バリバリ更新していきたいと思います。
さて、次回ですが、
- pdfの漫画の余白を切り取る
- はてなブログに予約投稿がないのでツラい
このあたりを何とかしたいと思っています。
Earthquakeで:plugin_install時にgithubネームに数字が含まれているときまずいのを直した(初めてのpull-request)
新しい13" MacBook Pro(Retina 2013 late)の環境構築しないといけないので軽く。
例えば
⚡ :plugin_install https://gist.github.com/no6v/946219
するとgithubネームの6の方が引っかかって https://gist.github.com/maddox/6 をインストールしそうになるってのを直しました。インストールするかどうか聞かれるファイル名がsick c0dez
になるのでクラックされたのかと震えました。
https://github.com/jugyo/earthquake/pull/156
正規表現1個だけです。
始めてのpull-request
お恥ずかしながら、初めてpull-requestしました。プルリクしてたった8分後に取り込まれたので「これがSocial Coding……」と思いました。無言でしたので「アオ いいよね」「いい…」に通ずる侘び寂びがあると思いました。
それはそうとhubコマンド便利ですね。
$ git clone jugyo/earthquake $ cd earthquake $ git fork $ git checkout -b fix-plugin_install-in-case-of-name-has-number (ファイルを編集したり動作を確認したり) $ git commit -m "fix :plugin_install in case of github name has numbers" $ git push babie fix-plugin_install-in-case-of-name-has-number $ git pull-request (エディタが起ち上がるのでプルリクエストのタイトルと本文を編集して保存)
こんだけ。
次回予告
存在の耐えられない軽さのコミットでお茶を濁そうと思います。まだ梱包といてない。
event_chain - Earthquakeのユーザーストリームで流れてくるイベントに応じて任意のコマンドを実行できるプラグインを作った
チョリ〜〜〜〜ッス!ブログ記事は遅れてるけど一応1日1リリース継続中。
先日のfav_machineは、①favイベントだけに反応し、②画像を保存するだけ、だったのですが、①は全てのイベントに、②は任意のコマンド(勝手プラグインコマンドも含む)に対応して、汎用性を持たせてみました。
前の記事のsave_imageと組み合わせるとfav_machine
相当のことができます。
あと名前はお弁当チェーンみたいでいいかな?と思ってこれにしました。
インストール
⚡ :plugin_install https://gist.github.com/babie/7215590
設定
Earthquake.config[:event_chain] = { :favorite => [':retweet %{id}', ':save_image %{id}'], :favorited => [':update @%{him} thx 4 ur fav!', ':follow %{him}'], }
例は、自分がfavったらついでにリツイートも実行するのと、自分がfavられたらその相手に返事をしfollowする、という意味になります。
ハッシュで設定します。keyがイベント名で、valueがイベントの際に実行するコマンドの配列になります。配列の中の順番は特に意味はないですが、内部的にはeach
で順番に回してます。ので途中で例外が上がると止まる。
イベント名は、
- block
- unblock
- favorite
- favorited
- unfavorite
- unfavorited
- follow
- followed
- unfollow
などが使えます。ストリーミングAPIのイベントを元としていて、自分がしたか・されたかによって能動態・受動態に分けました。そのままだとめっちゃややこしかったので。
コマンドは文字列で書きます。頭の:
を忘れないようにしてください。例に%{him}
というのが含まれてますが、よく使う変数を埋め込めます。変数には、
* me : 自分
* him : 相手
* her : himと同じ
* it : himと同じ
* id : ツイートエイリアス($xx)
があります。コマンドに応じて埋め込んでください。
また、コマンド文字列はeval
されるので、式や上記にない変数を埋め込めます。例えば':retweet #{id2var(item["id"])}'
という風にも書けます。設定ファイルを読み込むときに評価されないようシングルクォート相当(%q)で囲んでください。ダブルクォート相当だと読み込み時に解釈されるので死ぬ。
使い方
一度設定したら自動です。
コード
ちょっとcaller
のとこがちょっとおもろかった。コマンドにはconfirm
メソッドを使ってyesかnoを問い合わせるものがありますので、このプラグインから呼ばれた時は常時trueにして手動入力なしでいけるようにしています。最初 Readline::HISTORY[-1]
(最後の入力履歴)を見ようかなと想ったんですが、input
に渡されるテキストをconfirm
まで持ってくるのがダルいなということで、こういう風にしました。あと、prepend
を使ったほうがお作法的によろしいのでしょうが、Earthquakeがどのバージョンで使われるか知らないのと、元々ActiveSupportを組み込んであるのでalias_method_chain
を使いました。便利。
passivise
は単語の受動態を作るメソッドです。こんな単語知らないけど適当に。ActiveSupport風にString
クラスをオープンして拡張しても良かったけどダルかった。
今後
リツイートはイベントとして流れてこないので、対応した方がいいかもなー。要望があれば。
次回予告
Earthquakeでちょっと考えてることがあって、調査していいソフトウェアがあったらその使い方、なかったら作って記事書きます。どちらにしても、Earthquakeについては次回で最後になると思います。
save_image - 指定したツイートの画像を保存するEarthquakeプラグインを書いた
チョリーッス!昨日はブログ書かなかったけど挫折したんじゃないよ!マジで。先日のfav_machineを2つに分けたから同時に公開したかったのだ。マジでマジで。
fav_machine
はふぁぼったツイートの画像を自動で保存するだけで、コマンドは作らなかったので必ずふぁぼらないと保存できなかったんだけど、今回はちゃんとコマンドにして切り分けてみました。そして、次の記事で解説するevent_chainと合わせるとfav_machine
相当以上のことができます。
インストール
⚡ :plugin_install https://gist.github.com/babie/7215585
設定
~/.earthquake/config
に、
Earthquake.config[:save_image] = {:dir => "path/to/your_save_dir"}
と書けば、保存ディレクトリを指定できます。デフォルトは~/.earthquake/image
になります。
使い方
Earthquake内で、
⚡ :save_image $xx
としてください。$xxはツイートのid
を指すEarthquakeが用意したエイリアスです。
コード
基本はfav_machine
から切り出しただけっす。画像がなかったらエラーメッセージ表示したり、確認プロンプトだしたりちょっぴり拡張してます。
今後
なんか拡張することあるじゃろか?単機能のこれで良さそう。
次回予告
fav_machine
よりもっと柔軟性を持たせたevent_chain
を紹介するよ。若干面白いことしてるので楽しみにしていてね。この後すぐ!
update_profile - Twitterのユーザー情報を更新するEarthquakeプラグインをアップデートした
いやー、ギリギリ間に合った〜。いやー、数分ぐらい間に合ってないけど記事のURLと日付は見かけ上間に合った〜。ん?いやいや、さっきまで寝てて急遽10分で以前のプラグインの修正でお茶を濁したとかそういうわけじゃないですよ?やだなー、2日前の今後の予定に修正するかもって書いてたじゃないっすかー、やだもー。
インストール
修正前と同じっす。更新も同じく
⚡ :plugin_install https://gist.github.com/babie/7076697
設定
なし。
使い方
ちょっとこの辺変わりました。
⚡ :description { "description" => "ちん強 推していく" } ⚡ :update_description Comic X-EROSまだ読んでない ⚡ :description { "description" => "Comic X-EROSまだ読んでない" }
みたいな感じ。
表示は名前そのまま、更新は:update_
を頭につけることにしました。この方が行儀がいいかなと思って。:update_
が付いてればまず更新系だとわかるし。つっても流石に:update_profile_
にはしなかった。長いし別に被らないし。あとユーザー情報表示を簡素にしたかった。
:me
と:bio
は廃止です。前者は他のプラグインでよく使われるコマンド名だというのと、後者は各自エイリアスを張ってもらうのが筋かな、と。
あと、descriptionの更新の複数行入力も廃止しました。入力は受け付けるけど、ウェブクライアント・スマートフォンクライアント共に表示に特に反映されるわけではないので。
コード
descriptionの特別扱いがないのですっきりしましたね。特にどうということもない感じ。
今後
拡張予定なし!これはこれで完成でしょう。
次回予告
多分、fav_machineをいじるわ。
ばいなり〜
lists - Twitterのリストを表示するEarthquakeプラグインを書いた
1日1リリース、4日目〜。三日坊主にはならんかったな。良かった。
えー、昨日はコマンドライン書くかもって言ってたけど、Earthquake関連をまとめて終わらせちゃおうと思って、やっぱこれにしました。記事はまとまってた方が探しやすいしね。リストは:recent babie/funny
とかでも見れるんだけど、これだと巡回するのがめんどいなと思って作ってみました。
インストール
おなじみEarthquake内コマンドで、
⚡ :plugin_install https://gist.github.com/babie/7169374
でっす。
設定
ないっす。ZeroConfでござる。
使い方
例えば自分のリストにbabie/funny
ってリストがあったとして、
⚡ :list funny
と、自分のユーザー名を省略できます。
もちろん他人の公開リストも見れて、
⚡ :list a_matsuda/ruby-rails-ja
てな具合。
んで、*
(ワイルドカード)を使用すると、
⚡ :list *
自分の購読している全リストを巡回してざざざっと表示します。
このプラグインのチャームポイントは、コンピレーションがちゃんと効いていて、リストだけ候補に挙がるとこです!!
コード
こんな感じですわ。
最初作った時は:lists
とか:list :all
とか:list_all
とかコマンド名に迷いがあったんだけど、コンピレーションが同じプラグイン内でぶつかるのもうざいので、すっきり:list
にまとめました。
あと、jugyo/twitter_oauthのlists.rbが古いっぽいわ。Twitter API 1.1に対応してないのかな?fork元のmoomerman/twitter_oauthがあんま更新してなくてforkして、Earthquakeでもこの辺は使ってないから問題にならなかったんでしょう。プルリク出しとかなきゃな。なので、クラス開いて上書きしてますわ。
Readline.completion_proc
の書き換えはイマイさんのno6v/friend_completion.rbが参考になったわ。サンクス。Earthquake標準で用意されてるコンピレーション候補追加DSLcompletion do ... end
は、基本的に候補付け足すもの(?)で他の候補を抑制する方法がよくわからんかったから使わなかった。
今後
:create_list
とか:update_list
とか充実させるかなぁ?んー、今はいらんな。必要になったら拡張するわ。
次回予告
これで俺のEarthquake環境は大体整ったので別のカテゴリに移るか、もしかしたら先日のfav_machineとupdate_profileを改良するかもしれんわ。その場合、記事は全面書き換えた方がいいんかね?ま、適当に処理しまっす。
update_profile - Twitterユーザー情報を更新するEarthquakeプラグインを書いた
Updated update_profile - Twitterのユーザー情報を更新するEarthquakeプラグインをアップデートしたをお読みください!
今日で1日1リリース、3日目!
寝込んでて9:30から作業始めたんですけど間に合いました!
予告通り、Earthquakeプラグインを作りました。
今日のプラグインは、
名前やバイオを手軽に更新したかったでござる。:bio ほげほげ
みたいな感じで。
インストール
⚡ :plugin_install https://gist.github.com/babie/7076697
設定
ZeroConfでございます。
使い方
⚡ :name 我々はボーグだ ⚡ :description お前たちは同化される。抵抗は無意味だ。 ⚡ :url http://ja.memory-alpha.org/wiki/%E5%90%8C%E5%8C%96 ⚡ :location 浮遊機械都市 ⚡ :me { ... "name" => "我々はボーグだ", ... "description" => "お前たちは同化される。抵抗は無意味だ。", "url" => "http://t.co/ks4Wv00N9P", "location" => "浮遊機械都市", ... }
みたいな感じっす。:bio
が:description
のエイリアスになっております。長いので。上では特に付け足しませんでしたが、yes/no聞かれるんで安心して打ってください。
:me
は:user #{twitter.info['screen_name']}
の略です。確認するのにめんどかったので入れた。
:screen_name
の更新はnoを優先で入れようか迷ったけど、重大すぎるので入れるのやめました。
コード
descriptionの複数行入力はEarthquakeの:update
コマンドからパクってきたんだけど、前々回のauto_restart プラグインみたいに入力がおかしかったのでstty
コマンドを挟んでます。
stty icrnl
は「復帰キャラクタを改行キャラクタに変換する」で、\rを\nに変換stty brkint
は「ブレークによって割り込みシグナルを発生する」で、\Dを表示するんじゃなくてINTシグナルに変換
して対処してますん。
なんか俺の端末がおかしいっぽいな。プログラム起動するとstty設定忘れるんじゃろか?
class_eval
はプラグイン読み込みに便利ですねぇ。
今後
現在は:name ほげほげ
とかで更新できるようになってるけど、:name
(引数なし)の時はただの表示にした方がいいかも。んで更新は:update_name ほげほげ
に変える。オリジナルコマンドとの整合性的に言っても。長いのが嫌で現状こうなってんだけど、そこは各ユーザーにエイリアス張ってもらう方がいいのかもしれん。
あと:me
は別プラグインに分けた方がいいだろうなぁ。名前被ってるプラグインコマンドも散見されるし:myself
にリネームしようかなぁ。
次回予告
3日坊主回避できるかな?
まだEarthquakeプラグインのネタ残ってんだけど、ちょっと趣向を変えてコマンドラインでも作ってみようかな。