18
クリップボード監視 と外部コマンド実行 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/3/23 Chiba.pm#2 LT

クリップボード監視と外部コマンド実行 #chibapm

Embed Size (px)

DESCRIPTION

2013/3/23 に開催された Chiba.pm#2 でトークしたLTのスライドです。

Citation preview

Page 1: クリップボード監視と外部コマンド実行 #chibapm

クリップボード監視と外部コマンド実行

尾形 鉄次 (OGATA Tetsuji)

Twitter: @xtetsuji2013/3/23 Chiba.pm#2 LT

Page 2: クリップボード監視と外部コマンド実行 #chibapm

自己紹介

• 尾形 鉄次 (OGATA Tetsuji)

• Twitter: @xtetsuji

• Blog: http://post.tetsuji.jp/

Page 3: クリップボード監視と外部コマンド実行 #chibapm

クリップボード監視

• 今回はMacの話

• Macでの正式名称は「ペーストボード」

• クリップボードに変更があったら何かフックを仕掛けることができるか

Page 4: クリップボード監視と外部コマンド実行 #chibapm

新ジャンルコピペ

• 所定形式の文字列がコピーされたら、自動的にどこかにペースト、もしくは事前定義済みのコールバックを実行

• いわゆるクリップボード監視

Page 5: クリップボード監視と外部コマンド実行 #chibapm

pbcopy / pbpaste

• Mac OS X 標準コマンド pbcopy / pbpaste

• pbcopy: 標準入力をペーストボードへ

• pbpaste: ペーストボードを標準出力へ

• 詳しくは man 1 pbcopy、man 1 pbpaste

Page 6: クリップボード監視と外部コマンド実行 #chibapm

外部コマンド呼び出しはコストがかかる

• 個人用途ではそれほど気にならないかもしれないけど外部コマンド呼び出しはコストがかかる

• Perl では system()、piped open、そして``, qx// (backtick) など

Page 7: クリップボード監視と外部コマンド実行 #chibapm

外部コマンド呼び出しはコストがかかる

• ありがちな考え

• 「load averageを監視して負荷が大きいときは処理を控えよう」

• my $uptime = `uptime`; ...

• uptime外部コマンド自体の呼び出しのコストが無視できない

Page 8: クリップボード監視と外部コマンド実行 #chibapm

`uptime`の代わり

• CPANで「load average」で検索すると、UNIX / Linux / *BSD それぞれで uptime

外部コマンドを使わずに load average を取得できるモジュールが出てくるのでそれを使おう

Page 9: クリップボード監視と外部コマンド実行 #chibapm

話を戻しまして…

Page 10: クリップボード監視と外部コマンド実行 #chibapm

Mac::Pasteboard

• use Mac::Pasteboard;

• pbpaste() と pbcopy() 関数をインポート

• XS実装で外部コマンド呼び出しは無い

• ただUTF-8マルチバイト文字列が化ける

(要望どこに出せばいいんだろう)

Page 11: クリップボード監視と外部コマンド実行 #chibapm

使い分け

• とりあえずMac::Pasteboardのpbpaste()で以前のクリップボード内容を監視し、違いがあれば`pbpaste`で取り出す

• 多数の呼び出しが発生する監視処理にだけMac::Pasteboardを使えばOKだろう

Page 12: クリップボード監視と外部コマンド実行 #chibapm

ループ• while (1) { ... }

• pboverve.pl &

• 用途に応じて AnyEvent->timer(...) を使っても良いかも(個人的にwhileループは、うっかりバグが多くて結構気を使う)

• デーモン化が好きな人はApp::Daemon

Page 13: クリップボード監視と外部コマンド実行 #chibapm

今回の事例

• STOT形式: Twitterの発言形式:

• xtetsuji: 今日はこれから飲む。久々の飲み会?かも。 [http://twitter.com/xtetsuji/status/314300949604749312]

• こういう形式の文字列を捕捉したら、自分のIRCチャンネルにメモする

Page 14: クリップボード監視と外部コマンド実行 #chibapm

処理の流れ

• Mac Twitterクライアント「夜フクロウ」

• ツイートをSTOT形式でコピー

• Perlで作った常駐プログラムがフック

• IRCに書き込み(Ikachan的手法)

Page 15: クリップボード監視と外部コマンド実行 #chibapm

他への応用

• STOT形式以外でも使えるかも

• URL文字列をコピーしたら、SQLiteとかで作った自分専用閲覧履歴辞書に格納とか

Page 16: クリップボード監視と外部コマンド実行 #chibapm

Mac以外では• Windowsではクリップボード内容をget/

setするコマンドはなさそう

• Win32::Clipboard

• 原始的なX.org環境ではxsel/xclipとか?

• きっとモジュールもあるはず

Page 17: クリップボード監視と外部コマンド実行 #chibapm

コピペ繰り返す音

• 職場で響くリズミカルな音

• Windowsでコピー→ペーストを何回も

• こういう人を同じ手法で救えないかな

• それ以前にVBAとか?

Page 18: クリップボード監視と外部コマンド実行 #chibapm

ご清聴ありがとうございました