沒穿方服

索引

顯示╱隱藏內文

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 Dial 和 Speed 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();