試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

FirefoxのLink And Forminfo拡張でリンク一覧から項目をダブルクリックしたときにそのURLを開かないようにする

バージョン3からのFirefoxコンテキストメニューから「ページの情報を表示」を選択したときにリンク一覧が出なくなっているため、それを復活させる拡張が幾つか存在する。
以前「Mozilla Firefox 3.0 rc1の覚え書き」で「pageinfo+link」という拡張をインストールしたのだが、うっかりリスト上の項目を(シングルでなく)ダブルクリックしてしまうことにより、開くつもりのないURLを開いてしまうことがあり、「Firefoxのpageinfo_link拡張のリンクダブルクリックを無効化」でこの挙動を無効にした。
今回、リンク一覧と同様に消えていたフォーム状態の表示についても復活させることのできる「Link And Forminfo」という拡張を見つけたのでインストールしたのだが、こちらも一覧から項目をダブルクリックするとそのURLが開かれるようになっていて自分には都合が悪いため、この動作を無効化しておくことにした。

  1. 流れ
  2. 修正自動化スクリプト

流れ

Firefoxのpageinfo_link拡張のリンクダブルクリックを無効化」では拡張がインストールされた後で作業を行ったが、.xpiファイルに対して作業を行ってからそれをインストールしたほうが楽で再利用もできるため、今回は.xpiファイルを修正する形で作業を行った。

  1. .xpiファイルをZIPファイルとして展開し、更に中のchrome/LinkAndForminfo.jarを同様に展開
  2. 中のcontent/LinkAndForminfo/LinkAndForminfo.xulにある該当部分の処理を削除*1
  3. .jarファイルにまとめて元のファイルを置き換える
  4. 全体の.xpiファイルもまとめる

修正自動化スクリプト

今回、拡張のダウンロードから修正、ファイルに書き出すまでの作業を全て自動化するシェルスクリプトを作成した。
実行するには以下のコマンドが全てインストールされている必要がある。

  • wget
  • unzip
  • zip
  • patch
  • zenity

[任意]ファイル名: linkandforminfo-1.0.5-disable-doubleclick-patch.sh

#! /bin/bash

# Link And Forminfoのリストダブルクリック無効化バージョンの.xpiファイルを生成
# 必要なコマンド: wget,unzip,zip,patch,zenity

ADDON_URL=https://addons.mozilla.org/ja/firefox/downloads/latest/6939/addon-6939-latest.xpi
PATCH_NAME=linkandforminfo-1.0.5-disable_doubleclick.patch
cd /tmp
TEMPDIR=$(mktemp -d linkandforminfo-disable-doubleclick-patch.XXXXXXXXXXXX)
cd ${TEMPDIR}

die()
{
  zenity --error --text "${1}"
  cd - > /dev/null
  rm ${TEMPDIR} -fr
  exit 1
}

wget -O orig.xpi ${ADDON_URL} || die "Download failed"
unzip orig.xpi || die "unzip failed"
cat <<EOF > ${PATCH_NAME}
diff -ur content.orig/LinkAndForminfo/LinkAndForminfo.xul content/LinkAndForminfo/LinkAndForminfo.xul
--- LinkAndForminfo-1.0.5.orig/content/LinkAndForminfo/LinkAndForminfo.xul
+++ LinkAndForminfo-1.0.5.new/content/LinkAndForminfo/LinkAndForminfo.xul
@@ -501,38 +501,6 @@
 
   dragService.invokeDragSession(event.target, transArray, null, dragService.DRAGDROP_ACTION_NONE);
 };
-window.onDoubleclickLink = function onDoubleclickLink(event) {
-  if (event.originalTarget.localName != "treechildren")
-  {
-		return;
-	}
-
-  var tree = event.target;
-  if (!("treeBoxObject" in tree))
-  {
-    tree = tree.parentNode;
-  }
-
-  var row = {}, col = {}, elt = {};
-  tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, elt);
-
-  if (row.value == -1)
-  { 
-    return;
-  }
-
-  var column = tree.columns.getNamedColumn('link-address');
-  var url = tree.treeBoxObject.view.getCellText(row.value, column);
-  var aios_inSidebar = (top.document.getElementById('sidebar-box')) ? true : false;
-	if(aios_inSidebar){
-    aios_WIN.gBrowser.addTab(url);
-	}else{
-	  if ("gBrowser" in window.opener)
-	  {
-	    window.opener.gBrowser.addTab(url);
-	  }
-  }
-};
 //******** Other Misc Stuff
 // Modified from the Links Panel v2.3, http://segment7.net/mozilla/links/links.html
 // parse a node to extract the contents of the node
@@ -729,7 +697,7 @@
       </vbox>
 	    <!-- Link info -->
 	    <vbox id="linktreePanel">
-	        <tree id="linktree" flex="1" ondraggesture="window.onBeginLinkDrag(event,'link-address','link-name')" contextmenu="picontext" ondblclick="window.onDoubleclickLink(event);">
+	        <tree id="linktree" flex="1" ondraggesture="window.onBeginLinkDrag(event,'link-address','link-name')" contextmenu="picontext">
 	          <treecols>
 	            <treecol sortSeparators="true" persist="hidden width" flex="5"
 	                         width="5" id="link-name"     label="&linkName;"/>
EOF
unzip chrome/LinkAndForminfo.jar || die "unzip failed"
patch -p1 < ${PATCH_NAME} || die "patch failed"
find content locale skin -print0 | xargs -0 zip -9 chrome/LinkAndForminfo.jar -@
find chrome* install.rdf license.txt -print0 | xargs -0 zip -9 out.xpi -@
OUTFILE=$(zenity --file-selection --save --confirm-overwrite --title "Output file" --filename ${HOME}/)
if [ ${?} -eq 0 ]; then
  cp out.xpi ${OUTFILE} || zenity --error --text "copy failed"
  zenity --info
fi
cd - > /dev/null
rm ${TEMPDIR} -fr

使用したバージョン:

  • Link And Forminfo 1.0.5

*1:具体的な修正箇所は後述の修正自動化スクリプトの中に書かれているパッチを参照