Blog

ShellからMac OS Xのクリップボード弄り

By Hiroyuki OYAMA Sun Jun 6 13:35:32 2004

サーバの運用管理が仕事だった頃、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 install
CocoaっつーかObjective-Cのメモリ管理の考え方が、未だに飲み込めていないヘタレなのでアレですがまぁ一発exit物のツールなので良しとしましょう。 ←え〜
ホントに下らない数行のコードなのでライセンスはナンも考えてませんが、新BSD系とか適当なヤツとしてご自由にって感じです。

Comments

Post a comment

Name:


URL:


Comments:


WebエンジニアのためのApacheモジュールプログラミングガイド

ApacheをHackする!
モジュールプログラミング強烈初体験!!
定価: 2,919円(税込)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Blog > ShellからMac OS Xのクリップボード弄り