PopClipエクステンションの作り方

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Macアプリ、PopClipのエクステンションを作ったので、簡単な方法メモ…のつもりだったのだけどなんかマニュアルの和訳っぽくなってしまった。

執筆時の環境

  • macOS Sierra 10.12.6
  • PopClip 1.5.7

エクステンションファイルの構成

フォルダもしくはzipファイルを1つのエクステンションファイルとして扱う。
フォルダの場合は拡張子を .popclipext zipファイルの場合は .popclipextz とすることでPopClipのエクステンションと認識されるようになる。

フォルダの中にはConfig.plistが必須で、Config.plistファイルにエクステンションの設定や処理を記入する。詳細内容は後述。

また、アイコンとして画像ファイルを含めることが出来る。
アイコンファイルは256px*256px以上のPNGファイルで、表示部分が黒、背景は透過にすることが推奨されている。

また、シェルスクリプトやApple Scriptを実行するエクステンションにはそれらの実行ファイルも含める必要がある。

Config.plist

Config.plistにはApple Property Listのフォーマットに従ってエクステンションの設定を記載する。(サンプルファイル)

構造

Config.plistは以下の項目を持つ

Key 必須か 説明
Extension Identifier String 必須 このエクステンションを示す一意の文字列。com.pilotmoon.を使ってはいけない。例: com.example.myextension
Extension Name String or Dictionary 必須 設定画面に表示されるエクステンションの名前。
Extension Image File String 任意 アイコンファイルのファイル名。エクステンションのパッケージ内に含める必要がある。
Blocked Apps Array 任意 ここで指定されたアプリケーション内ではアクションが表示されない。アプリケーションのバンドル識別子の文字列の配列が入る。(例: com.apple.TextEdit)
Required Apps Array 任意 この要素が存在する場合、ここで指定されたアプリケーション内でのみアクションが表示される。アプリケーションのバンドル識別子の文字列の配列が入る。(例: com.apple.TextEdit) 注: この要素はアプリがMac内に存在しているかは確認しない。アプリの存在を確認するにはApps要素を使用する。
Regular Expression String 任意 アクションが表示される条件を正規表現で指定する。 注: URLやeメールアドレスに正規表現を使用する必要はない。かわりにRequirements要素のhttpurl, httpurls, emailを使用するべきである。
Requirements Array 任意 Requirementsキーの配列。アクションが表示される条件を指定する。[デフォルト: copy]
Stay Visible Boolean 任意 YESの場合、アクションがクリックされてもPopClipの画面が表示されたままになる。[デフォルト: NO]
Preserve Image Color Boolean 任意 YESの場合、白のかわりにオリジナルの色でアイコンが表示される。[デフォルト: NO]
Pass HTML Boolean 任意 YESの場合、PopClipはHTMLテキストが選択されていれば、それをPOPCLIP_HTML (シェルスクリプト)、{popclip html} (Apple Script)に渡します。NOにしておくとHTMLの処理が不要になるため動作が軽くなります。[デフォルト: NO]
Long Running Boolean 任意 Apple Script及びシェルスクリプトにのみ適用。YESにすると、このアクションは処理に時間がかかるものとしてPopClipに認識される。処理に0.1秒以上かかった場合、待機中スピナーを表示する。
Restore Pasteboard Boolean 任意 paste-afterかpreview-resultを使用した場合にのみ適用。YESにすると、結果を貼り付けた後にクリップボードを元のテキストに復元する。[デフォルト: NO]
Extension Description String or Dictionary 任意 短いエクステンションの説明文。
Extension Long Name String or Dictionary 任意 長いエクステンションのタイトル。アプリ内には表示されないが、ウェブサイト上に表示される。
Credits Array 任意 作者の情報を記した辞書の配列。辞書の詳細はCredits辞書を参照。
Apps Array 任意 アクションが動作するための必須アプリを定義された辞書の配列。辞書の詳細はApps Dictionaryを参照。
Required OS Version String 任意 アクションが動作可能なmacOSの最低バージョンを指定。(例: 10.8.2)
Required Software Version Number 任意 アクションが動作可能なPopClipの最低バンドルバージョンを指定。(例: 701はPopClip 1.4.5を示す。)
Actions Array 必須 アクションの処理を指定する辞書の配列。Action辞書を参照。
Options Array 任意 エクステンションの設定項目を指定する辞書の配列。Option辞書を参照
Options Title String or Dictionary 任意 設定画面に表示されるタイトル。[デフォルト: Options for this extension.]

Action辞書

Service Name、AppleScript File、Shell Script File、URLをどれか1つだけ設定してメインアクションを指定する。

Key 必須か 説明
Title String or Dictionary 必須 アクションの名前。アイコンがない場合はボタンになる。アイコンが指定されている場合アイコンの上にマウスを置くと表示される。
Image File String 任意 ボタンのアイコンファイルのファイル名。エクステンションのパッケージ内に含める必要がある。
Service Name String Serviceアクションに必須 呼び出すサービスの名前を正確に入力する。(例: Make Sticky)
AppleScript File String AppleScriptアクションに必須 実行するAppleScriptファイルのファイル名。エクステンションのパッケージ内に含める必要がある。スクリプトファイルはプレーンテキストで(.scptではなく.applescript)、UTF-8でエンコードする。スクリプトでは、”{popclip text}”が選択されたテキストで置き換えられる。 それ以外の項目はScript変数を参照。AppleScriptの例はExample AppleScript Fileも参照。
Shell Script File String シェルスクリプトアクションに必須 実行するシェルスクリプトのファイル名。エクステンションのパッケージ内に含める必要がある。/bin/shにパラメータとして渡される。スクリプト内では環境変数 $POPCLIP_TEXT で選択されたテキストにアクセスできる。他の変数はScript変数を参照。カレントディレクトリはエクステンションディレクトリに設定される。シェルスクリプトの例はExample Shell Script Fileも参照。
Script Interpreter String 任意 シェルスクリプトに使用されるインタプリタを指定。(例: /usr/bin/ruby) [デフォルト: /bin/sh]

URL String URLアクションに必須 実行された際に開くURLを指定。{popclip text}が選択されたテキストで置き換えられる。&は&とエンコードする必要がある。(例: http://translate.google.com/#auto%7Cauto%7C{popclip text} )
Key Combo Dictionary Keypressアクションに必須 実行された際に押すキーを指定します。注: キーはシステムレベルではなく、アクティブなアプリケーションレベルで行われるため、アプリの切り替えのようなグローバルキーボードショートカットは起動できません。辞書の中身はKey Code format参照
Before String 任意 メインアクションが実行される前に実行される処理を指定します。Before、Afterキーを参照。
After String 任意 メインアクションが実行された後に実行される処理を指定します。Before、Afterキーを参照。
Blocked Apps Array 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Required Apps Array 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Regular Expression String 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Requirements Array 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Stay Visible Boolean 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Preserve Image Color Boolean 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Pass HTML Boolean 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Restore Pasteboard Boolean 任意 上記参照。エクステンションヘッダで指定された値を上書きします。
Long Running Boolean 任意 上記参照。エクステンションヘッダで指定された値を上書きします。

Requirementsキー

アクションが表示される条件を指定する。

キー 説明
copy 選択されたテキストがコピー可能な場合。デフォルト。
cut 選択されたテキストがカット可能な場合。
paste 選択された場所にペースト可能な場合。
formatting 選択されたテキストのフォーマットを変更できる場合。
httpurl 選択されたテキストに1つのHTTP(S)のURLが含まれている場合。
httpurls 選択されたテキストに1つ以上のHTTP(S)のURLが含まれている場合。
email 選択されたテキストに1つのeメールアドレスが含まれている場合。
path 選択されたテキストがローカルファイルのパスの場合。
html HTMLのテキストが選択されている場合。
option-*=# The option named `*` must be equal to the string `#`. For example `option-fish=1` would require an option named `fish` to be set on. This mechanism allows actions to be enabled and disabled via options.

Before、Afterキー

メインアクションの前や後に実行される処理を指定する。

キー 説明
cut ⌘Xがおされた時のように、システムのカットを行う。
copy ⌘Cがおされた時のように、システムのコピーを行う。
paste ⌘Vがおされた時のように、システムのペーストを行う。
paste-plain クリップボードの中身をプレーンテキストにしてペーストする。
popclip-appear PopClipを再び呼び出す。(Select Allエクステンションで使われている)
copy-selection 最初に選択されたテキストをプレーンテキストとしてコピーする。(Swapエクステンションで使われている)
copy-result スクリプトが返したテキストをクリップボードに格納(コピー)する。スクリプトが失敗した場合×を表示。
paste-result スクリプトが返したテキストをクリップボードに格納(コピー)し、ペーストが可能な場合そのテキストをペーストする。スクリプトが失敗した場合×を表示。
preview-result スクリプトが返したテキストをクリップボードに格納(コピー)し、そのテキストを表示します(100文字以上は省略されます)。結果をクリックすることでそのテキストをペーストすることも出来ます。スクリプトが失敗した場合×を表示。
show-result スクリプトが返したテキストを表示。スクリプトが失敗した場合×を表示。
show-status スクリプトが進行状況を目盛りで表示。スクリプトが失敗した場合×を表示。

Option辞書

インストール時などに設定可能な設定項目を指定する。

Key 必須か 説明
Option Identifier String 必須 オプションを一意に区別する名前。全てアルファベットの小文字である必要がある。スクリプトからオプションを参照するときの名前。Script変数参照
Option Type String 必須 以下の項目から1つ選んで入力。 `string` (ユーザーが自由に入力するテキストボックス)、`boolean` (チェックボックス) or `multiple` (複数の選択肢から選択するボックス).
Option Label String or Dictionary 必須 画面に表示される設定項目名。
Option Default Value String 任意 デフォルトで入力や選択される項目を指定。
Option Values Array multiple Typeで必須 ボックス内に表示される選択肢を指定した配列。

Script変数

AppleScript、URLで置き換えられる文字列と、シェルスクリプト内で使用できる変数

シェルスクリプト変数 AppleScript/URLプレースホルダー 説明
POPCLIP_TEXT {popclip text} 選択されたテキスト。
POPCLIP_URLENCODED_TEXT {popclip urlencoded text} 選択されたテキストがURLエンコードされたもの
POPCLIP_URLS {popclip urls} 行で分けられた選択されたURLのリスト。
POPCLIP_URL_TITLES {popclip url titles} 行で分けられた選択されたURLのページタイトルリスト。タイトルがない場合は空行。
POPCLIP_HTML {popclip html} HTMLが選択されている場合、選択されているHTMLのHTMLコード。Pass HTMLがYESになっている必要がある。
POPCLIP_MODIFIER_FLAGS {popclip modifier flags} アクションのボタンが押された際に押されているキーのコード。Key Code format参照
POPCLIP_BUNDLE_IDENTIFIER {popclip bundle identifier} テキストが選択されたアプリケーションのバンドル識別子。(例: com.apple.Safari)
POPCLIP_APP_NAME {popclip app name} テキストが選択されたアプリケーションの名前。(例: Safari)
POPCLIP_BROWSER_TITLE {popclip browser title} テキストが選択されたウェブページのタイトル。(SafariとChromeでのみ動作。)
POPCLIP_SPECIAL_BROWSER_TITLE {popclip special browser title} ウェブページのタイトル。ブラウザ上のアドレスバーでURLを選択した場合のみ使用可能。(SafariとChromeでのみ動作。)
POPCLIP_BROWSER_URL {popclip browser url} テキストが選択されたウェブページのURL。(SafariとChromeでのみ動作。)
POPCLIP_DECIMAL_SEPARATOR N/A macOSのシステムロケールで指定された小数点区切り文字。(例: .)
POPCLIP_GROUPING_SEPARATOR N/A macOSのシステムロケールで指定された桁区切り文字。(例: ,)
POPCLIP_OPTION_*` *(all UPPERCASE)* {popclip option *}` *(all lowercase)* One such value is generated for each option specified in `Options`, where `*` represents the `Option Identifier`. For boolean options, the value with be a string, either `0` or `1`.

Credits辞書

作者の情報。

Key 必須か 説明
Name String 必須 作者の名前。
Link String 任意 作者のウェブサイトへのリンク。

まとめ

Config.plistをXCodeとかで作るだけでウェブページ開く程度のエクステンションならものすごく簡単に作れてしまうし、Bashに限らずPHPとかSwiftとかのプログラムもシェルスクリプトとして読み込んでエクステンションを作れるのでものすごく簡単に開発できる。正直このページの執筆のほうがエクステンションの開発より時間かかった…。

参考

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す