這支 bookmarklet 只是寫好玩的,在 Firefox 的 Chrome URL 執行,就可以在電腦裡存一個文字檔,真是方便(所以最好別讓來路不明的 bookmarklet 做這種事)。

使用步驟:

  1. 將 bookmarklet 加進書籤 → 匯出 FireGestures 手勢對應
  2. 在網址列輸入 chrome://firegestures/content/prefs.xul 進入 FireGestures 選項。
  3. 點選剛剛加入的書籤,就會出現對話框詢問選項:

    設定輸出選項

  4. 選擇要把文字檔存到哪裡。

    另存新檔(畫面剪裁過)

  5. 完成後檔案就存好了。

    完成訊息

  6. 把文字檔拖曳進 Firefox,看看結果。

    完成畫面(其實是文字檔)

疑難排解:

只有在 FireGestures 1.1.5 測試,日後作者隨便改點東西我可能就爆了,所以有疑難也不會排解啦。


原始碼拆解:

var FGTreeDumper = {

dump: function(){
  
  var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
  var charset = "UTF-8";
  var os = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
  var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);

  fp.init(window, null, fp.modeSave);
  fp.defaultExtension='txt';
  fp.defaultString='FireGesturesTreeDump';
  fp.appendFilters(fp.filterText);
  
  /*
   *  1: 忽略未使用項目
   *  2: 忽略 type 欄位
   *  4: 忽略 flag 欄位
   *  8: 忽略「命令」欄位
  */
  var option = prompt('- 忽略未使用的項目,請選 1\n- 忽略 type 資料,請選 2\n- 忽略 flag 資料(例:firefox3)請選 4\n- 忽略「命令」資料,請選 8\n- 綜合選項,請將各選項數字相加,例如 15\n\n請選擇,或不輸入以使用預設選項:');

  if (fp.show() != fp.returnCancel) {
    if (fp.file.exists()) fp.file.remove(true);
    fos.init(fp.file, 0x02 | 0x08 | 0x20, 0666, 0);
    var data = '';
    var mappings = gMappingsArray;
    mappings.forEach(function(item){
      if( ! ((option==1||option==3||option==5||option==7||option==9||option==11||option==15) && item[kDirectionCol]=='') ) {
        var cell = [];
        item.forEach(function(col,idx){
          if(   ! ((option==2||option==3||option==6||option==7||option==10||option==11||option==14||option==15) && idx==kTypeCol)
             && ! ((option==4||option==5||option==6||option==7||option==12||option==13||option==14||option==15) && idx==kFlagsCol)
             && ! ((option==8||option==9||option==10||option==11||option==12||option==13||option==14||option==15) && idx==kCommandCol)
            ) {
            cell.push(col);
          }
        });
        data += cell.join('\t') + '\n';
      }
    });
    os.init(fos, charset, 0, 0x0000);
    os.writeString(data);
    os.close();
    fos.close();
    alert('已完成。');
  }
}

};

FGTreeDumper.dump();