読者です 読者をやめる 読者になる 読者になる

PyObjCでペーストボードを操作する

Python Cocoa

 PythonからMac OS Xのペーストボード(クリップボード)を操作することを試みています。
 とりあえずの目的は、コード例が含まれている日記の更新を容易化することですが、ゆくゆくは、NSAttributedStringを使ってコードをリッチテキスト化し、スタイルを保ったまま他のアプリケーションの文書に貼付けられるようにしたいです。


 とりあえず、Pythonからペーストボードへのコピーは簡単にできました。注意点は、非ASCII文字列を扱う場合は、NSPasteboardのsetString:forType:にユニコード文字列を渡すこと、ぐらいでしょうか。

# -*- coding: utf-8 -*-
from AppKit import NSPasteboard, NSStringPboardType

def pboard_copy(text):
    pb = NSPasteboard.generalPasteboard()
    pb.declareTypes_owner_((NSStringPboardType,), None)
    pb.setString_forType_(unicode(text), NSStringPboardType)

if __name__ == '__main__':
    pboard_copy(u"こんにちは世界")


 最初は、下のように、pbcopyを利用することを考えていたのですが、文字化けをおこさずに非ASCII文字列を渡す方法が分からなかったので、PyObjCを使う路線に切り替えました。

$ python sometask.py | pbcopy


 久しぶりにCocoa(というかPyObjC)に触ったのですが、やっぱりCocoaは面白いですねー。