之前有在用一套 Firefox extension,叫做 Vacuum Places Improved。
想說,只是用裡面的一小部份,應該自己改一下就可以放進 UserChrome 裡。
重點是下個 VACUUM 的 SQL command。如下所示:
Components.classes["@mozilla.org/browser/nav-history-service;1"]
.getService(Components.interfaces.nsPIPlacesDatabase)
.DBConnection.executeSimpleSQL("VACUUM");");
而整個原始碼就像下面這樣,
生個 menuitem,來方便使用。
(function() {
var newItem = document.createElement("menuitem");
newItem.setAttribute("label", "vacuum");
newItem.setAttribute("oncommand", "Components.classes[\"@mozilla.org/browser/nav-history-service;1\"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL(\"VACUUM\");");
var m = document.getElementById("userChrome-Menu");
if (!m) {
var openLink = document.getElementById("context-openlink");
m = document.createElement("menu");
m.setAttribute("id", "userChrome-Menu");
m.setAttribute("label", "userChrome");
openLink.parentNode.appendChild(m);
}
var mpopup = document.getElementById("userChrome-MenuPopup");
if (!mpopup) {
mpopup = document.createElement("menupopup");
mpopup.setAttribute("id", "userChrome-MenuPopup");
m.appendChild(mpopup);
}
mpopup.appendChild(newItem);
})();
原本我是使用Tree Style Tabs這個extension,
但是有時候會發生Tabs會全擠在一起的Bug,
我也找不出什麼原因會導致這個問題。
不過,因為我只是要讓我新增Tab時,
可以放在目前Tab的右方,
而不是append到最後一個。
所以自己就用UserChrome抄了一小段Code來處理這個。
(function() {
function UcNewAddTab(aURI, aReferrerURI, aCharset, aPostData, aOwner, aAllowThirdPartyFixup)
{
var newPos = gBrowser.mCurrentTab._tPos + 1;
var newTab = gBrowser.origAddTab(
aURI, aReferrerURI, aCharset, aPostData, aOwner, aAllowThirdPartyFixup
);
if ('undefined'==typeof aURI) return newTab;
gBrowser.moveTabTo( newTab, newPos);
gBrowser.selectedTab = newTab;
return newTab;
}
function UcAddTabOnLoad()
{
window.addEventListener('unload', UcAddTabOnUnLoad, false);
if ('undefined'==typeof gBrowser) return;
gBrowser.origAddTab=gBrowser.addTab;
gBrowser.addTab=UcNewAddTab;
}
function UcAddTabOnUnLoad()
{
gBrowser.addTab=gBrowser.origAddTab;
window.removeEventListener('unload', UcAddTabOnUnLoad, false);
}
if ('undefined' != typeof gBrowser) {
gBrowser.origAddTab=gBrowser.addTab;
gBrowser.addTab=UcNewAddTab;
}
})();
之前就知道舊版的Kerio Personal firewall 2.1.5,
在某些情況下,會導致IntelR PROSet/Wireless Event Log這個Service crash。
就會出現svchost crash的視窗。
之前都是手動避過這個問題,
當我還沒key in帳號密碼,
靜靜等待Kerio Personal firewall啟動的視窗,
等到Kerio Personal firewall先啟動之後,
再login,通常就不會有問題。
但是因為這段時間要等蠻久的,大概2-3分鐘,
實在是沒那個耐性。
才試著去更改fwdrv (Kerio 的 firewall driver) 的DependOnService,
結果是很簡單的在fwdrv的DependOnService加上IntelR PROSet/Wireless Event Log。
測試到目前為止,都沒有問題。 :)
最近有需要用到wildcard,
所以就來看一下wildcard的suport。
但是往往是support unix版的wildcard,
或者應該說M$所 support 的wildcard 比較奇怪。
因為當你用 "*.*" 比對時,
它會不管你有沒有".",
直接當成 "*" 在比對,
例如:
"t*.*" -> 要找 prefix 是 "t"
在unix下,通常會比對到的是prefix 是 t ,
而且中間一定要有一個 "." 。
在windows則只需要prefix是 "t" 就會比對到了。
在codeproject上,
我改了一點點,
讓這個 wildcard support 可以符合 M$ 的 wildcard 。
原始碼如下:
#include <stdio.h>
#include <stdlib.h>
int wildcmp(const char *wild, const char *string) {
// Written by Jack Handy - jakkhandy@hotmail.com
const char *cp = NULL, *mp = NULL;
while ((*string) && (*wild != '*')) {
if ((*wild != *string) && (*wild != '?')) {
return 0;
}
wild++;
string++;
}
while (*string) {
if (*wild == '*') {
if (!*++wild) {
return 1;
}
mp = wild;
cp = string+1;
} else if ((*wild == *string) || (*wild == '?')) {
wild++;
string++;
} else {
wild = mp;
string = cp++;
}
}
// modified by porpoise
if (mp == wild && *wild == '.' && *(wild+1) == '*') {
do {
wild+=2;
} while (*wild == '.' && *(wild+1) == '*');
}
while (*wild == '*') {
wild++;
}
return !*wild;
}
int main()
{
char *wild = "w*.*.*.*.*";
char *string ="wtest";
int rc;
rc = wildcmp(wild, string);
printf("wildcmp(%s,%s)=%d\n",wild, string,rc);
return 0;
}

網頁載入中,請稍候...

