沒穿方服

索引

顯示╱隱藏內文

SiteLauncher 1.6.0

新完成圖

才寫完 1.5 自訂 就出了 1.6,更新資訊見官網

  1. 更快、更省(記憶體)。
  2. 所有 shortcut 都能自訂圖示。
  3. 可新增工具列按鈕「Launch」,會在按鈕下方開 Launcher 畫面。
  4. 加強 shortcut 分組控制,例如垂直顯示(原為水平排列,更新後還得自己調回來……)
  5. 可選擇將新分頁開在目前分頁旁邊。
  6. 改善選項視窗對小螢幕的支援。
  7. 其他改進與修正。

舊文FireGestures 自訂滑鼠手勢的命令(不意外地)失效了,需改為:

sitelauncherLauncher.mode = sitelauncherLauncher.s_p.launcher;
sitelauncherLauncher.show();

新增這個腳本手勢 → SiteLauncher

2009-11-06: 與套件作者聯繫,他說改為下面這個比較好,以後也不會變來變去:

sitelauncherLauncher.invokeLauncherMode();

新增這個腳本手勢 → SiteLauncher


或者這個,跟「Launch」按鈕效果一樣,不保證開在畫面中央:

sitelauncherLauncher.invokeLauncherFromButton();

新增這個腳本手勢 → SiteLauncher (FromButton)


另外若啟用 shortcut 分組,會出現無法刪除的預設組(Main group)把 1.5.0 無分組的 shortcut 擺在裡面;如果 1.5.0 使用者將這些 shortcut 擺在最前,就會因為多了分組標題,而在 Launcher 上方多出一塊空間。

可藉 userChrome.css 隱藏之,第二行是用來縮小組間間距:

row.sitelauncherGroupRow:first-child {display:none;}
row.sitelauncherGroupRow hbox {padding:4px !important; margin:0 !important;}
自訂完成的樣子。

Firefox 套件 SiteLauncher 協助你快速前往常用網站,在「目前分頁」浮現一個捷徑列表,比起快速撥號(Speed Dial)系列在「新分頁」開啟時顯示,總是快上一些。

衝著這點效率裝來,卻有勉強遷就的感覺;一來我沒有使用熱鍵啟動的習慣,二來也不愛它的設定介面(至少字體太小啦),試著調適一番,終於得心應手。


2009-11-07:因應 1.6.0 版釋出,部分自訂也要修改,詳見 SiteLauncher 1.6.0

手不在鍵盤上,用滑鼠手勢開啦

原設計比較著重使用鍵盤,按個鍵就直接開站。1.5.0 版因應用戶要求,修改為不必每站設鍵,但要叫出 Launcher 畫面還是得用 key 的,預設還是 Ctrl + Space 呢…… 還是用 FireGestures 自訂滑鼠手勢吧:

新增這個腳本手勢 → SiteLauncher

sitelauncherLauncher.mode = sitelauncherLauncher.m.aT;
sitelauncherLauncher.ab();

微調樣式

userChrome.css 對 Launcher 面板主要做兩件事:字調大、隱藏網站快速鍵顯示(因為沒設熱鍵的話,那格是空的):

#sitelauncherBox {font:18px Georgia,'中文字型',sans-serif !important;}
#sitelauncherBox label.sitelauncherKeyLabel {display:none !important;}
#sitelauncherBox #sitelauncherSites hbox {padding:0; cursor:pointer;}
#sitelauncherBox #sitelauncherSites hbox:hover label {color:#fc0;}
#sitelauncherSites label {cursor:pointer !important; opacity:0.9 !important;}
SiteLauncher 格線構造。

順便附圖看看 Launcher 構造,用的是以下規則:

#sitelauncherBoxRows row {border:1px solid red;}
#sitelauncherBoxRows row>hbox {border:1px solid white;}
#sitelauncherBoxRows row>*>* {border:1px solid blue;}
#sitelauncherBoxColumns column {border:1px solid green;}

可以從別的網站抓 favicon

Bookmarklet 可以自設圖示

這是本來就有的功能,只要捷徑以 javascript: 開頭,就會蹦出一個輸入框,看要抓誰家的 favicon 來用。

不過一般網站、Chrome URL 還是不能換圖示真無奈。


[陽春] 由 Fast Dial、Speed Dial 轉換書籤

Fast DialSpeed Dial 分別可匯出書籤為 ***.json ***.speeddial(文字檔),但 SiteLauncher 吃的是 XML…… 納悶是否有 Yahoo! Pipes 之類的服務,可以簡單做個轉換器,讓使用者上傳轉檔啊?

找無辦法又不願手工,退而做了個陽春轉換器,只能轉出網站的 URL 和名稱:

捷徑轉換



<Script Inside>


避免找不到匯出功能,參考擷圖:

Fast Dial 你得在書籤資料夾上按右鍵 Speed Dial 選項視窗裡就有

Bye Bye 舊手機

說要換,也拖延了不短的日子,我懷疑手機世界嗎?
如今改用親友綁約配的,又得意了起來。


舊機較厚些。

Nokia 2650
(obsolete)
練這蛻變大法
怕有半年了
且由他藏龍去

偶然幻想身邊小物是昆蟲類心驚驚。 諾忌牙、諾忌牙啟動了K皮夾模式!(超暴力激鬥) 冰淇淋的顏色。 銜環設計,材料為橡皮筋。
Chrome, telnet 網址也有圖示。

網站加入書籤會有 favicon,不過 bookmarklet(網址為 javascript: 開頭)或本地端檔案(網址為 file: 開頭)沒那好處,只能顯示預設的圖了。

修改辦法是靠 userChrome.css,搜尋發現相關的碼隨 Firefox 版本偶有變動,以下為 Fx 3.5.3 適用規則:

.bookmark-item[scheme="javascript"] {list-style-image:url("http://userscripts.org/images/script_icon.png") !important;}
.bookmark-item[scheme="file"] {list-style-image:url("http://127.0.0.1/favicon_green.ico") !important;}
.bookmark-item[scheme="chrome"] {list-style-image:url("http://www.spreadfirefox.com/sites/all/themes/sfxBB/img/favicon.png") !important;}
.bookmark-item[scheme="telnet"] {list-style-image:url("http://pcman.openfoundry.org/favicon.ico") !important;}

其中圖示是按 scheme 分辨,例如第四行會對應 telnet://ptt.cc 而跑出 PCMan 的圖(直連人家網站,僅為示範用啊)。

原版如前文,縮小的感覺真好,如今再改得稍微親切一點: 1)不在 chrome url 的話會提示, 2)顯示 sqlite 檔案前後大小。

若不在 chrome url 內,會提示你問題。 指定次數。 現在會算出檔案大小了。 動手前,還是要問一下。 縮減比率,看了開心。

將 bookmarklet 加入書籤 → Places Cleaner


原始碼拆開如下:

// 原創想法&程式碼來自 Irvin Chen 的 PlacesCleaner 收藏庫清潔工
// https://addons.mozilla.org/firefox/addon/13860/  (以 MPL 1.1 釋出)
// http://irvin.sto.tw/2009/08/firefox-3.html
// 請於 chrome url (例: chrome://browser/content/places/places.xul ) 中執行
var PlacesCleaner = {

clean: function(){

  // 測試是否有 XPConnect 權限
  if( ! netscape.security.PrivilegeManager.isPrivilegeEnabled('UniversalXPConnect') ) {
    alert('操作失敗:\n請於 chrome url 中執行這支 bookmarklet。\n例: chrome://browser/content/places/places.xul');
    return;
  }

  var PIPlacesDatabase = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection;
  var ProfD = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
  var sqliteFile = ProfD.clone();
      sqliteFile.append("places.sqlite");
  var originalSize = sqliteFile.fileSize;

  var intViewTime = parseInt(prompt('清除瀏覽次數不超過「幾次」的歷史紀錄?'),10);
  if(intViewTime+''=='NaN') { alert('輸入值非數字,已停止操作。'); return; }

  if(confirm('目前 places.sqlite 檔案大小為 ' + Math.round(originalSize/10.24)/100 + ' KB。\n若要備份,請選擇儲存檔案的位置:')) {
    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
    fp.init(window, null, fp.modeSave);
    fp.defaultString='places';
    fp.defaultExtension='sqlite';
    fp.appendFilter(".sqlite","*.sqlite");
    if (fp.show() != fp.returnCancel) {
      if (fp.file.exists()) fp.file.remove(true);

      try {
        sqliteFile.copyTo( fp.file.parent, fp.file.leafName );
      }
      catch(e) {
        alert('操作失敗:無法儲存備份檔案。');
        return;
      }
    }
  }

  if(!confirm('確定要開始清除了嗎?\n也許會花上一點時間……')) return;
  try {
    // 取自 https://addons.mozilla.org/firefox/addon/13860/  原始碼授權條款: MPL 1.1
    PIPlacesDatabase.executeSimpleSQL("DELETE FROM moz_historyvisits WHERE place_id IN (SELECT id FROM moz_places WHERE visit_count <=" + intViewTime + ");");
    PIPlacesDatabase.executeSimpleSQL("DELETE FROM moz_places WHERE (visit_count <=" + intViewTime + " AND hidden <> 1 AND id NOT IN (SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks));");
    PIPlacesDatabase.executeSimpleSQL("DELETE FROM moz_inputhistory WHERE place_id NOT IN (SELECT id FROM moz_places);");
    PIPlacesDatabase.executeSimpleSQL("DELETE FROM moz_favicons WHERE id NOT IN (SELECT favicon_id FROM moz_places);");
    PIPlacesDatabase.executeSimpleSQL("DELETE FROM moz_annos WHERE anno_attribute_id IN (SELECT id FROM moz_anno_attributes WHERE name = 'google-toolbar/thumbnail-score' OR name = 'google-toolbar/thumbnail');");
    PIPlacesDatabase.executeSimpleSQL("VACUUM");
  }
  catch(e) {
    alert('操作失敗:清除中出了狀況……');
    alert('Places Cleaner bookmarklet 錯誤訊息:\n '+e);
    return;
  }

  // 重新取得 fileSize
  sqliteFile = ProfD.clone();
  sqliteFile.append("places.sqlite");

  var ratio = Math.round( (originalSize-sqliteFile.fileSize)*10000/originalSize )/100;
  alert('清除完畢。\n\n檔案大小:' + Math.round(originalSize/10.24)/100 + ' KB → ' + Math.round(sqliteFile.fileSize/10.24)/100 + ' KB(已縮減 ' + ratio  + ' %)');

}

};

PlacesCleaner.clean();