Rubyも、Pythonも使えるOS X用テキスト処理インターフェースPopClipが熱い
2015/12/16
価値ある情報をユーザー視点で発信するブログ
2015/12/16
もくじ
OS XでiOSライクなコピペメニューを再現するPopClip。
PopClip
カテゴリ: Utilities
販売元: Nicholas Moore(サイズ: 1.7 MB)
全てのバージョンの評価: (211 件の評価)
iOSライクというのは、テキストを選択すると自動的にメニューがポップアップしてくるという、使いやすいのか使いにくいのか判断に困るアレですね。
PopClipを使うと、OS XでもiOS 6までのものにそっくりのコピペメニューが!
正直コピペはどうでもよくて、PopClipには、機能をどんどん追加できるという重要なフィーチャーがあります。ポップアップしてくるメニューの項目を増やせるのです。
こんなエントリも書きました。
これがとても気に入ったので紹介したいと思います。
一つの機能単位をアクションといいます。アクションを追加するのが機能拡張。本家は用語を使い分けていますが、本エントリではそれを同一視し、アクションで用語統一します。開発元が提供するアクションのほか、公開されているアクション開発情報を元に、有志が開発したアクションを開発元がとりまとめ、配布しています。
公式サイトで配布されているアクションには、開発元だけができる署名が添付されていて、公式認定のアクションと、署名のない非公式のアクションには、やや扱いに差がつけられています。といっても、インストール時に警告ダイアログが出るか出ないかの違いでしかありませんが。
いろいろなアクションを追加すると、もはやコピペメニューの範疇を超えて、総合テキスト処理メニューとでもいうべきものに変ぼうします。そして、これがPopClipの真骨頂です。
配布されているものを使うだけでも面白く、便利なのですが、自分で俺得なアクションを作るとより楽しい。
PopClipの見た目、動作はシンプルですが、その見た目に反して、機能拡張に関係した部分は、もの凄くきめ細やかな配慮にあふれた作りになってます。GitHubにアクションの自作に導くことを目的にした仔細な説明があります。
ざっくりとした図にするとこんな感じ。
ほぼ自由に選べるバックエンドに選択したテキストを渡し、いろいろな副作用を起こせるというのがPopClipの正体とでもいうべきもの。こいつは痛快です。
別に選択テキストを使わなくても、カーソル位置にテキストを戻さなくてもOK。PopClipと直接関係ないスクリプトの実行も可能です。(続きは[Read More]から)
前出のアクション開発情報を見ると、仕様がそこそこ大きいのでたじろいでしまうかもしれません。
作るのが面倒臭そうですが、既存のアクションを改造すると簡単です。
既存のアクションの中身を確認すると、必要最低限の設定項目は、それほど多くないことが分かります。
公式のアクション集ページからダウンロードできる「URL Encode」。これは、選択テキストをURL Encodeするもの。
これをいじくって、自分のものにしてみます。選択テキストを加工して選択テキストを置き換えるアクションを作りたい。「URL Encode」は、それに近い動作をするということで土台に選びました。
ダウンロードした「URLEncode.popclipextz」。これをPopClipがインストールされている環境でダブルクリックする。
すると、「URLEncode.popclipextz」が元あった場所から忽然と消え、PopClipへのインストールが完了します。
「URLEncode.popclipextz」はどこへ行ったかというと、「/Users/ユーザー名/Library/Application Support/PopClip/Extensions」に移動しています。
拡張子が「popclipextz」から「popclipext」に変わっています。「popclipextz」の実体はzipファイル。それがインストール過程で解凍され「popclipext」になるのです。
「popclipext」の実体はフォルダで、右クリック、Ctrl+クリックで表示できるメニュー項目「パッケージの内容を表示」から中身が見られます。
中には五つのファイルが入っていました。
urlencode.shはシェルスクリプト。シェバング行で、インタプリタとしてbashが指定されています。
選択テキストは環境変数POPCLIP_TEXTに入っているようで、それをperlで加工して標準出力に出しています。
標準出力に出たものが、カーソル位置に挿入されるという仕組みであることが分かります。
#!/bin/bash echo -n "$POPCLIP_TEXT" | perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg'
スクリプト内で参照できる環境変数はPOPCLIP_TEXTだけではありません。「Script Fields」の項を見るとそのほかのものが載っています。
POPCLIP_MODIFIER_FLAGSなんかは熱いですね。メニューを選択するときに押していた修飾キーが分かるので、数種類の動作を使い分けたい場合に便利です。
今度は、アクションの動作を決定づけるConfig.plistを調べてみます。
plistファイルの閲覧、編集には、Xcodeが便利です。
Xcode
カテゴリ: Developer Tools
販売元: iTunes K.K.(サイズ: 1993.1 MB)
全てのバージョンの評価: (210 件の評価)
Root以下にActionsとCreditsのArrayがある。
Actions下のArrayに記述のある項目は以下。
キー | 値 |
---|---|
After | スクリプトを実行した後の処理方法 |
Image File | PopClip上に表示されるアイコンファイル名 |
Script Interpreter | スクリプトを実行するインタプリタ |
Shell Script File | スクリプトのファイル名 |
Title | タイトル |
Credits以下は自明だと思うので割愛。
Creditsの下の四つの項目について。
キー | 値 |
---|---|
Extension Description | アクションの自己説明 |
Extension Identifier | アクションの識別子。ほかとかぶらないものである必要があるので、逆ドメイン名が推奨 |
Extension Name | アクションの名前 |
Required Apps | アプリのBundle IdentifierをStringのArrayで記述。特に制約をかけない場合は701のままでいい模様 |
ほぼ見ただけで自明のことしか書いてありません。簡単です!
僕はRubyをよく使うので、bashの代わりにRubyを使うように変更したい。
そして、Rubyを使って選択テキストを「」で囲む単純なアクションを作ろうと思います。
アクションの名前は、そうですね、Kakkoにしましょうか。
手始めに、URLEncode.popclipextフォルダをデスクトップにコピーしてきて、フォルダ名をKakko.popclipextに変えました。
例によって「パッケージの内容を表示」で中身をいじります。
_Signature.plistは不要なので削除。
Config.plistはこうなりました。
kakko.rbはこうなりました。エンコーディングはutf-8。
#!/usr/bin/ruby # -*- coding: utf-8 -*- $KCODE = 'u' clip = ENV['POPCLIP_TEXT'] print "「#{clip}」"
Config.plistの記述に合わせて、Kakko.pngを用意します。背景が透明のPNGです。元のPercent.pngを改変しました。
README.mdは適当に。Kakko.popclipextの中身はこんな感じになりました。
これで完成です。
Pythonでやりたい場合は、Config.plistのScript Interpreterを/usr/bin/pythonに、Shell Script Fileをhoge.pyなど、作るスクリプトファイル名に。
あとは、hoge.pyを書くだけです。
選択テキストの参照はos.environ[‘POPCLIP_TEXT’]ですね。
#!/usr/bin/python # -*- coding:utf-8 -*- import os import sys reload(sys) sys.setdefaultencoding('utf-8') clip = os.environ['POPCLIP_TEXT'] print "「" + clip + "」"
完成したKakko.popclipext。これをダブルクリックするとインストールできるはずです。
ダブルクリックすると、公式サイトで配布されていたURLEncode.popclipextzとは異なり、問い合わせが入りました。_Signature.plistがないためです。自分で作ったものですし、不正な処理はしていないので「”Kakko”をインストール」を選択。
Kakkoがインストールされました。
さて、期待通り選択テキストを「」で囲むことができるかテストします。ちゃんとKakkoが表示されています。これを選ぶと……。
「」で囲まれました!正常に動いています!
ここまでで見てきた通り、既存のアクションの中から、自分が作りたいものに近いものを改造して作ると、アクションはかなり簡単に作れることが分かるかと思います。
ぜひ俺得なアクションを作ってみてください。一度作ってから再度ドキュメントを読むと、バージョンアップの構想が浮かんでくるのではないかと思います。
PopClip
カテゴリ: Utilities
販売元: Nicholas Moore(サイズ: 1.7 MB)
全てのバージョンの評価: (211 件の評価)
MarsEditで開いているエディタのカーソル位置に、選択テキストを送信するアクション、SendToMarsEditを作ってみました。
これは、AppleScriptを実行するアクションです。中身を見てみてください。
AppleScriptは、text形式で保存したものを使います。そのほかの形式は使えません。
MarsEdit – the blog editor for WordPress, Tumblr, Blogger and more.
カテゴリ: Social Networking
販売元: Red Sweater Software(サイズ: 7.5 MB)
全てのバージョンの評価: (9 件の評価)
テキストを選択した後、メニューからSendToMarsEditを実行すると……。
MarsEditで開いている一番上にあるエディタのカーソル位置に選択テキストが送られます。
動画を撮ってみました。