記事本文
Copy URL+ についてもう一度。
以前 Copy URL+ をカスタマイズで紹介していた Copy URL+ ですが、それから 2 年あまりが経ちバージョンも 1.3.2 となりました。 実は、そのまま使っていたらいくつかの機能が有効にならないということが分かったので、ここで導入からアドオンへのパッチの適用、そして機能のカスタマイズまでもう一度まとめることにしました。
Copy URL+ とは何か
まず、 Copy URL+ って何さ、という方のために簡単な説明を。 Copy URL+ は Mozilla Firefox のアドオン (Firefox 1.x 系では拡張機能と呼ばれていたもの ) の 1 つで、導入することで web ページの title 要素や URI などをクリップボードにコピーすることができるようになります。 インストールしてそのまま使っても非常に便利なのですが、カスタマイズすることで自動で a 要素によるリンクを作成できたり、 blockquote 要素や q 要素による引用を作成できたりとより便利になり、 weblog を書いている人全てにお勧めしちゃいたいくらいのナイスなアドオンなのです。
この記事を書いている時点のバージョンは 1.3.2 ですので、以降の記述についてはそれに準拠して書いていきます。 また、各種のフォルダやファイルの環境は Windows XP Home Edition を基に書いています。 それ以外の OS や異なるバージョンの Windows をお使いの方は適宜読みかえてください。
Copy URL+ 1.3.2 をインストールする
まずは Copy URL+ 1.3.2 をインストールしましょう。 なお、 Copy URL+ 1.3.2 は Mozilla Firfox のアドオンですので、当然ながら Firefox がインストールされていることが前提条件になります。
アドオン自体は mozdev.org - copyurlplus: index から入手できますが、オリジナルのものは 2007 年 2 月 10 日時点で未だ Firefox 2.x に対応していません。
というエラーメッセージが出てインストールできません。
[を] Firefox 2 にした&「Copy URL+」修正のような手順で install.rdf の em:maxVersion を 2.0 以上の値にしてインストールしても良いのですが、電網探題: Copy URL + 1.3.2 日本語版 Fx:[1.0-3.1] にてこの対応を施した上で日本語化を行った CopyURLplus-1.3.2_JP2.xpi が配布されていますので、そちらをインストールしましょう。
Copy URL+ 1.3.2 に現存するバグと対応パッチ (1)
MORIYAMA Hiroshi's Diary - Copy URL+ 1.3.2の %*_HTMLIFIED% のコピー結果に塵が混ざる件で指摘されていますが、 mozdev.org - copyurlplus: customize にある変数のうち、 HTMLFIED 系のものの文字実体参照への変換が不充分なものになっています。
MORIYAMA Hiroshi's Diary - Copy URL+ 1.3.2の %*_HTMLIFIED% のコピー結果に塵が混ざる件のパッチで修正を行うことが可能ですが、 .jar ファイルの編集について少し補足します。 主に私のような非 Emacs 使いあるいは .jar ファイルの解凍・アーカイブが出来ない方向け。 逆に言うと、 Emacs 使いあるいは .jar ファイルの解凍・アーカイブが出来る方は以下の手順は読み飛ばして、ご自身のやり方でパッチを適用していただいて構いません。
- プロファイルフォルダ (Windows XP Home Edition では C:\Documents and Settings\UserName\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.xxx) 内の extensions\{F78DC607-BB30-4e13-9E47-2C2E162E9094}\chrome 内にある copyurlplus.jar を任意の場所にコピーします。 ( 万一のためのバックアップです。 )
- copyurlplus.jar のファイル名を copyurlplus.zip に変更します。
というアラートが出ますが、はい(Y)を選んで変更して構いません。 ( 最後にまた .jar に戻します。 ) - copyurlplus.zip をアーカイバ等で解凍します。
- アーカイブ内の content\copyurlplus\copyurlplusOverlay.js に、 MORIYAMA Hiroshi's Diary - Copy URL+ 1.3.2の %*_HTMLIFIED% のコピー結果に塵が混ざる件のパッチを適用します。
- 「パッチを適用する」ということがよく分からない場合は、 Windows環境で「ファイルにパッチ(patch)を当てる」 : 亜細亜ノ蛾 - Weblog に分かりやすい解説があります。
- パッチでは文字実体参照を行っていますが、数値文字参照に書き換えても問題ありません。私は数値文字参照の方を使うため、そのように書き換えて利用しています。
- 運用に応じて、適宜文字参照を行う文字を追加しても構いません。私の場合は ' (' あるいは ' 、ただし ' は XML 1.x およびそれをベースとした XHTML でのみの定義で、 HTML 4.x およびそれ以前では未定義 ) を文字参照するため、
re_htmlify['\''] = ''' ;という行を追加しています。 ( 文字参照を行う文字を' 'で囲んで指定しているため、re_htmlify['''] = ''' ;と書いてはいけません。'\''のように、バックスラッシュエスケープを行ってください。 )
- パッチを適用した copyurlplusOverlay.js を含む、 copyurlplus.zip 内のファイル・フォルダを元の copyurlplus.zip に再アーカイブします。
- copyurlplus.zip のファイル名を copyurlplus.jar に変更します。ここでも
というアラートが出ますが、はい(Y)を選んで変更して構いません。 - 適用したパッチは Firefox の再起動後に有効になります。
なお、 copyurlplus.zip を再アーカイブする際のやり方によっては Firefox 自体の表示が崩れたり、 Copy URL+ 自体の使用ができなくなったりしますので、必ず最初に copyurlplus.jar のバックアップを取った上、自己責任でパッチを適用してください。
Copy URL+ 1.3.2 に現存するバグと対応パッチ (2)
人力検索はてなで私から質問をしていたのですが、 %RLINK% による URI の取得が gContextMenuのimageURLがメソッドからプロパティに変更された関係からか、有効になっていません。
人力検索はてなの回答でもパッチが示されていますが、そこから派生してバグへのパッチに加え有用な変数を加えるパッチが MORIYAMA Hiroshi's Diary - Copy URL+を改造してリンクのソースをコピー出來るやうにしてみたにて公開されていますので、そちらを適用しましょう。 適用先は同じく C:\Documents and Settings\UserName\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.xxx\extensions\{F78DC607-BB30-4e13-9E47-2C2E162E9094}\chrome\copyurlplus.jar\content\copyurlplus\copyurlplusOverlay.js です。
user.js の作成と注意点
さて、 Copy URL+ 1.3.2 をインストールしてパッチを適用しただけでは、その便利な機能の恩恵に預かれるのは全体の 10% にも満たないでしょう。 user.js に自分好みの記述を行い、機能を存分に引き出してあげる必要があります。
なお、 user.js は既存のファイルを修正するのではなく、自らプロファイルフォルダ内に作成する必要があります。 もちろん、これまでにインストールしたアドオンによっては作成しているかもしれませんが。
- C:\Documents and Settings\UserName\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.xxx を開きます。
- .js ファイルを直接作成できるならそのまま user.js という名前のファイルを新規作成、できなければ「新規作成(W)」→「テキスト ドキュメント」でとりあえず user.txt を新規作成します。
- user.txt を作成した場合は user.txt を補助クリックし、「名前の変更(M)」から user.js へ名前の変更を行います。 ( フォルダオプションにて、「登録されているファイルの拡張子は表示しない」にチェックが入っている場合は、ここで変更を行っても user.js.txt という名前のテキストファイルにしかなりません。すべての拡張子を表示させるようにしてください。 )
これで user.js の作成は完了です。 なお、 user.js の作成については次のような注意点があります。
- user.js の文字コードは UTF-8 を推奨します。それ以外での文字コードでも、補助クリック時のラベルが表示されないといった不具合が生じますが、機能自体は使えるようです。しかし、 UTF-8 以外を使うことで他にも影響が生じている、あるいは今後生じる可能性があるかもしれません。
- copyurlplus.menus.n.label と copyurlplus.menus.n.copy は必ず 1:1 で記述する必要があります。すなわち、 1 つの機能に対して 2 行の記述を行うこととなります。
- user.js 内の copyurlplus.menus.n.label と copyurlplus.menus.n.copy は数字の順に並べるようにしましょう。並べなくても動作しますが、補助クリック時は user.js 内の記述順序に関係なく、 n の数字の順によって機能が並べられるので、無用な混乱を生じないように user.js 内でも数字の順に並べておく方が良いです。
また、 user.js に追加した設定は、 Firefox の起動時に prefs.js や about:config の設定を上書きしますので、もし設定を削除したい場合は、 user.js と prefs.js の両方を Firefox を起動していない状態で編集するか、 Firefox の起動中に about:config で設定を変更し、 Firefox を次回起動するまでの間に user.js を編集する必要があります。 詳しくは user.js で Firefox に追加した設定を無効にしたい場合の手順を参照してください。
user.js のサンプルと変数一覧
さて、先ほど作成した user.js に、実際に機能の指定をしましょう。 mozdev.org - copyurlplus: customize にてカスタマイズのための変数とその説明がありますが、これらを一通り使ったサンプルを作成したので、よければご利用ください。
なお、サンプルのソースは次のような感じです。 途中から _HTMLIFIED 版を作ったり _HTMLIFIED 版だけにしていたりしていますが、適宜修正してお使いください。
user_pref('copyurlplus.menus.1.label', '現在のページのURIをコピー');
user_pref('copyurlplus.menus.1.copy', '%URL%');
user_pref('copyurlplus.menus.2.label','現在のページのURIをコピー(&等を文字参照)');
user_pref('copyurlplus.menus.2.copy','%URL_HTMLIFIED%');
user_pref('copyurlplus.menus.3.label','現在のページのタイトルをコピー');
user_pref('copyurlplus.menus.3.copy','%TITLE%');
user_pref('copyurlplus.menus.4.label','現在のページのタイトルをコピー(&等を文字参照)');
user_pref('copyurlplus.menus.4.copy','%TITLE_HTMLIFIED%');
user_pref('copyurlplus.menus.5.label','選択している文字列をコピー');
user_pref('copyurlplus.menus.5.copy','%SEL%');
user_pref('copyurlplus.menus.6.label','選択している文字列をコピー(&等を文字参照)');
user_pref('copyurlplus.menus.6.copy','%SEL_HTMLIFIED%');
user_pref('copyurlplus.menus.7.label','リンクアンカーのURIをコピー');
user_pref('copyurlplus.menus.7.copy','%RLINK%');
user_pref('copyurlplus.menus.8.label','リンクアンカーのURIをコピー(&等を文字参照)');
user_pref('copyurlplus.menus.8.copy','%RLINK_HTMLIFIED%');
user_pref('copyurlplus.menus.9.label', '行末文字をコピー');
user_pref('copyurlplus.menus.9.copy', '%EOL%');
user_pref('copyurlplus.menus.10.label', '現在時刻をUTC形式でコピー');
user_pref('copyurlplus.menus.10.copy', '%UTC_TIME%');
user_pref('copyurlplus.menus.11.label', '現在時刻をローカル形式でコピー');
user_pref('copyurlplus.menus.11.copy', '%LOCAL_TIME%');
user_pref('copyurlplus.menus.12.label','リンクアンカーのソースをコピー(&等を文字参照)');
user_pref('copyurlplus.menus.12.copy','%RLINK_SRC%');
user_pref('copyurlplus.menus.13.label','<a href="現在のページの URI">現在のページのタイトル</a>形式のリンクアンカーを作成');
user_pref('copyurlplus.menus.13.copy','<a href="%URL%">%TITLE%</a>');
user_pref('copyurlplus.menus.14.label','<a href="現在のページの URI">現在のページのタイトル</a>形式のリンクアンカーを作成(&等を文字参照)');
user_pref('copyurlplus.menus.14.copy','<a href="%URL_HTMLIFIED%">%TITLE_HTMLIFIED%</a>');
user_pref('copyurlplus.menus.15.label','Pukiwiki記法のリンクアンカーを作成');
user_pref('copyurlplus.menus.15.copy','[[%TITLE%:%URL_HTMLIFIED%]]');
user_pref('copyurlplus.menus.16.label','現在のページのタイトルと選択している文字列を用いたリンクアンカーを作成');
user_pref('copyurlplus.menus.16.copy','<a href="%URL%" title="%TITLE%">%SEL%</a>');
user_pref('copyurlplus.menus.17.label','選択している文字列をq要素で引用する');
user_pref('copyurlplus.menus.17.copy','<q cite="%URL%" title="%TITLE%">\n%SEL%\n</q>');
user_pref('copyurlplus.menus.18.label','選択している文字列をblockquote要素で引用する');
user_pref('copyurlplus.menus.18.copy','<blockquote cite="%URL%" title="%TITLE%">\n<p>\n%SEL%\n</p>\n</blockquote>');
user_pref('copyurlplus.menus.19.label','はてな記法のリンク作成');
user_pref('copyurlplus.menus.19.copy','[%URL_HTMLIFIED%:title=%TITLE_HTMLIFIED%]');
user_pref('copyurlplus.menus.20.label','選択している文字列からはてな記法のリンク作成');
user_pref('copyurlplus.menus.20.copy','[%URL_HTMLIFIED%:title=%SEL_HTMLIFIED%]');
なお、次に変数の一覧も記載しておきます。
%URL% - the URL of the current document
-
現在のウィンドウあるいはタブのページの URI 。
%URL_HTMLIFIED% - the URL of the current document, in proper HTML format.
-
%URL% の HTMLIFIED バージョン。 バグが存在するため、 Copy URL+ 1.3.2 に現存するバグと対応パッチ (1) を参照してパッチを適用してください。 URI に複数のクエリが含まれ、 & で連結されている時に有用となることでしょう。
%TITLE% - the Title of the current document
-
現在のウィンドウあるいはタブのページの title 要素内の文字列。
%TITLE_HTMLIFIED% - the title of the document, proper HTML format. (FWIW, no HTML tags should appear in the title of a document, but still...)
-
%TITLE% の HTMLIFIED バージョン。 バグが存在するため、 Copy URL+ 1.3.2 に現存するバグと対応パッチ (1) を参照してパッチを適用してください。 「 title 要素の中には、どんな HTML タグも出現することは推奨されないはずだ、しかしまだ......」と書かれてありますが、 & や、またドキュメントの階層を表すための < や > が記述される可能性は充分にあるため、この変数も重要だと思います。
%SEL% - the current selection (empty string if nothing is selected)
-
マウスドラッグで選択している部分の文字列 ( 選択していない場合は空の文字列が返されます ) 。
%SEL_HTMLIFIED% - the current selection transformed to HTML. Useful for inclusion as HTML text.
-
%SEL% の HTMLIFIED バージョン。 バグが存在するため、 Copy URL+ 1.3.2 に現存するバグと対応パッチ (1) を参照してパッチを適用してください。
%RLINK% - the URL of the link you right-clicked on. This might be a little confusing, as URL, TITLE, SEL are still properties of the current document, but you'll find this useful when copying text from blogs or news sites (which usually have a witty summary and a link to the remote site).
-
a 要素によるリンクアンカーを補助クリックした際の、 href 属性の URI 。 Copy URL+ 1.3.2 に現存するバグと対応パッチ (2) によるパッチを適用しないと有効になりません。
%RLINK_HTMLIFIED% - the right-clicked link transformed to HTML.
-
%RLINK% の HTMLIFIED バージョン。 Copy URL+ 1.3.2 に現存するバグと対応パッチ (2) によるパッチを適用しないと有効になりません。 また、バグが存在するため、 Copy URL+ 1.3.2 に現存するバグと対応パッチ (1) を参照してパッチを適用してください。 URI に複数のクエリが含まれ、 & で連結されている時に有用となることでしょう。
%EOL% - End Of Line character and it's dependent on platform (\n for Linux, \r\n for Windows, \r for Macs).
-
行末文字。 どの文字になるかはプラットフォームに依存します。
%UTC_TIME% - the time in UTC format
-
UTC フォーマットによるパソコンの時計を基にした現在時刻。 Sat, 10 Feb 2007 07:15:19 GMT のような形式です。
%LOCAL_TIME% - the time in your local format (depending on browser and OS settings)
-
パソコンの時計を基にした現在時刻。 2007年2月10日 16:15:19 のような形式ですが、これは私の記事作成時の環境によるもので、ブラウザや OS の設定に依存します。
%RLINK_SRC%
-
a 要素によるリンクアンカーを補助クリックした際の、リンクアンカーのソースをそのままコピー。 Copy URL+ 1.3.2 に現存するバグと対応パッチ (2) によるパッチを適用することで使用できるようになります。
たとえば、 MORIYAMA Hiroshi's Diary - Copy URL+を改造してリンクのソースをコピー出來るやうにしてみた内の
次のパッチをCopy URL+ 1.3.2に入ってゐるcopyurlplusOverlay.jsに當てて
という部分のソースをコピーすると、<a href="http://www.mozdev.org/source/browse/~checkout~/copyurlplus/src/copyurlplus/content/copyurlplus/copyurlplusOverlay.js?rev=1.7&content-type=text/plain" title="rev 1.7">copyurlplusOverlay.js</a>のように、 href 属性やアンカーテキストだけでなく、 title 属性も一緒にコピーしてくれているのが分かると思います。

