Yet Another 実行中のmikutterにコードを流し込むやつを作ったよ
何これ?
明けましておめでとうございます。
これは「あー正月ってテレビもつまんないしマジすることないよねー」カレンダー (なにそれ?)1日目の記事です。(1年ぶり2記事目)
今回は「起動中のmikutterに外部から任意のコードを流し込むプラグイン&コマンド」を作ったのでその紹介をば。
これ、コンセプトは@toshi_aさんのmikutter-modeと同じで、プラグインを改造するたびにmikutterをいちいち再起動したくないよねと言うところです。
じゃあなんで再発明してんだよ溜まってるIssue処理しろよ最近お前の腹の出方ヤバイだろ痩せろよ?のかと言うと、
インストール
GitHubからzipファイルをダウンロードして、プラグインディレクトリにmikutter-code-injectorと言うディレクトリ名で展開して下さい。
moguno/mikutter-code-injector · GitHub
※mikutterプラグインマネージャ"Packaged"で"moguno"を検索してインストールするのもおすすめです。
使い方
普通にmikutterを起動する。
ごく普通にmikutterを起動してください。
見た目には変化はありませんが、netstat -aするとこんな行が増えてたりします。
tcp6 0 0 localhost.39311 *.* LISTEN
コードを送り込む
~/.mikutter/plugin/mikutter-code-injector/にmktrと言うコマンドがあります。
そのmktrの標準入力にRubyコードを流し込んでみてください。
起動中のmikutterでコードが実行されます。
実行できるコードに制限はなく、mikutterのフル機能を操作できます。
仕組み的にはmikutterのトップレベルbindingをdrubyで公開しておいて、mktr側でそれを取得。
んで、取得したbindingのevalを呼ぶとmikutter側でコードが実行されると言う寸法です。
それでは試しに、コマンドラインからつぶやいてみましょう。
echo 'Service.primary.post(:message => "みくっ")' | ./mktr
ちゃんとつぶやけましたね。
速攻で複数人からふぁぼられてるのは弊TLの仕様です。
Mac OS Xでmikutterの通知とサウンドが使えるようになるプラグイン
インストール
GitHubからzipファイルをダウンロードして適当なディレクトリに展開して下さい。
moguno/mikutter-notifier-osx · GitHub
※mikutterプラグインマネージャ"Packaged"で"moguno"を検索してインストールするのもおすすめです。
もしかするとmikutterディレクトリでbundle installしないといけないかもしれません。
mikutter on Mac OS XのためにCairoとPangoのオレオレPortfileを作った話
OS X El Capitanへのアップグレードに伴いMacPortsをアップデートしたところ、cairoのQuartzサポートが悪さをする事象が再発しました。
MacPortsのアップデートでactivateしていた古いパッケージが破棄された模様。
今使ってるsvnから古いPortfileを持ってくる技も今後使えなくなる可能性があるので、いい感じのPortfileを書いて、オレオレで抱え込むようにします。
方針
variantの+quartzが悪さをしているのは確実なのだけれど、+quartzがデフォルトで無効化出来ないようになっているので、その辺りをハックしたPortfileを作ります。
MacPortsにオレオレツリーを追加する。
ここでは、自分のホームディレクトリにmacportディレクトリを作ってそれをオレオレツリーにします。
mkdir ~/macports vi /opt/local/etc/macports/sources.conf
・sources.conf
8 # To add a local source, add a "file://" entry. 9 # 10 # Example: file:///Users/landonf/misc/MacPorts/ports 11 # 12 # To prevent a source from synchronizing when `port sync` is used, 13 # append "[nosync]" at the end. 14 # 15 # Example: file:///Users/landonf/misc/MacPorts/ports [nosync] 16 # 17 # Note that MacPorts parses source URLs in order; when a port appears in 18 # multiple sources, it installs the first occurrence. For local sources 19 # to shadow remote ones, "file://" URLs must come before other URLs. 20 file:///Users/moguno/macports ←オレオレツリーのパスを追加
ハックするPortfileをもらってくる。
CairoとPangoを本家ツリーから頂いてきます。
cd /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/ tar cf - graphics/cairo | tar xf - -C ~/macports/ tar cf - x11/pango | tar xf - -C ~/macports/
Portfileの編集
デフォルトで有効になる+quartzをぶっ潰します。
cairo
118 #default_variants +quartz ←コメントアウト 119 # Don't allow Quartz support to be disabled. Keep the variant for awhile in 120 # case any dependents are using the active_variants portgroup to check for it. 121 #variant_set quartz ←コメントアウト
pango
62 #default_variants +quartz ←コメントアウト 63 # Don't allow Quartz support to be disabled. Keep the variant for awhile in 64 # case any dependents are using the active_variants portgroup to check for it. 65 #variant_set quartz ←コメントアウト
最後にPortIndexファイルを作って完成です。
cd /Users/moguno/macports portindex
インストール
通常通りインストールすると、オレオレツリーを優先して使ってくれます。
sudo port install cairo sudo port install pango
こんな感じで、x11にのみ+がついていればOKです。
sudo port info cairo pango cairo @1.14.2_1 (graphics) Variants: opengl, quartz, universal, [+]x11 ←これ Description: Cairo is a vector graphics library with cross-device output support. It is designed to produce identical output on all output media while taking advantage of display hardware acceleration when available (e.g. through the X Render Extension). Homepage: http://cairographics.org/ Extract Dependencies: xz Build Dependencies: pkgconfig Library Dependencies: libpixman, glib2, fontconfig, freetype, libpng, zlib, expat, xrender, xorg-libXext, xorg-xcb-util Conflicts with: cairo-devel Platforms: darwin, macosx License: LGPL-2.1 MPL-1.1 Maintainers: ryandesign@macports.org -- pango @1.38.0 (x11) Variants: quartz, universal, [+]x11 ←これ Description: The goal of the Pango project is to provide an open-source framework for the layout and rendering of internationalized text. Homepage: http://www.pango.org/ Extract Dependencies: xz Build Dependencies: pkgconfig Library Dependencies: glib2, cairo, harfbuzz, gobject-introspection, Xft2 Conflicts with: pango-devel Platforms: darwin License: LGPL-2 Maintainers: ryandesign@macports.org, openmaintainer@macports.org
これで安定してMacでmikutter出来ますね。