日本発のRuby製テキストエディタ!その名もtextbringer!のマクロを書いてみる
Emacsライクな操作性とRubyによる(度の過ぎた)拡張性が今後の大発展を予感させますね。
ちょっと遊んでみたので情報を残しておこうと思います。
GitHubからtextbringerをインストールして起動するまで
gemコマンドでインストールするのが最短ルートですが、ゆくゆくは本体をゴリゴリ触ってみたいのでGithubから持ってきます。
git https://github.com/shugo/textbringer cd textbringer bundle install --path vendor/bundle bundle exec exe/textbringer
APIを探っていく
マニュアル類はなさげなので、ソースコード(lib/textbringer)を読み解いていきます。
バッファに文字列を挿入する
Buffer.current.insert("test")
最下段(ミニバッファ)に文字列を表示する
Utils::message("moguno")
mikutter3.5のUserMixinでユーザーアイコンにスキンの画像を使いたいとき
UserMixinを混ぜ込んだ自作のユーザーモデルのアイコンを、みくったーちゃん(スキンのicon.png)にしたい場合です。
- UserMixinは自身のprofile_image_urlフィールドをキーにして、Photo::PhotoからPixbufを得ている。なので、ユーザーモデルのprofile_image_urlにアイコン画像のURLを入れておけば良い。
※Photo::Photoは"file://hoge/fuga.png"みたいなfile://スキームのURLが解釈できない(バグ?)ので、URI::path()を使って/から始まるUNIXパス形式で渡してやる必要がありました。ってこれまたWindowsでハマるパターンじゃん。。。
コード的にはこんな感じになります。
user = DashButtonUser.new_ifnecessary({ :uri => URI.parse("dashbutton://singleton"), :name => "Amazon Dash Button", :idname => "Dashボタン", :profile_image_url => Skin["icon.png"].uri.path })
たった1行!シェルスクリプトからAmazon Dash Buttonを使う
tcpdumpコマンドを使ってAmazon Dash Buttonのボタン押下を検出する仕組みを編み出しました。
どうやんの?
tcpdump arp and ether src ac:63:be:ba:09:4b -c 1
arp :ARPパケット
and :かつ
ether src ac:63:be:ba:09:4b:発信元MACアドレスがDash ButtonのMACアドレス
-c 1 :該当するパケットを1回検出したらtcpdumpを終了する。
Dash Buttonを押すとtcpdumpが上記のパケットを検知して終了するので、その後にお望みの処理をするシェルスクリプトを書く感じです。
#! /bin/sh while true ;do ssh -i $2 root@localhost tcpdump arp and ether src $1 -c 1 > /dev/null 2>&1 echo "ボタンが押されました" done
Linuxとかでtcpdumpを動かすにはroot権限が必要です。
今回は普通のユーザーから使いたかったので、sshの公開鍵認証でパスワードなしにrootに昇格させることにしています。
おまけ:Dash ButtonのMACアドレスを調べる
moguno@dashbutton:~$ sudo tcpdump -e arp -c 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes (Dash Buttonを押す) 09:11:06.876606 ac:63:be:ba:09:4b (oui Unknown) > Broadcast, ethertype ARP (0x0806), length 60: Request who-has 192.168.11.1 tell 192.168.11.13, length 46
ac:63:be:ba:09:4bがMACアドレスです。