サーバの運用管理が仕事だった頃、ShellからWin32のクリップボードのテキストを出し入れするツールを書いて大活躍でした。そのMac OS X版を書いてみた。
何が嬉しいの?
イマドキのGUIなOSを使っていると、GUIなアプリとShellの世界を行き来する場面が頻繁に発生します(よね?汗)。基本はShellの世界で完結するので、データのやり取りはplain textだ標準入出力だGNU text utilitiesだなんだで気持ちいいことになるのですが、ここに表計算ソフトだGUIなメーラーだが入ってくると、途端にそのキモチヨサが失われてしまいます。たとえば「〜に該当するユーザのIDの一覧をちょうだい。あ、できればそれぞれのディスク使用量もね」とかお願いされた場合、shellから該当するホストたちやデータベースに問い合わせ、その結果をshell上で抽出・整形するわけです。その結果が数十行ならそのままTerminalの画面からコピペすれば済みます。でも数百〜数千行だったら?
そんなときにshellからクリップボードを操作できると
$ clipboardwriter < userlist.csvして、そのまま表計算ソフトやメーラーでペーストできるわけです。
また、「ユーザの一覧渡すから、ちょっと〜なユーザの一覧出して。あデータはExcelで渡すからよろっ」みたいな場面では、Microsoft Excelを開いてユーザの列をコピーして
$ clipboardreader | perl -ne 'xxxxxxxxxx'とかして、クリップボード上のデータを基に処理ができるわけです。ついでに結果を
$ clipboardreader | perl -ne 'xxxxxxxxxx' | clipboardwriterみたいにしても吉。あ、
真の漢はSpreadsheet::ParseExcelでワンライナーだ!みたいなごもっとも(ぇ)なツッコミは禁止でお願いします(笑)
よくあるのが特定のコマンドの実行結果をメールに貼付けたい場合とかそー言うときにも使ってました。
当時会社ではWin32の端末をあてがえられていた都合で、ActivePerlのWin32::Clipboardモジュールでそんなツールを書いて使っていました。このツールを使いはじめてやっと/usr/bin/cutとか/usr/bin/pasteを使うようになったんだよなたしか...
Mac OS Xでは?
たぶんクリップボード操作系のツールはフリーウェア/シェアウェアのネタとしてポピュラーなので、既に存在するのかもしれませんが、何となくコードを書きたい年頃だったのでCocoaなAPIを使って書いてみました。使うクラスはNSPasteboardです。クリップボードじゃなくてペーストボードなんですね。ちなみに標準インストールされている/usr/bin/pbcopyと/usr/bin/pbpasteでコピペできるんですが、何となく「ただ書きたかっただけ」なもんで(汗) というわけでcbというツールを書いてみました。使い方は
$ cbでクリップボードのテキストを標準出力に吐き出します。クリップボードに書き込む手は2つあって、標準入力からのテキストを書く場合は
$ cb -i $ cal | cb -i etc...などと-iオプションを指定します。また引数で指定した文字列をクリップボードに書く場合は
$ cb -s 'Hello World'みたいに使います。
ちなみにpbcopyとpbpasteと同様に日本語の文字列はISO-2022-JP以外のエンコーディングだとコピペできなくなります。これは受け取った文字列をNSPasteboardに渡す時、文字列はNSStringで渡すのですがこのNSStringを初期化する時にシステムのデフォルトエンコーディングで文字列を喰っている為、正しく内部エンコーディングに変換できないからです。
というわけで日本語を扱う場合はツール内部で変換するか、ツールに渡す前に変換するかのいずれかの下準備が必要になります。ちなみにpbopy/pbpasteとcbはこういった処理は実装していません。あ、GUI上に表示されているテキストをコピーする場合はこういった問題は起こりえません。その辺は統一されているので。
ダウンロードはこちらからどんぞ
cb-1.0.0.tar.gzダウンロードし解凍して make; make install (インスコ先は/usr/local/binにしてるので適当に修正してください)するだけです。当然Mac OS X専用というかMac OS X 10.3.4 + gcc 3.3でしかテストしてませんので、その辺よろしくです。
$ tar zxvf cb-1.0.0.tar.gz $ cd cb-1.0.0 $ make # make installCocoaっつーかObjective-Cのメモリ管理の考え方が、未だに飲み込めていないヘタレなのでアレですがまぁ一発exit物のツールなので良しとしましょう。 ←え〜
ホントに下らない数行のコードなのでライセンスはナンも考えてませんが、新BSD系とか適当なヤツとしてご自由にって感じです。