不同站台使用不同設定值,實作方式

120 views
Skip to first unread message

PCMan

unread,
Nov 28, 2009, 8:18:33 PM11/28/09
to pcmanfx
資料量較大,可能需要額外使用自己的設定檔儲存?
可以用 bookmark item 的 id 作 key

[rdf:#$XXXXX]
cols=80
rows=24
...

當使用者直接在網址列 key in telnet:// 的時候,
尋找現有的 bookmarks 裡面有沒有儲存過這個網址
若有且只有一筆,自動套用該筆設定
若有多筆,跳清單讓使用者選擇要用哪個書籤項目

從書籤 invoke 的,就自動按照書籤項目的 id 载入對應的設定

bootleq

unread,
Nov 28, 2009, 8:36:27 PM11/28/09
to pcm...@googlegroups.com
不得已的話還是要存自己的設定檔,比對網址應該可用 Firefox 的 places 服務來做
https://developer.mozilla.org/en/Places

大概會有哪些設定值?
  • 自動重連
  • 自動回訊
  • 防閒置
  • 貼上文字自動換行
  • 貼上彩色文字轉換 ESC
  • 編碼轉換
  • 偵測雙位元組字元
另外我想 Firefox 可能處理的設定,就不要在 pcman 做(前提是維持兩方的操作習慣)。
例如 FireBBS 直接使用 Fx 的自動登入就很理想(不過實際上有碰到問題,我會再發一篇說明)

Littlebtc

unread,
Dec 8, 2009, 2:41:44 PM12/8/09
to pcmanfx
I will try to make an API about this.

On 11月29日, 上午9時36分, bootleq <boot...@gmail.com> wrote:
> 不得已的話還是要存自己的設定檔,比對網址應該可用 Firefox 的 places 服務來做https://developer.mozilla.org/en/Places
>
> 大概會有哪些設定值?
>

>    - 自動重連
>    - 自動回訊
>    - 防閒置
>    - 貼上文字自動換行
>    - 貼上彩色文字轉換 ESC
>    - 編碼轉換
>    - 偵測雙位元組字元


>
> 另外我想 Firefox 可能處理的設定,就不要在 pcman 做(前提是維持兩方的操作習慣)。
> 例如 FireBBS 直接使用 Fx 的自動登入就很理想(不過實際上有碰到問題,我會再發一篇說明)
>

> 2009/11/29 PCMan <pcman...@gmail.com>

Message has been deleted

PCMan

unread,
Sep 30, 2010, 12:36:01 PM9/30/10
to Hsiao-Ting Yu [:littlebtc], u881831, pcm...@googlegroups.com
Perfect!!
這完全就是我們需要的東西啊! (大叫!)
為什麼我找很久沒有查到這份文件?
你從哪裡找到的?

2010/9/30 Hsiao-Ting Yu [:littlebtc] <sst.d...@gmail.com>:
> How about Content Preferences?
> https://developer.mozilla.org/en/Using_content_preferences
>
> Fx3開始提供的API,實作方式是SQLite。
>
> 2010/9/30 u881831 <u88...@hotmail.com>
>>
>> 下面是之前對話內容的節錄,
>> 因為之前我不會用google groups 其他人沒有參予討論,
>> 所以發表出來希望其他人也能夠一起討論,集思廣益。
>>
>>
>> 不同站台不同設定的幾個候選方案:
>> Preferences System
>> pref("extensions.pcmanfx.sites.ptt.cc.encoding", "big5");
>> 不同的 host 對應到不同的 preference branch
>>
>> 這個實作方式應該是最簡單方便的方法,
>> 只要把 config key 和視窗元件關聯,他就會自己更新數值和顯示,
>> 這跟Fx整合也比較好,
>> 不過可能會寫太多資料進去,(站台多的時候)
>> 不知道這樣會不會有效能問題或是其他限制?
>>
>> 寫法大概是:
>> 先把預設的preference元件寫到xul 裡,
>> <preferences>
>>  <preference id="default_pref1" name="pref.default.name" type="bool"/
>> >
>>  ...
>> </preferences>
>> <checkbox id="check1" preference="default_pref1"
>> label="&check1.label;"/>
>> 再用javascript把所有站台設定載入成新的preference元件,
>> (直接複製預設設定不用每次增加偏好設定就要修改)
>> 最後動態改變xul 內元件(checkbox)所對應到的preference元件,
>> 至於主程式就用observer和偏好設定互動,
>> 這樣應該也可以完成不同站台不同設定。
>> 我想options.js應該可以弄到新增偏好設定時不需要修改,
>> (每增加一個設定就要在options.js內多寫幾行)
>> 只要在xul 新增元件以及prefhandler.js新增處理函式就可以了。
>>
>>
>>
>> 用 INI 設定檔儲存資料
>> branch: pref_test
>> ini file parser: chrome/content/inifile.js
>> 設定檔是profile 目錄下的pcmanfx.ini ,
>>
>> 站台設定基本上和書籤綁在一起,
>> 目前要刪除書籤才能刪掉那個站台的偏好設定。
>> 不過一個潛在的問題是,如果兩個書籤有同一個URL,
>> 用URL尋找書籤只會對應到第一個書籤項目,
>> 這樣的效果,其實跟不經過書籤,只用 url 來對應設定值是完全一樣的,
>> 所以同URL,要使用不同的設定組合,存在不同書籤,
>> 在這樣的實作方式做不出來,
>> 除非我們可以確切知道目前開啟的連線是來自哪一個書籤。
>>
>> 偏好設定視窗左方列出已有設定的站台,
>> 切換站台時右方的設定值會跟著變動。
>>
>> 建立偏好設定的功能的話,
>> 目前是直接加在主畫面的右鍵選單,
>> 比較理想的做法可能是在偏好視窗列出所有可以新增的書籤或是直接overlay火狐的書籤管理介面,
>> 本來書籤設定的畫面就有 URL 和名稱等項目,如果我們加上一個BBS專用的分頁,
>> 在裡面可以改站台設定,那就可以完美整合了,只是不知道怎樣實作。
>>
>> 至於主程式和選項的互動,
>> 在不同平台上這部份的行為是不一樣的,
>> Windows 上應該是按下確定才套用,Linux 是一修改立即套用。
>> 所以才應該使用 firefox 的 preference system,因為可以用 observer 的方式
>> 在變更的時候收到通知,就可以套用那個設定,我們不需要管什麼時候要立即生效,
>> 反正收到通知的時候就是該生效的時候,要不要立即是 Firefox 判斷的。
>> 使用自訂 ini 檔的缺點是無法跟其他套件互動,其他套件也無法監測我們的設定改變。
>>
>>
>>
>> 拿 javascript 檔當設定檔,
>> 裡面的內容就像是 jscon:
>> var settings = {
>>  rows = 24,
>>  cols = 80,
>>  encoding = 'big5';
>> };
>>
>>
>>
>> 使用 SQLite提供的storage service,
>> 不過這樣會把問題過度複雜化。

> --
> Littlebtc / 笨笨的小B / 小犬 (Xiaoquan)
> http://blog.littleb.tc
>

Message has been deleted

PCMan

unread,
Oct 1, 2010, 8:54:34 PM10/1/10
to pcm...@googlegroups.com
但是如果他不能夠跟firefox做很好的整合的話,那其實沒有比我們用 ini 檔要好...
另外這裡提供使用 firefox preference system 來儲存的一個方式,會比原來的乾淨

pref("extensions.pcmanfx.site1", "ptt.cc");
pref("extensions.pcmanfx.site1.encoding", "big5");
pref("extensions.pcmanfx.site1.font", "sans");

pref("extensions.pcmanfx.site2", "$a_bookmark_id"); // bookmark id
pref("extensions.pcmanfx.site2.encoding", "big5");
pref("extensions.pcmanfx.site2.font", "sans");

pref("extensions.pcmanfx.site3", "bbs.gamer.com.tw");
pref("extensions.pcmanfx.site3.encoding", "big5");
pref("extensions.pcmanfx.site3.anti_idle", true);

或許效率也會好些?(但是不是肉眼可以察覺得到的差距)
只是這樣xul好像也沒辦法自動關聯,除非動態產生?

2010/10/1 u881831 hotmail.com <u88...@hotmail.com>:
>
> 用這個方法的話似乎比較難和書籤整合,
> 不過這部分原本就不完整我想暫時先擱置可能比較好,
> 不和書籤整合的話可能就要在設定視窗做一個移除站台設定的按鈕,
> 事實上這樣的程式架構可能比較簡單明瞭,
> 另外設定視窗的元件可能就要自己用javascript做關聯,
> 沒有辦法像Preferences System那麼方便,
> 不過我想對不同站台不同設定這種架構而言,
> 大概沒有直接關聯的方法,
> 如果這樣可以的話就用這種方法試看看。
>
> 如果沒有人要做的話,
> 我就先試著寫看看。
>
>
> ----------------------------------------
>> Date: Fri, 1 Oct 2010 00:36:01 +0800
>> Subject: [pcmanfx] Re: 不同站台使用不同設定值,實作方式
>> From: pcma...@gmail.com
>> To: sst.d...@gmail.com
>> CC: u88...@hotmail.com; pcm...@googlegroups.com


>>
>> Perfect!!
>> 這完全就是我們需要的東西啊! (大叫!)
>> 為什麼我找很久沒有查到這份文件?
>> 你從哪裡找到的?
>>

>> 2010/9/30 Hsiao-Ting Yu [:littlebtc] :


>>> How about Content Preferences?
>>> https://developer.mozilla.org/en/Using_content_preferences
>>>
>>> Fx3開始提供的API,實作方式是SQLite。
>>>
>>> 2010/9/30 u881831
>>>>

>>>> 下面是之前對話內容的節錄,
>>>> 因為之前我不會用google groups 其他人沒有參予討論,
>>>> 所以發表出來希望其他人也能夠一起討論,集思廣益。
>>>>
>>>>
>>>> 不同站台不同設定的幾個候選方案:
>>>> Preferences System
>>>> pref("extensions.pcmanfx.sites.ptt.cc.encoding", "big5");
>>>> 不同的 host 對應到不同的 preference branch
>>>>
>>>> 這個實作方式應該是最簡單方便的方法,
>>>> 只要把 config key 和視窗元件關聯,他就會自己更新數值和顯示,
>>>> 這跟Fx整合也比較好,
>>>> 不過可能會寫太多資料進去,(站台多的時候)
>>>> 不知道這樣會不會有效能問題或是其他限制?
>>>>
>>>> 寫法大概是:
>>>> 先把預設的preference元件寫到xul 裡,
>>>>
>>>>
>>>>>

>>>> ...

PCMan

unread,
Oct 1, 2010, 8:56:00 PM10/1/10
to pcm...@googlegroups.com
更正一下,這樣好像才對
pref("extensions.pcmanfx.sites.ptt.cc", "site1");

pref("extensions.pcmanfx.site1.encoding", "big5");
pref("extensions.pcmanfx.site1.font", "sans");

2010/10/2 PCMan <pcma...@gmail.com>:

Hemiola SUN

unread,
Oct 2, 2010, 5:15:53 AM10/2/10
to pcmanfx
如果用 json 格式呢?像這樣:

pref("extensins.pcmanfx.sites.ptt.cc",
'[{"encoding":"big5","font":"sans"}]');

這樣同一個站臺的所有設定都寫在同一個 pref 值裏面,避免過多 pref 值造成的雜亂冗長。

PCMan

unread,
Oct 2, 2010, 6:29:42 AM10/2/10
to pcm...@googlegroups.com
如果新版本增加新設定值的時候,這種格式會不會造成無法順利升級?
又 preference 的 default 處理可能會有點問題
因為無法針對個別設定值分開進行預設值套用
而會變成所有設定值套用一整個 javascript 物件

2010/10/2 Hemiola SUN <scy....@gmail.com>:

Hemiola SUN

unread,
Oct 2, 2010, 12:00:56 PM10/2/10
to pcmanfx
實作上其實不會有什麼問題,最底下的 html 是一個例子,跑出來的結果會是:

site : {"id":"1","name":"abc","font":"arial","width":80,"height":24}
site : {"id":"2","name":"123","font":"monospace","width":"72","height":
24}

好處是:
一、可以把所有站台的資料,用 json 格式寫在一個 pref 值裏面。
二、設定值叫出來後,直接變成 array,array 裏每一筆就是一個站台資料的 object。
三、pref 裏沒有設定的,會自動套用 Site 裏的預設值,不用擔心預設值的問題。
四、所以如果新版增加設定值,只要修改 Site 就可以了。

我還不太懂各位討論的 preference 會碰到什麼狀況,但我設想不成問題。


<html xml:lang="zh-tw" xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>test</title>


<script type="text/javascript">

function Site (setting) {
this.id = setting.id;
this.name = setting.name || ""; // setting 裏沒有就套預設值 ""
this.font = setting.font || "monospace"; // 預設值 "monospace"
this.width = setting.width || 80; // 預設值 80
this.height = setting.height || 24; // 預設值 24
};

function init () {
var pref = '[{"id":"1","name":"abc","font":"arial"},
{"id":"2","name":"123","width":"72"}]';
var sites = JSON.parse(pref);

Array.forEach( sites, function (site) {
var temp = new Site(site);
output(temp);
});
}

function output (site) {
document.write("<p>site : "+ JSON.stringify(site)+"<p>");
}
</script>

</head>

<body onload="init();">
</body>
</html>

Hemiola SUN

unread,
Oct 2, 2010, 12:45:16 PM10/2/10
to pcmanfx
ok,我大概懂你們在說什麼了!

我覺得問題分兩邊來看,一邊是程式實際如何載入和處理各站台的設定值,一邊是 user 的站台設定界面。

就第一點來說,用 json 在程式碼上應該是簡單多了。也不用去管哪個站台用哪個 branch,用 array 就好。

至於設定界面,雖然沒有辦法每個站台指定一個 preference branch,不過站台設定本來就是動態的,有多少站台是看 user 的需要自
己決定,所以不論如何在開啟設定界面載入設定值時,或是關閉界面儲存設定值時,都還是要用 javascript 去動態生成。用
preference branch 還是用 json,並沒有什麼差別。

至於這個站台的 json 資料,可以存在一個 pref 值裏(比方 extensions.pcmanfx.sites),或是 profile
底下一個叫 pcmanfx.json 的檔案,方便使用者備份。

PCMan

unread,
Oct 2, 2010, 4:37:24 PM10/2/10
to pcm...@googlegroups.com
厲害!
我自己是 C/C++ programmer,所以一直忍不住用 C 的方法套在 js
第一個想法就是 ini 格式的設定檔案,也實做了 parser
不過 JSON 的確是很有趣的方式!
雖然我不是很懂,但是這看起來很厲害,而且不用寫任何 parser :-)

2010/10/3 Hemiola SUN <scy....@gmail.com>:

Hemiola SUN

unread,
Oct 2, 2010, 9:08:18 PM10/2/10
to pcmanfx
我提出一個新的解決方案,以下這兩篇值得一讀:

https://developer.mozilla.org/en/Using_content_preferences
https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContentPrefService

這個方法「看起來」和「程式寫起來」,都與 prefs 十分雷同,但並不是一般的 prefs (從 about:config 看不到),而是
site 的 prefs,資料存入 profile 中的 content-prefs.sqlite。現在不同站台的頁面縮放設定,就是用這種方法
存到這個檔案裏。

我覺得這個是「正統」的解決之道,而且可以很容易地用林志豪網友提供的方案來實作。說「正統」,是因為 Firefox 本身就提供這個功能給我們了,
讓我們可以根據 site 做各種不同的設定。當然我們並不一定就因此得用這種方式。

u881831

unread,
Nov 5, 2010, 5:45:50 AM11/5/10
to pcmanfx
我是覺得用content preferences 似乎比較簡潔,
使用preferences system實作不同站台不同設定還是要自己寫程式碼,
程式寫起來可能會比現在的ini 方式還要複雜。
至於書籤功能的話Fx4 似乎開始支援用字串當group name,
https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContentPrefService#getPre()
這樣應該就可以像現在的ini 方式跟firefox做整合。

我稍微整理了一下偏好設定的架構,
不管是用content preferences 還是JSON INI應該都比較好處理,
現在是有確定要用什麼方式嗎?

PCMan

unread,
Nov 5, 2010, 8:38:29 AM11/5/10
to pcm...@googlegroups.com
那我投 content preference 一票
我個人是支持盡量使用 Fx 內建的機制來處裡問題
不過這樣做的缺點就是,如果接下來要移植到 chrome
就會增加難度

移植到 chrome 是可能的,只是 socket connection 部份需要
使用 NPAPI plugin 來處理,得寫點 c++
所以沒辦法完全的跨平台

2010/11/5 u881831 <u88...@hotmail.com>:

u881831

unread,
Nov 7, 2010, 4:56:50 AM11/7/10
to pcmanfx
我把跟IniFile 物件相關的程式碼抽出成數個函式,
接下來就是修改IniFile 物件以及這個物件initial 的部分,
(PCManOptions的主程式)
或是寫一個有相同method的物件。
原來的IniFile 物件要如何處理?
有要保留嗎?


On 11月5日, 下午8時38分, PCMan <pcman...@gmail.com> wrote:
> 那我投 content preference 一票
> 我個人是支持盡量使用 Fx 內建的機制來處裡問題
> 不過這樣做的缺點就是,如果接下來要移植到 chrome
> 就會增加難度
>
> 移植到 chrome 是可能的,只是 socket connection 部份需要
> 使用 NPAPI plugin 來處理,得寫點 c++
> 所以沒辦法完全的跨平台
>

> 2010/11/5 u881831 <u881...@hotmail.com>:


>
> > 我是覺得用content preferences 似乎比較簡潔,
> > 使用preferences system實作不同站台不同設定還是要自己寫程式碼,
> > 程式寫起來可能會比現在的ini 方式還要複雜。
> > 至於書籤功能的話Fx4 似乎開始支援用字串當group name,

> >https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContent...()

u881831

unread,
Nov 14, 2010, 4:08:15 AM11/14/10
to pcmanfx
在FF 3.6中的content preferences 似乎是使用host name (uri.host)當作key 存在資料庫內,
所以uri 的port的資訊就會消失,
也就是說
telnet://example.twbbs.org
telnet://example.twbbs.org:2323
會使用同一組設定檔,
另外含有自訂port的uri 會和書籤部分衝突,
(無法從資料庫中列出所有已儲存站台的uri ->找不到對應的書籤項目)
不過FF 4可以使用字串取代uri 應該就沒有這個問題了。

我已經把content preferences 的程式碼實作出來了(branch pref_test),
關於port的問題要如何處理?

ps.bugfix_temp 目前的所有修正已經整合至trunk 和pref_test 中,
pref_test 已包含了trunk 的所有功能及修正。


On 11月7日, 下午5時56分, u881831 <u881...@hotmail.com> wrote:
> 我把跟IniFile 物件相關的程式碼抽出成數個函式,
> 接下來就是修改IniFile 物件以及這個物件initial 的部分,
> (PCManOptions的主程式)
> 或是寫一個有相同method的物件。
> 原來的IniFile 物件要如何處理?
> 有要保留嗎?
>
> On 11月5日, 下午8時38分, PCMan <pcman...@gmail.com> wrote:
>
> > 那我投 content preference 一票
> > 我個人是支持盡量使用 Fx 內建的機制來處裡問題
> > 不過這樣做的缺點就是,如果接下來要移植到 chrome
> > 就會增加難度
>
> > 移植到 chrome 是可能的,只是 socket connection 部份需要
> > 使用 NPAPI plugin 來處理,得寫點 c++
> > 所以沒辦法完全的跨平台
>
> > 2010/11/5 u881831 <u881...@hotmail.com>:
>
> > > 我是覺得用content preferences 似乎比較簡潔,
> > > 使用preferences system實作不同站台不同設定還是要自己寫程式碼,
> > > 程式寫起來可能會比現在的ini 方式還要複雜。
> > > 至於書籤功能的話Fx4 似乎開始支援用字串當group name,

> > >https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContentPrefService#getPref()
> > > 這樣應該就可以像現在的ini 方式跟firefox做整合。

PCMan

unread,
May 15, 2011, 1:51:19 PM5/15/11
to pcm...@googlegroups.com
很久都沒有空動這個東西了,
今天有點空檔又重看了一下之前說的 content preference,在 firefox 程式碼當中搜尋了一下:
http://mxr.mozilla.org/mozilla-central/source/toolkit/components/contentprefs/nsContentPrefService.js#1188

1188 _parseGroupParam: function ContentPrefService__parseGroupParam(aGroup) {
1189 if (aGroup == null)
1190 return null;
1191 if (aGroup.constructor.name == "String")
1192 return aGroup.toString();
1193 if (aGroup instanceof Ci.nsIURI)
1194 return this.grouper.group(aGroup);
1195
1196 throw Components.Exception("aGroup is not a string, nsIURI or null",
1197 Cr.NS_ERROR_ILLEGAL_VALUE);
1198 },

這是 firefox 實作 content preference 的 javascript code
就跟之前講得一樣,用 string 作為 group name 而不要用 nsIURI,就可以克服只抓到 host 的問題。
如果我們以包含 port 的 URI 轉成字串,作為 group name,應該就可以了。
所以基本上 ini 檔是不需要的。

有人有空繼續這塊嗎?

u881831

unread,
May 22, 2011, 5:04:55 AM5/22/11
to pcmanfx
MDC 上nsIContentPrefService 的文章有提到:

https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIContentPrefService#getPref()
Gecko 2 note
(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)
Prior to Gecko 2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) , the
site could only be specified by nsIURI . Now a string can be used as
well.

如果要用字串取代nsIURI,
似乎要捨棄掉Firefox 3.6.* 的相容性,
現在似乎還有不少人因為其他附加元件不相容Firefox 4.0所以還在用舊版Firefox 。
不過真的要放棄舊版Firefox 的話我是覺得還好,
不知道各位有沒有什麼意見?


On 5月16日, 上午1時51分, PCMan <pcman...@gmail.com> wrote:
> 很久都沒有空動這個東西了,

> 今天有點空檔又重看了一下之前說的 content preference,在 firefox 程式碼當中搜尋了一下:http://mxr.mozilla.org/mozilla-central/source/toolkit/components/cont...

SUN Chun-Yen

unread,
May 22, 2011, 10:46:44 AM5/22/11
to pcm...@googlegroups.com
有沒有辦法測版本,如果是 3.6.* 就關閉此功能,4.0 + 就開啟。

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

PCMan

unread,
May 22, 2011, 12:06:08 PM5/22/11
to pcm...@googlegroups.com
在 3.x 就用 url 當 key,4.x 就用字串 (其實就是 URL 含 port number)
或許這樣是兼顧的方式

2011/5/22 SUN Chun-Yen <scy....@gmail.com>:

u881831

unread,
Jul 31, 2011, 2:09:06 AM7/31/11
to pcm...@googlegroups.com
FX4+使用字串當key 已整合進測試偏好設定用的branch

下面是目前svn 上程式碼上的打包,
方便一些不大會用svn 的人做測試:

trunk
https://docs.google.com/leaf?id=0B-K9h3GKW2VGNDZkZjNkMmYtMWYyMC00NmQ5LWE0ZGMtOWIxMzYwZTQwMGFh

pref_test
https://docs.google.com/leaf?id=0B-K9h3GKW2VGMjA3NWM4NzAtZTA5Yi00YTg2LWI4ZjAtNzAwZmI5NDc2MTQx

目前測試中的偏好設定系統中設定個別站台設定的方法是:
連線到想要新增的站台後按右鍵選擇站台設定,
之後打開偏好設定視窗就能看到該站台出現在列表上,
移除的步驟同上。



至於新增設定的步驟,
我想一般的套件需要修改這幾個部分:
偏好設定視窗的XUL 介面(以及DTD 顯示文字)
處理偏好設定視窗動作的javascript(如果使用Preferences system就不用)
偏好設定的預設值
最後就是主程式處理偏好設定的部分

這次的更改把偏好設定的預設值獨立成單獨的檔案;
原來處理設定視窗的部分使用For 迴圈處理各個設定,
只要XUL 介面內元素ID和偏好設定的名稱一樣就會自動對應,
就像Preferences system一樣不需修改這邊的javascript,
現在另外寫了不需要迴圈的版本,
比較冗長不過比較有彈性也容易閱讀;
主程式處理偏好設定的部分也寫了另一個版本。

如果各位對這邊有什麼意見也請各位提出來討論。

SUN Chun-Yen

unread,
Jul 31, 2011, 9:07:35 PM7/31/11
to pcm...@googlegroups.com
我測試了 r92.xpi,連線時按右鍵是會出現「站台設定」的選項,可是點選該選項卻沒有發生任何事?

測試環境 ubuntu 10.04, Gnome, Firefox 5.0.1

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

u881831

unread,
Aug 1, 2011, 8:53:42 AM8/1/11
to pcmanfx
我這邊測試的結果是正常的。
Windows 7 x64, Firefox 5.0
openSUSE 11.4 x86_64, KDE 4.6.0, Firefox 5.0

因為當初只是想確認contentpref.js裡新增和移除站台功能是否正常,
所以XUL 介面這邊就沒有特別去設計彈出視窗之類的通知訊息。
因為新增和移除站台時都沒有通知訊息,
所以使用者可能會不知道是否有成功新增,
要是使用者因此再多按一次就會把剛新增的站台刪除,
看起來就會像是什麼都沒有發生。
我想在點奇數次的情況下,
打開偏好設定視窗應該會有剛新增的站台。

單純弄個彈出視窗應該可以暫時解決這個問題,
不過也許有更直觀更方便的方法來新增移除站台?


On 8月1日, 上午9時07分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我測試了 r92.xpi,連線時按右鍵是會出現「站台設定」的選項,可是點選該選項卻沒有發生任何事?
>
> 測試環境 ubuntu 10.04, Gnome, Firefox 5.0.1
>

> 在 2011年7月31日下午2:09,u881831 <u881...@hotmail.com> 寫道:
>
>
>
>
>
>
>
>
>
> > FX4+使用字串當key 已整合進測試偏好設定用的branch
>
> > 下面是目前svn 上程式碼上的打包,
> > 方便一些不大會用svn 的人做測試:
>
> > trunk

> >https://docs.google.com/leaf?id=0B-K9h3GKW2VGNDZkZjNkMmYtMWYyMC00NmQ5...
>
> > pref_test
> >https://docs.google.com/leaf?id=0B-K9h3GKW2VGMjA3NWM4NzAtZTA5Yi00YTg2...


>
> > 目前測試中的偏好設定系統中設定個別站台設定的方法是:
> > 連線到想要新增的站台後按右鍵選擇站台設定,
> > 之後打開偏好設定視窗就能看到該站台出現在列表上,
> > 移除的步驟同上。
>
> > 至於新增設定的步驟,
> > 我想一般的套件需要修改這幾個部分:
> > 偏好設定視窗的XUL 介面(以及DTD 顯示文字)
> > 處理偏好設定視窗動作的javascript(如果使用Preferences system就不用)
> > 偏好設定的預設值
> > 最後就是主程式處理偏好設定的部分
>
> > 這次的更改把偏好設定的預設值獨立成單獨的檔案;
> > 原來處理設定視窗的部分使用For 迴圈處理各個設定,
> > 只要XUL 介面內元素ID和偏好設定的名稱一樣就會自動對應,
> > 就像Preferences system一樣不需修改這邊的javascript,
> > 現在另外寫了不需要迴圈的版本,
> > 比較冗長不過比較有彈性也容易閱讀;
> > 主程式處理偏好設定的部分也寫了另一個版本。
>
> > 如果各位對這邊有什麼意見也請各位提出來討論。
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 1, 2011, 10:08:33 AM8/1/11
to pcm...@googlegroups.com
ok 瞭解,我再試試看。

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

SUN Chun-Yen

unread,
Aug 1, 2011, 10:46:04 AM8/1/11
to pcm...@googlegroups.com
我知道問題才哪了。

我原先是用 telnet://ptt.cc:443/ 來測試,就沒有任何反應。

改成 telnet://ptt.cc/ 後就正常。

在 2011年8月1日下午8:53,u881831 <u88...@hotmail.com> 寫道:

> 我這邊測試的結果是正常的。
> Windows 7 x64, Firefox 5.0
> openSUSE 11.4 x86_64, KDE 4.6.0, Firefox 5.0
>
> 因為當初只是想確認contentpref.js裡新增和移除站台功能是否正常,
> 所以XUL 介面這邊就沒有特別去設計彈出視窗之類的通知訊息。
> 因為新增和移除站台時都沒有通知訊息,
> 所以使用者可能會不知道是否有成功新增,
> 要是使用者因此再多按一次就會把剛新增的站台刪除,
> 看起來就會像是什麼都沒有發生。
> 我想在點奇數次的情況下,
> 打開偏好設定視窗應該會有剛新增的站台。
>
> 單純弄個彈出視窗應該可以暫時解決這個問題,
> 不過也許有更直觀更方便的方法來新增移除站台?
>
>

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

u881831

unread,
Aug 1, 2011, 12:07:06 PM8/1/11
to pcmanfx
請問沒有反應是?
在FX4+裡ptt.cc:443和ptt.cc是當成兩個獨立的站台,
只是在偏好設定視窗裡的顯示名稱都是ptt.cc(沒有抓到書籤名稱的情況)
所以要是選到另一個站台就沒有作用,
如果不是這種情況的話可能就是我寫錯了。

另外在大部分的情況下把不同Port的連線當作不同站台是適當的嗎?


On 8月1日, 下午10時46分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我知道問題才哪了。
>
> 我原先是用 telnet://ptt.cc:443/ 來測試,就沒有任何反應。
>
> 改成 telnet://ptt.cc/ 後就正常。
>

> 在 2011年8月1日下午8:53,u881831 <u881...@hotmail.com> 寫道:
>
>
>
>
>
>
>
>
>
> > 我這邊測試的結果是正常的。
> > Windows 7 x64, Firefox 5.0
> > openSUSE 11.4 x86_64, KDE 4.6.0, Firefox 5.0
>
> > 因為當初只是想確認contentpref.js裡新增和移除站台功能是否正常,
> > 所以XUL 介面這邊就沒有特別去設計彈出視窗之類的通知訊息。
> > 因為新增和移除站台時都沒有通知訊息,
> > 所以使用者可能會不知道是否有成功新增,
> > 要是使用者因此再多按一次就會把剛新增的站台刪除,
> > 看起來就會像是什麼都沒有發生。
> > 我想在點奇數次的情況下,
> > 打開偏好設定視窗應該會有剛新增的站台。
>
> > 單純弄個彈出視窗應該可以暫時解決這個問題,
> > 不過也許有更直觀更方便的方法來新增移除站台?
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 1, 2011, 8:42:14 PM8/1/11
to pcm...@googlegroups.com
沒反應是指按了「站台設定」後沒有任何改變,打開附加元件的偏好設定裡面也沒有任何東西。

兩者應該是視為相同。用 location.host 兩個會抓到不同結果,但用 location.hostname 就都是得到
ptt.cc,還可以再用 location.port 抓到 port。

在 2011年8月2日上午12:07,u881831 <u88...@hotmail.com> 寫道:
> 請問沒有反應是?
> 在FX4+裡ptt.cc:443和ptt.cc是當成兩個獨立的站台,
> 只是在偏好設定視窗裡的顯示名稱都是ptt.cc(沒有抓到書籤名稱的情況)
> 所以要是選到另一個站台就沒有作用,
> 如果不是這種情況的話可能就是我寫錯了。
>
> 另外在大部分的情況下把不同Port的連線當作不同站台是適當的嗎?

SUN Chun-Yen

unread,
Aug 2, 2011, 2:55:35 AM8/2/11
to pcm...@googlegroups.com
我重新回應如下:

在 2011年8月2日上午12:07,u881831 <u88...@hotmail.com> 寫道:
> 請問沒有反應是?

我發現應該是會有一個「空白」名稱的站台出現在列表中,但並不是每一次都會出現,可能要加入一個無 port
的站台後,那個空白站台才會出來。還沒有明確的重製步驟。不過我想這並不太重要,重點是網址含 port 時會出錯。


> 在FX4+裡ptt.cc:443和ptt.cc是當成兩個獨立的站台,
> 只是在偏好設定視窗裡的顯示名稱都是ptt.cc(沒有抓到書籤名稱的情況)
> 所以要是選到另一個站台就沒有作用,
> 如果不是這種情況的話可能就是我寫錯了。
>
> 另外在大部分的情況下把不同Port的連線當作不同站台是適當的嗎?
>

仔細想想後,我建議把 port 也加入設定選項中。可能需要將不同 port 連線當做不同站台,這樣使用者可以用書籤做不同的選擇。

至於站台設定的界面,我覺得可以按「站台設定」後,就跳出偏好設定視窗,讓使用者知道發生什麼事,對我們來說也已有現成的界面及程式碼,比較方便。

不知各位意下如何?

u881831

unread,
Aug 2, 2011, 1:12:43 PM8/2/11
to pcmanfx
把 port 也加入設定選項中是指可選擇是否將不同 port 當作不同站台?

我上傳了一個新版本,
因為我這邊偏好設定都能正常使用,
不知道那邊發生了什麼事。
我加強了站台設定這邊的容錯能力,
請試試看有沒有什麼改變。
https://docs.google.com/leaf?id=0B-K9h3GKW2VGMjA3NWM4NzAtZTA5Yi00YTg2LWI4ZjAtNzAwZmI5NDc2MTQx
pref_test_0802.xpi這個版本。

On 8月2日, 下午2時55分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我重新回應如下:
>

> 在 2011年8月2日上午12:07,u881831 <u881...@hotmail.com> 寫道:
>
> > 請問沒有反應是?
>
> 我發現應該是會有一個「空白」名稱的站台出現在列表中,但並不是每一次都會出現,可能要加入一個無 port
> 的站台後,那個空白站台才會出來。還沒有明確的重製步驟。不過我想這並不太重要,重點是網址含 port 時會出錯。
>
> > 在FX4+裡ptt.cc:443和ptt.cc是當成兩個獨立的站台,
> > 只是在偏好設定視窗裡的顯示名稱都是ptt.cc(沒有抓到書籤名稱的情況)
> > 所以要是選到另一個站台就沒有作用,
> > 如果不是這種情況的話可能就是我寫錯了。
>
> > 另外在大部分的情況下把不同Port的連線當作不同站台是適當的嗎?
>
> 仔細想想後,我建議把 port 也加入設定選項中。可能需要將不同 port 連線當做不同站台,這樣使用者可以用書籤做不同的選擇。
>
> 至於站台設定的界面,我覺得可以按「站台設定」後,就跳出偏好設定視窗,讓使用者知道發生什麼事,對我們來說也已有現成的界面及程式碼,比較方便。
>
> 不知各位意下如何?
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

u881831

unread,
Aug 3, 2011, 2:54:51 AM8/3/11
to pcmanfx
從資料庫抓取站台列表時,會先判斷站台名稱是否正確
重新上傳了pref_test_0803.xpi這個版本。


On 8月3日, 上午1時12分, u881831 <u881...@hotmail.com> wrote:
> 把 port 也加入設定選項中是指可選擇是否將不同 port 當作不同站台?
>
> 我上傳了一個新版本,
> 因為我這邊偏好設定都能正常使用,
> 不知道那邊發生了什麼事。
> 我加強了站台設定這邊的容錯能力,

> 請試試看有沒有什麼改變。https://docs.google.com/leaf?id=0B-K9h3GKW2VGMjA3NWM4NzAtZTA5Yi00YTg2...

SUN Chun-Yen

unread,
Aug 3, 2011, 5:57:24 AM8/3/11
to pcm...@googlegroups.com
我測試了之前的 0802 是正常的,謝謝 u881831。0803 再找時間測。

另外兩個建議:

一、如果站台已經儲存,那麼點選「站台設定」時,跳出偏好設定視窗,並且 focus
在該站台項目就好,不要刪除該站台已存資料,因為這不是一般預期的動作,對於使用者來說可能會有些困擾。

二、右鍵選單裡,「搜尋」和「站台設定」中間要不要加個 menuseperator?

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

u881831

unread,
Aug 3, 2011, 12:21:15 PM8/3/11
to pcmanfx
我先將目前的錯誤修正先Commit上去。
至於右鍵選單的部分我想移除的功能還是有必要的,
看是要在右鍵選單新增選項還是要放在偏好設定視窗。

如果這些都完成的話,
接下來就是新增一些設定還有寫一些東西到關於的部分。
我想如果要盡快推出新版的話,
設定應該可以不用新增不過關於的部分不改的話似乎不大好。


On 8月3日, 下午5時57分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我測試了之前的 0802 是正常的,謝謝 u881831。0803 再找時間測。
>
> 另外兩個建議:
>
> 一、如果站台已經儲存,那麼點選「站台設定」時,跳出偏好設定視窗,並且 focus
> 在該站台項目就好,不要刪除該站台已存資料,因為這不是一般預期的動作,對於使用者來說可能會有些困擾。
>
> 二、右鍵選單裡,「搜尋」和「站台設定」中間要不要加個 menuseperator?
>

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 3, 2011, 7:20:06 PM8/3/11
to pcm...@googlegroups.com
在 2011年8月4日上午12:21,u881831 <u88...@hotmail.com> 寫道:
> 我先將目前的錯誤修正先Commit上去。
> 至於右鍵選單的部分我想移除的功能還是有必要的,
> 看是要在右鍵選單新增選項還是要放在偏好設定視窗。

我的看法是放在偏好設定視窗,讓右鍵選單越單純越好。

請問一下現在偏好設定視窗除了儲存站台以外有何功能?是否還沒完成?我試著改過已存站台的資料,但修改沒辦法保存,目前是正常的嗎?

>
> 如果這些都完成的話,
> 接下來就是新增一些設定還有寫一些東西到關於的部分。
> 我想如果要盡快推出新版的話,
> 設定應該可以不用新增不過關於的部分不改的話似乎不大好。

還有要更新版本號,可以先改成 0.2.5b。

u881831

unread,
Aug 4, 2011, 9:08:06 AM8/4/11
to pcmanfx

On 8月4日, 上午7時20分, SUN Chun-Yen <scy.h...@gmail.com> wrote:


> 在 2011年8月4日上午12:21,u881831 <u881...@hotmail.com> 寫道:
>
> > 我先將目前的錯誤修正先Commit上去。
> > 至於右鍵選單的部分我想移除的功能還是有必要的,
> > 看是要在右鍵選單新增選項還是要放在偏好設定視窗。
>
> 我的看法是放在偏好設定視窗,讓右鍵選單越單純越好。

這樣的話我想把右鍵選單弄成單純開啟站台設定,
原來沒有站台設定的話會在偏好設定視窗出現一個新增按鈕,
如果新增和修改站台設定整合再一起的話,
一些不清楚這個功能或不想用的使用者可能會抱怨每開一個站台要重設一次設定。

>
> 請問一下現在偏好設定視窗除了儲存站台以外有何功能?是否還沒完成?我試著改過已存站台的資料,但修改沒辦法保存,目前是正常的嗎?

在Windows 下是完全正常可以修改保存,
偏好設定選單有確定和取消兩個按鈕。
我剛剛開到Linux 下發現偏好設定視窗只剩下一個關閉的按鈕,
不過要是直接按Enter 的話是可以套用設定,
我現在還沒想到方法解決,
可能要麻煩你暫時用鍵盤的Enter 鍵來測試。

另外我在Linux 下有一個問題,
那個bindings.xml裡面有用到Fx 3以下才能用的語法,
在Windows 下完全沒問題,
但是在我這邊的OpenSuSE 11.4 FX4+就會出問題。
只要安裝這個延伸套件就有一定機率無法切換分頁,
(頁面內容和網址列不會改到新的分頁,網址列內容反白)
拿掉這個部份就正常,
不知道使用其他的distribution的人(Ubuntu、Debian)會不會這樣。

因為拿掉這部份看起來也沒有什麼太大的影響,
我對FX的核心不熟也不知道這部份是用在處理什麼狀況,
要是最後還是沒辦法就回報一個Issue 暫時擱著。

>
>
>
> > 如果這些都完成的話,
> > 接下來就是新增一些設定還有寫一些東西到關於的部分。
> > 我想如果要盡快推出新版的話,
> > 設定應該可以不用新增不過關於的部分不改的話似乎不大好。
>
> 還有要更新版本號,可以先改成 0.2.5b。
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 4, 2011, 10:06:05 AM8/4/11
to pcm...@googlegroups.com
在 2011年8月4日下午9:08,u881831 <u88...@hotmail.com> 寫道:
>
>
> On 8月4日, 上午7時20分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
>
> 這樣的話我想把右鍵選單弄成單純開啟站台設定,
> 原來沒有站台設定的話會在偏好設定視窗出現一個新增按鈕,
> 如果新增和修改站台設定整合再一起的話,
> 一些不清楚這個功能或不想用的使用者可能會抱怨每開一個站台要重設一次設定。

同意。最好是能在開啟站台設定時,如果該站台已經儲存了,那麼就 focus 在該站台的選項,而不是預設站台。

>
> 在Windows 下是完全正常可以修改保存,
> 偏好設定選單有確定和取消兩個按鈕。
> 我剛剛開到Linux 下發現偏好設定視窗只剩下一個關閉的按鈕,
> 不過要是直接按Enter 的話是可以套用設定,
> 我現在還沒想到方法解決,
> 可能要麻煩你暫時用鍵盤的Enter 鍵來測試。

我找到原因了,是因為在 linux 裡,browser.preferences.instantApply 為
true,所以才會只有關閉按鈕。(改成 false 就變成兩個按鈕)

解決方式是加上這一行:

ondialogcancel="if ( document.documentElement.instantApply ) save();"

>
> 另外我在Linux 下有一個問題,
> 那個bindings.xml裡面有用到Fx 3以下才能用的語法,
> 在Windows 下完全沒問題,
> 但是在我這邊的OpenSuSE 11.4 FX4+就會出問題。
> 只要安裝這個延伸套件就有一定機率無法切換分頁,
> (頁面內容和網址列不會改到新的分頁,網址列內容反白)
> 拿掉這個部份就正常,
> 不知道使用其他的distribution的人(Ubuntu、Debian)會不會這樣。

ubuntu 是正常的。

不知道你說 bindings.xml 用的 fx 3 以下才可以接受的語法是哪個部分?

u881831

unread,
Aug 4, 2011, 11:13:21 AM8/4/11
to pcmanfx

On 8月4日, 下午10時06分, SUN Chun-Yen <scy.h...@gmail.com> wrote:


> 在 2011年8月4日下午9:08,u881831 <u881...@hotmail.com> 寫道:
>
>
>
> > On 8月4日, 上午7時20分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
>
> > 這樣的話我想把右鍵選單弄成單純開啟站台設定,
> > 原來沒有站台設定的話會在偏好設定視窗出現一個新增按鈕,
> > 如果新增和修改站台設定整合再一起的話,
> > 一些不清楚這個功能或不想用的使用者可能會抱怨每開一個站台要重設一次設定。
>
> 同意。最好是能在開啟站台設定時,如果該站台已經儲存了,那麼就 focus 在該站台的選項,而不是預設站台。
>
>
>
> > 在Windows 下是完全正常可以修改保存,
> > 偏好設定選單有確定和取消兩個按鈕。
> > 我剛剛開到Linux 下發現偏好設定視窗只剩下一個關閉的按鈕,
> > 不過要是直接按Enter 的話是可以套用設定,
> > 我現在還沒想到方法解決,
> > 可能要麻煩你暫時用鍵盤的Enter 鍵來測試。
>
> 我找到原因了,是因為在 linux 裡,browser.preferences.instantApply 為
> true,所以才會只有關閉按鈕。(改成 false 就變成兩個按鈕)
>
> 解決方式是加上這一行:
>
> ondialogcancel="if ( document.documentElement.instantApply ) save();"
>

如果是這樣的話直接在onload加上下面這段Code可能比較直觀也能保留取消的按鈕。
document.documentElement.getButton("accept").hidden = false;
document.documentElement.getButton("cancel").hidden = false;
document.documentElement.getButton("close").hidden = true;

我想如果可以的話讓那些偏好設定元件也能做到instantApply,
之後也許會有所有站台統一的偏好設定,
這邊我打算直接使用Preferences system,
所以希望這兩邊的行為能統一。

在不更改
browser.preferences.instantApply
的情況下除了一個一個設定每個偏好設定元件的change事件外,
還有更方便的作法嗎?

>
>
> > 另外我在Linux 下有一個問題,
> > 那個bindings.xml裡面有用到Fx 3以下才能用的語法,
> > 在Windows 下完全沒問題,
> > 但是在我這邊的OpenSuSE 11.4 FX4+就會出問題。
> > 只要安裝這個延伸套件就有一定機率無法切換分頁,
> > (頁面內容和網址列不會改到新的分頁,網址列內容反白)
> > 拿掉這個部份就正常,
> > 不知道使用其他的distribution的人(Ubuntu、Debian)會不會這樣。
>
> ubuntu 是正常的。
>
> 不知道你說 bindings.xml 用的 fx 3 以下才可以接受的語法是哪個部分?
>

我找到問題了,
在FX4+的情況下,binding 的那段Code會和OpenSuSE不能直接移除的綁定套件相衝
http://en.opensuse.org/OpenSUSE_Firefox_extension
停用這個套件問題就消失了。

不知道有沒有其他使用OpenSuSE的朋友朋友可以幫忙確認這個問題?

SUN Chun-Yen

unread,
Aug 4, 2011, 8:51:57 PM8/4/11
to pcm...@googlegroups.com
在 2011年8月4日下午11:13,u881831 <u88...@hotmail.com> 寫道:
>> 我找到原因了,是因為在 linux 裡,browser.preferences.instantApply 為
>> true,所以才會只有關閉按鈕。(改成 false 就變成兩個按鈕)
>>
>> 解決方式是加上這一行:
>>
>> ondialogcancel="if ( document.documentElement.instantApply ) save();"
>>
>
> 如果是這樣的話直接在onload加上下面這段Code可能比較直觀也能保留取消的按鈕。
> document.documentElement.getButton("accept").hidden = false;
> document.documentElement.getButton("cancel").hidden = false;
> document.documentElement.getButton("close").hidden = true;
>
> 我想如果可以的話讓那些偏好設定元件也能做到instantApply,
> 之後也許會有所有站台統一的偏好設定,
> 這邊我打算直接使用Preferences system,
> 所以希望這兩邊的行為能統一。

這點我持反對意見。因為 preferences system 就是這樣設計的,在 windows 下有取消和確定、在 linux
下只有關閉。firefox 的這個設計就是要跟著系統的設定走,你可以看絕大多數的套件都是這種狀況,都沒有刻意要在 linux
下保留取消按鈕。如果是系統預設(或是使用者自設) browser.preferences.instantApply 是
true,那不出現取消按鈕才是直觀的。

所以這和未來統一或其他的偏好設定沒有關係,以後有統一的偏好設定了,在 linux 下還是只有關閉按鈕,還是一樣 instant apply。

>
> 在不更改
> browser.preferences.instantApply
> 的情況下除了一個一個設定每個偏好設定元件的change事件外,
> 還有更方便的作法嗎?

不必去考慮這件事。browser.preferences.instantApply 是系統或使用者的設定,如果系統要 instant
apply,自然要做到 instant apply,不應該一個一個設 change 事件。

Ett Chung

unread,
Aug 4, 2011, 9:35:48 PM8/4/11
to pcm...@googlegroups.com
看看吧
http://forum.moztw.org/viewtopic.php?f=11&t=31722
其實bindings.xml裡面的code最初是從firefox 3的tabbrowser.xml這個檔中取出的,
本來的目的是要鎖住頁籤的圖示(在頁面進入busy, loading等狀態時仍然讓頁籤icon維持原來套件圖示。
但是以binding方式來達到這個功能,會讓pcmanfx與很多套件都衝突,
以下建議可以參考看看,在chrome.manifest中
style chrome://browser/content/browser.xul chrome://pcmanfx2/content/bindings.css
改成
style chrome://browser/content/browser.xul chrome://pcmanfx2/content/bindings.css appversion<4.0
讓bindings.xml在FX 4.0以後的版本中直接就不安裝,這是BBSFox目前的作法。
(事實上我檢查過firefox 4的tabbrowser.xml這個檔,裡面對tabicon處理的某些function已經被取消啦)
然後把圖示變更的相關處理改在pcman.js的 TabAttrModified 事件中處理。
有需要的話我可以再把相關的code貼出來。


--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

--
Ett Chung

PCMan

unread,
Aug 4, 2011, 9:39:36 PM8/4/11
to pcm...@googlegroups.com
2011/8/4 u881831 <u88...@hotmail.com>:
在 Linux 下,如果使用 Gnome/GTK+ 介面的程式,instant apply 才是正確的 UI 行為
但如果是KDE環境,則是 OK/Cancel,和Windows一樣
但 Firefox 是用 GTK+,所以在 Linux 下應該要 instant Apply 是比較恰當的,
這也是 Firefox 的 preference system 如此設計的理由,和平台上其他程式行為一致。

u881831

unread,
Aug 5, 2011, 2:34:24 AM8/5/11
to pcmanfx
因為能夠instantApply的只有preference元件或指定preference屬性的元件,
其他元件就不會立即套用,
事實上也因為這些元件的處理函式是自己寫的FX也不知道要套用到哪邊,
所以如果要讓這些元件也跟著instantApply的設定的話,
除了一個一個設定設定事件處理函式外我想不到其他的方法,
比如說用迴圈抓每個元件的DOMAttrModified 之類的事件,
對偏好設定視窗而言監聽DOMAttrModified 造成的效能低落我想應該不是大問題。

先上傳目前的修改給大家測試,套件衝突和立即套用的部分尚未處理。
https://docs.google.com/leaf?id=0B-K9h3GKW2VGMjA3NWM4NzAtZTA5Yi00YTg2LWI4ZjAtNzAwZmI5NDc2MTQx
pref_test_0805.xpi這個版本。


On 8月5日, 上午8時51分, SUN Chun-Yen <scy.h...@gmail.com> wrote:

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 5, 2011, 4:36:41 AM8/5/11
to pcm...@googlegroups.com
ok, 我懂你的意思了。

如果要真的 instant apply,只要在 textbox 和 checkbox 都加上
oncommand。不過這樣做也滿麻煩,我們只要做到按關閉按鈕時能夠生效即可。比方 firegesutres
編輯手勢也是如此,按關閉才會生效,而不是立即生效。再者,0805 版中,同時顯示關閉和確定,對於使用 gnome 界面者來說是很奇怪的。

所以我還是建議用我之前的提案,使用


ondialogcancel="if ( document.documentElement.instantApply ) save();"

我覺得比較合理。

另外可以在 termview.js 的 onKeyPress 裡加上 if ( !conn.ins ) return; 嗎?理由我在另一篇討論中已說明過了。

謝謝。


在 2011年8月5日下午2:34,u881831 <u88...@hotmail.com> 寫道:
> 因為能夠instantApply的只有preference元件或指定preference屬性的元件,
> 其他元件就不會立即套用,
> 事實上也因為這些元件的處理函式是自己寫的FX也不知道要套用到哪邊,
> 所以如果要讓這些元件也跟著instantApply的設定的話,
> 除了一個一個設定設定事件處理函式外我想不到其他的方法,
> 比如說用迴圈抓每個元件的DOMAttrModified 之類的事件,
> 對偏好設定視窗而言監聽DOMAttrModified 造成的效能低落我想應該不是大問題。
>

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

PCMan

unread,
Aug 5, 2011, 6:24:23 AM8/5/11
to pcm...@googlegroups.com
2011/8/5 SUN Chun-Yen <scy....@gmail.com>:

> ok, 我懂你的意思了。
>
> 如果要真的 instant apply,只要在 textbox 和 checkbox 都加上
> oncommand。不過這樣做也滿麻煩,我們只要做到按關閉按鈕時能夠生效即可。比方 firegesutres
> 編輯手勢也是如此,按關閉才會生效,而不是立即生效。再者,0805 版中,同時顯示關閉和確定,對於使用 gnome 界面者來說是很奇怪的。
對於 gnome 使用者來說,的確就是需要這麼麻煩。
每個選項在被變更的時候,視覺上都要可以即時看到結果。
textbox 會在失去輸入焦點的時候套用
checkbox 只要狀態改變,就會馬上套用,顯示在UI 上
close button 按下時,除了關掉 dialog,是不做其他事情的。(儲存設定檔除外)

這真的超麻煩,但是 Gnome 下的 native UI 的確就是這樣運作的。用 GTK+ 所寫出的程式也
真的是去偵測每個元件的狀態改變,然後立即套用。很噁心,但是沒辦法...

有些狀況,是可以容許有「套用」按鈕,按下才一次套用,不過這個設計很罕見。大多數還是直接 checkbox 狀態一改變馬上UI就跟著做出對應的改變。

SUN Chun-Yen

unread,
Aug 5, 2011, 6:42:28 AM8/5/11
to pcm...@googlegroups.com
那麼我建議在 textbox 和 checkbox 裡加上
oncommand="if ( document.documentElement.instantApply ) save();"
這是我想得到最簡單的方式。

u881831

unread,
Aug 5, 2011, 8:41:07 AM8/5/11
to pcmanfx
抱歉之前傳錯檔案,
請看pref_test_0805_02.xpi 這個檔案。
如果直接套用要直接加在XUL 的話,
我可以把偵測instantApply這段程式碼丟進save()裡面。

另外我這邊是把所有XUL 元件的ID和setupDefault的key 設成一樣,
所以我也可以用
for(key in setupDefault)
document.getElementById(key).setAttribute('oncommand', 'save();');
只是不知道將來所有用到的元件是不是都能用oncommand 這個方法來套用。

還有就是把所有XUL 元件的ID和setupDefault的key 設成一樣適不適當這個問題。

至於套件衝突的部分,
我想最好是能夠維持原功能並改寫成比較不會出現衝突的寫法,
不過因為我這部分不熟所以我這邊可能沒辦法處理。


On 8月5日, 下午6時42分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 那麼我建議在 textbox 和 checkbox 裡加上
> oncommand="if ( document.documentElement.instantApply ) save();"
> 這是我想得到最簡單的方式。
>

> 在 2011年8月5日下午6:24,PCMan <pcman...@gmail.com> 寫道:
>
>
>
>
>
>
>
>
>
> > 2011/8/5 SUN Chun-Yen <scy.h...@gmail.com>:


> >> ok, 我懂你的意思了。
>
> >> 如果要真的 instant apply,只要在 textbox 和 checkbox 都加上
> >> oncommand。不過這樣做也滿麻煩,我們只要做到按關閉按鈕時能夠生效即可。比方 firegesutres
> >> 編輯手勢也是如此,按關閉才會生效,而不是立即生效。再者,0805 版中,同時顯示關閉和確定,對於使用 gnome 界面者來說是很奇怪的。
> > 對於 gnome 使用者來說,的確就是需要這麼麻煩。
> > 每個選項在被變更的時候,視覺上都要可以即時看到結果。
> > textbox 會在失去輸入焦點的時候套用
> > checkbox 只要狀態改變,就會馬上套用,顯示在UI 上
> > close button 按下時,除了關掉 dialog,是不做其他事情的。(儲存設定檔除外)
>
> > 這真的超麻煩,但是 Gnome 下的 native UI 的確就是這樣運作的。用 GTK+ 所寫出的程式也
> > 真的是去偵測每個元件的狀態改變,然後立即套用。很噁心,但是沒辦法...
>
> > 有些狀況,是可以容許有「套用」按鈕,按下才一次套用,不過這個設計很罕見。大多數還是直接 checkbox 狀態一改變馬上UI就跟著做出對應的改變。
>
> >> 所以我還是建議用我之前的提案,使用
> >> ondialogcancel="if ( document.documentElement.instantApply ) save();"
> >> 我覺得比較合理。
>
> >> 另外可以在 termview.js 的 onKeyPress 裡加上 if ( !conn.ins ) return; 嗎?理由我在另一篇討論中已說明過了。
>
> >> 謝謝。
>

> >> 在 2011年8月5日下午2:34,u881831 <u881...@hotmail.com> 寫道:
> >>> 因為能夠instantApply的只有preference元件或指定preference屬性的元件,
> >>> 其他元件就不會立即套用,
> >>> 事實上也因為這些元件的處理函式是自己寫的FX也不知道要套用到哪邊,
> >>> 所以如果要讓這些元件也跟著instantApply的設定的話,
> >>> 除了一個一個設定設定事件處理函式外我想不到其他的方法,
> >>> 比如說用迴圈抓每個元件的DOMAttrModified 之類的事件,
> >>> 對偏好設定視窗而言監聽DOMAttrModified 造成的效能低落我想應該不是大問題。
>
> >> --
> >> 孫俊彥 SUN Chun-Yen
>

> >> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 5, 2011, 11:23:00 AM8/5/11
to pcm...@googlegroups.com
我已經想到一個解決方法(但沒有舊版 fx 可以測試行不行)。

有人能教我如何在 code.google.com 的 project 網頁裡上傳一個 patch 嗎?我同時有幾個檔案要修改,有的檔案要刪,還要新增檔案。

謝謝。

在 2011年8月5日下午8:41,u881831 <u88...@hotmail.com> 寫道:
> 至於套件衝突的部分,
> 我想最好是能夠維持原功能並改寫成比較不會出現衝突的寫法,
> 不過因為我這部分不熟所以我這邊可能沒辦法處理。

SUN Chun-Yen

unread,
Aug 5, 2011, 11:55:20 AM8/5/11
to pcm...@googlegroups.com
改寫 bindings.xml 的問題,我在 u881831 的 pref_test_0805_02.xpi 上修改好了,初步在 3.6.x
上測試是正常。請見此檔:
https://docs.google.com/uc?id=0B-KXo-ANjghQYjkzM2U2YzEtNzk5NS00YmVlLWI1YmEtOTE3YWY5Nzc1NDdl&export=download&hl=en_US

請大家幫忙測試。

(還是希望有人能教我上傳 patch,謝謝)


在 2011年8月5日下午11:23,SUN Chun-Yen <scy....@gmail.com> 寫道:
> 我已經想到一個解決方法(但沒有舊版 fx 可以測試行不行)。
>
> 有人能教我如何在 code.google.com 的 project 網頁裡上傳一個 patch 嗎?我同時有幾個檔案要修改,有的檔案要刪,還要新增檔案。
>
> 謝謝。
>

Ett Chung

unread,
Aug 5, 2011, 7:04:41 PM8/5/11
to pcm...@googlegroups.com
SUN Chun-Yen <scy....@gmail.com> 於 2011年8月5日下午11:55 寫道:
改寫 bindings.xml 的問題,我在 u881831 的 pref_test_0805_02.xpi 上修改好了,初步在 3.6.x
上測試是正常。請見此檔:
https://docs.google.com/uc?id=0B-KXo-ANjghQYjkzM2U2YzEtNzk5NS00YmVlLWI1YmEtOTE3YWY5Nzc1NDdl&export=download&hl=en_US

請大家幫忙測試。

這個寫法可以,測過是沒問題,在FX3下是可以鎖定icon(基本上和原本的bindings.xml是一樣效果了),
不過在FX 4.0上沒有updateIcon,所以那段對busy狀態的處理在FX4下沒有作用。
 bindings.xml的衝突問題在FX3以下本來也就不會發生,不過我想它比直接判斷appversion好多了就是。

(還是希望有人能教我上傳 patch,謝謝)


在 2011年8月5日下午11:23,SUN Chun-Yen <scy....@gmail.com> 寫道:
> 我已經想到一個解決方法(但沒有舊版 fx 可以測試行不行)。
>
> 有人能教我如何在 code.google.com 的 project 網頁裡上傳一個 patch 嗎?我同時有幾個檔案要修改,有的檔案要刪,還要新增檔案。
>
> 謝謝。
>


--
孫俊彥 SUN Chun-Yen

scy....@gmail.com



--
Ett Chung

SUN Chun-Yen

unread,
Aug 5, 2011, 7:34:46 PM8/5/11
to pcm...@googlegroups.com
原 bindings.xml 那段 code 本來在 fx 4 上應該就是沒有做用的,fx 4 的原始碼改寫了處理 icon
的方式,所以這段單純是為 fx 3.x 服務。

Ett Chung

unread,
Aug 5, 2011, 8:24:13 PM8/5/11
to pcm...@googlegroups.com
SUN Chun-Yen <scy....@gmail.com> 於 2011年8月6日上午7:34 寫道:
原 bindings.xml 那段 code 本來在 fx 4 上應該就是沒有做用的,fx 4 的原始碼改寫了處理 icon
的方式,所以這段單純是為 fx 3.x 服務。

右鍵選單內的搜尋有bug,
重現方法:
http://us2.ixquick.com/ 加它的搜尋引擎,然後到BBS頁面用右鍵內的搜尋選單,選剛剛加入的Ixquick,會找不到東西。
具體的修正在searchmenu.js裡面,function onSearchItemCommand
if(submission)
{
  openURI(submission.uri.spec, false);
}
改成
if(submission)
{
  var postData = submission.postData ? submission.postData : null;
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
  var gBrowser = wm.getMostRecentWindow("navigator:browser").gBrowser;
  gBrowser.addTab(submission.uri.spec, {  postData: postData, owner: gBrowser.selectedTab, ownerTab: gBrowser.selectedTab, allowThirdPartyFixup: false, relatedToCurrent: true, fromExternal: false});
}
以上提供參考,或是看看有沒有更好的改法。



--
Ett Chung

u881831

unread,
Aug 6, 2011, 8:33:13 AM8/6/11
to pcmanfx
關於偏好設定系統的部分我想目前已知的問題應該都解決了,
如果各位覺得目前的系統沒有問題的話,
我想把這部分移到trunk 去,
這樣比較容易處理其他部分的問題。

另外合併到trunk 後Issue 18就可以關起來了,
如果有必要的話,
我也可以將Issue 17完成之後再合併。

SUN Chun-Yen

unread,
Aug 6, 2011, 11:01:47 AM8/6/11
to pcm...@googlegroups.com
謝謝 u881831。

我剛剛上傳了三個 patch:
一、修正 bindings.xml 的問題
二、1. 修正選取文字的問題;2. 無選取時,右鍵選單的「複製」及「搜尋」改為無法點取。
三、加上一小段 debug 用的程式碼。

如果各位覺得沒有問題就加進去。新版本應該要儘快釋出了,等官方審核也差不多要一個禮拜的時間。

在 2011年8月6日下午8:33,u881831 <u88...@hotmail.com> 寫道:
> 關於偏好設定系統的部分我想目前已知的問題應該都解決了,
> 如果各位覺得目前的系統沒有問題的話,
> 我想把這部分移到trunk 去,
> 這樣比較容易處理其他部分的問題。
>
> 另外合併到trunk 後Issue 18就可以關起來了,
> 如果有必要的話,
> 我也可以將Issue 17完成之後再合併。
>

u881831

unread,
Aug 7, 2011, 5:09:11 AM8/7/11
to pcmanfx
我這邊也做了一些修正:
可以選取超連結內的文字
支援一些需要post資訊的搜尋引擎

因為今天我手邊沒有Linux 不知道這些修正在Linux 下正不正常,
等明天確認沒有問題我再一起合併到trunk 。

關於偏好設定系統的部分,
我讓它可以自動偵測瀏覽器語言決定預設編碼(big5或gb2312)
Firefox 5 以上會自動偵測Firefox 選項中的語言設定。
至於簡體中文介面因為以後修改介面都一定要跟著修改,
如果我現在做出來的話以後大家新增偏好設定時會不會變的很麻煩?


On 8月6日, 下午11時01分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 謝謝 u881831。
>
> 我剛剛上傳了三個 patch:
> 一、修正 bindings.xml 的問題
> 二、1. 修正選取文字的問題;2. 無選取時,右鍵選單的「複製」及「搜尋」改為無法點取。
> 三、加上一小段 debug 用的程式碼。
>
> 如果各位覺得沒有問題就加進去。新版本應該要儘快釋出了,等官方審核也差不多要一個禮拜的時間。
>

> 在 2011年8月6日下午8:33,u881831 <u881...@hotmail.com> 寫道:
>
> > 關於偏好設定系統的部分我想目前已知的問題應該都解決了,
> > 如果各位覺得目前的系統沒有問題的話,
> > 我想把這部分移到trunk 去,
> > 這樣比較容易處理其他部分的問題。
>
> > 另外合併到trunk 後Issue 18就可以關起來了,
> > 如果有必要的話,
> > 我也可以將Issue 17完成之後再合併。
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

SUN Chun-Yen

unread,
Aug 7, 2011, 9:23:16 PM8/7/11
to pcm...@googlegroups.com
我把閒置三分鐘送出向上鍵及15秒內斷線自動重連寫進去了。目前時間和送出字串都寫死在程式碼裡,未來 preferece
寫好後可以再修改讀取自訂值。請幫我檢查一下有沒有 bug。

u881831

unread,
Aug 8, 2011, 1:09:54 AM8/8/11
to pcmanfx
我想在正式版中這部分應該要讓使用者能夠設定,
不過字串的parser(^[ -> \x1b)可能要看一下pcmanx是怎麼做的,
也許不會這麼快完成,
套件衝突的bug 似乎影響很大,
我想還是盡快出新版本比較好,
我已經把目前跟偏好設定無關的部分合併到trunk 了。

從之前的紀錄來看在這邊出新版本是要

改版本號
新增一個Tag
下載區新增檔案

還有其他的嗎?
amo 那邊我就完全不知道要做什麼了。

還是trunk 就這樣先放著等之後 PCMan有空再說?


On 8月8日, 上午9時23分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我把閒置三分鐘送出向上鍵及15秒內斷線自動重連寫進去了。目前時間和送出字串都寫死在程式碼裡,未來 preferece
> 寫好後可以再修改讀取自訂值。請幫我檢查一下有沒有 bug。
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

PCMan

unread,
Aug 8, 2011, 1:15:45 AM8/8/11
to pcm...@googlegroups.com
2011/8/8 u881831 <u88...@hotmail.com>:

> 我想在正式版中這部分應該要讓使用者能夠設定,
> 不過字串的parser(^[ -> \x1b)可能要看一下pcmanx是怎麼做的,
> 也許不會這麼快完成,
> 套件衝突的bug 似乎影響很大,
> 我想還是盡快出新版本比較好,
> 我已經把目前跟偏好設定無關的部分合併到trunk 了。
>
> 從之前的紀錄來看在這邊出新版本是要
>
> 改版本號
> 新增一個Tag
> 下載區新增檔案
通常是這樣
就小心一些跟版本資訊有關的檔案要改到即可
> 還有其他的嗎?
> amo 那邊我就完全不知道要做什麼了。
AMO 那邊登入之後,進入到你自己的帳號頁面,
然後他應該有選項可以列出你的 addons
就可以找到地方進去編輯
AMO 那個使用者介面不太友善,我很久沒用也有點忘了
不過找一找應該是會有選項可以放出新版,除非我忘了把你加進去
放出之後AMO就會開始審核,通過之後才會上線
> 還是trunk 就這樣先放著等之後 PCMan有空再說?
要等我有空還要很久,至少要到11月以後,建議不要管我 XD

u881831

unread,
Aug 14, 2011, 2:14:18 PM8/14/11
to pcmanfx

On 8月8日, 下午1時15分, PCMan <pcman...@gmail.com> wrote:
> 2011/8/8 u881831 <u881...@hotmail.com>:


> > 不過字串的parser(^[ -> \x1b)可能要看一下pcmanx是怎麼做的,
> > 也許不會這麼快完成,
> > 套件衝突的bug 似乎影響很大,
> > 我想還是盡快出新版本比較好,
> > 我已經把目前跟偏好設定無關的部分合併到trunk 了。

最近我新增了一些設定:
自動重連和防閒置的設定
字串parser的部分如果用eval()的話可以支援更多種特殊字元的表示方式,
不過可能會有安全上的隱憂,
可能的workaround有
someElement.setAttribute("value", toBeParsedString); return
someElement.value;
不知道有沒有更好的寫法?

自動登入
我想這邊的設定應該還是要放在偏好設定設定視窗比較好,
如果放在主視窗這邊是很容易寫不過使用者可能會不習慣。

關閉連線中分頁先提示
這個和之前實作的點擊鏈結後是否跳到新的分頁都可以讓其他套件控制,
只有沒裝其他套件的使用者需要這個設定,
因為之前有實作讓其他分頁套件可以鎖定分頁,
為了避免浪費系統資源預設關閉這個選項。

自動偵測全形字
文字超出畫面自動換行
現在大部分的BBS 都不需要去設定文字超出畫面自動換行,
只有一些罕見的BBS 需要,
這邊預設設定是一般終端機的行為,
而不是PCMan Novus 或pcmanx-gtk2 的行為。
同樣自動偵測全形字也應該是在伺服器端實作,
這個也是用來相容一些不支援的BBS 。

貼上文字自動換行
全形標點都視為一般的中文字沒有處理,
因為PCMan Novus 或pcmanx-gtk2 也都沒有處理,
我想這部分就暫時先放著。


另外在FX4+有辦法鎖定ICON嗎?
如果沒辦法的話就只能像Ett Chung 網友所說的監聽TabAttrModified 事件了。
如果可以的話我想要把連線中的那個圖示加進去。


以上如果有什麼地方有問題的也請各位提出來討論。


還沒實作的部分:
貼上彩色文字轉換 ESC
這部分要等完成包含ANSI彩色的複製貼上,
似乎因為一些作業系統的剪貼簿不支援一字雙色的DBCS文字,
所以pcmanx-gtk2 這部分的功能就使用內部緩衝區儲存資料而不是用系統剪貼簿,
不過實際上是怎樣我不知道。
如果要用和pcmanx-gtk2 一樣的方法實作這部分的話,
我想應該可以用session storage
https://developer.mozilla.org/en/Toolkit_API/extISessionStorage
程式碼就直接使用 Application.storage.set() 。
https://developer.mozilla.org/en/Toolkit_API/extIApplication
不知道各位有沒有更好的作法?

自動回訊
我想最好搭配表情符號等功能

顯示模組相關設定(顏色字型等)
來訊顯示通知
其他一些不大重要的細部設定

不知道有沒有人想要寫這些功能?

u881831

unread,
Aug 18, 2011, 8:46:45 AM8/18/11
to pcmanfx
我發現了一個關於文字選取的小問題,
當選取區的最後一個字是該行最後一個字的時候,
selTrim 就會丟一個錯誤,
在絕大部分的情況下這個錯誤並不會造成選取功能上的影響。

目前選取區域邊界的格式是:
startCol在isCharSelected內是視為選取區的一部分,
endCol就視為選取區域之外。
因為不這樣做的話會無法排除single click的情形(startCol==endCol)
不過這樣就會造成endCol的最大值(==buf.cols)會超出Array 的邊界,
在全選或是選取時滑鼠移出畫面右方外緣時,
line[endCol].isLeadByte 之類的就會丟錯誤出來。

但是在getText 裡面卻是把endCol視為選取區的一部分,
這就造成複製的文字和畫面上的選取區域不一致,
我想之前 Hemiola修正這個問題時應該也花了一些時間在這些容易混淆的程式碼,
目前如果只要修掉這個錯誤的話是很容易,
不過也許修改getText 讓全部的行為一致才不會造成之後維護者的麻煩?

但是直接修改getText 會造成另外一個問題,
原來滑鼠雙擊的部份是正常的改了之後會受影響,
不過只要selectWordAt小改一下就可以解決。
另外一個問題就是判斷文字選取的邊界,
一般而言當滑鼠跨越文字的垂直中心線之後就會判斷該文字有被選到,
但是目前英數等半形文字的判斷邊界卻是文字的最右端,
這是因為termview.js 的 mouseToColRow也是為了滑鼠雙擊設計的,
我想這部份如果要改成兼容框選和雙擊可能會比較麻煩一點,
另外我想選取區域偵測全形字的實作方式也是做在mouseToColRow 比較好,
但是這也是會干擾到滑鼠雙擊的功能。

不知道各位對這部份有沒有什麼想法?
endCol部份我個人是比較贊成修改滑鼠雙擊的邊界定義,
至於mouseToColRow 的部份其實不改也還好,
如果要改的話也許要讓它對框選和雙擊有不同的行為?

p.s.
在Firefox 沒有最大化的情況下,
當滑鼠框選區域超出Firefox 視窗後就不會偵測到mousemove 和 mouseup事件,
其實只要把這兩個事件註冊給document就解決了,
不過我想一般而言都是最大化視窗瀏覽bbs 所以這不是什麼大問題就是。


On 8月15日, 上午2時14分, u881831 <u881...@hotmail.com> wrote:
> On 8月8日, 下午1時15分, PCMan <pcman...@gmail.com> wrote:
>
> > 2011/8/8 u881831 <u881...@hotmail.com>:
> > > 不過字串的parser(^[ -> \x1b)可能要看一下pcmanx是怎麼做的,
> > > 也許不會這麼快完成,
> > > 套件衝突的bug 似乎影響很大,
> > > 我想還是盡快出新版本比較好,
> > > 我已經把目前跟偏好設定無關的部分合併到trunk 了。
>
> 最近我新增了一些設定:
> 自動重連和防閒置的設定
> 字串parser的部分如果用eval()的話可以支援更多種特殊字元的表示方式,
> 不過可能會有安全上的隱憂,
> 可能的workaround有
> someElement.setAttribute("value", toBeParsedString); return
> someElement.value;
> 不知道有沒有更好的寫法?

實際上這樣寫還是輸出原來的String,
要用
someElement.setAttribute("command", "returnValue = '" +
toBeParsedString + "';");
其他的方法也是執行字串的內容,
基於安全性的考量我想還是自己parse 字串可能會比較好,
真的有需要\r或\n再自己寫進去吧。

SUN Chun-Yen

unread,
Aug 18, 2011, 6:36:28 PM8/18/11
to pcm...@googlegroups.com
在 2011年8月18日下午8:46,u881831 <u88...@hotmail.com> 寫道:
> 我發現了一個關於文字選取的小問題,
> 當選取區的最後一個字是該行最後一個字的時候,
> selTrim 就會丟一個錯誤,
> 在絕大部分的情況下這個錯誤並不會造成選取功能上的影響。

seltrim 我後來也發現一些小問題還沒上傳 patch。

>
> 目前選取區域邊界的格式是:
> startCol在isCharSelected內是視為選取區的一部分,
> endCol就視為選取區域之外。
> 因為不這樣做的話會無法排除single click的情形(startCol==endCol)
> 不過這樣就會造成endCol的最大值(==buf.cols)會超出Array 的邊界,
> 在全選或是選取時滑鼠移出畫面右方外緣時,
> line[endCol].isLeadByte 之類的就會丟錯誤出來。

這裡是不是多一個檢查看有沒有超出 array 範圍即可?


>
> 但是在getText 裡面卻是把endCol視為選取區的一部分,
> 這就造成複製的文字和畫面上的選取區域不一致,
> 我想之前 Hemiola修正這個問題時應該也花了一些時間在這些容易混淆的程式碼,
> 目前如果只要修掉這個錯誤的話是很容易,
> 不過也許修改getText 讓全部的行為一致才不會造成之後維護者的麻煩?
>
> 但是直接修改getText 會造成另外一個問題,
> 原來滑鼠雙擊的部份是正常的改了之後會受影響,
> 不過只要selectWordAt小改一下就可以解決。
> 另外一個問題就是判斷文字選取的邊界,
> 一般而言當滑鼠跨越文字的垂直中心線之後就會判斷該文字有被選到,
> 但是目前英數等半形文字的判斷邊界卻是文字的最右端,
> 這是因為termview.js 的 mouseToColRow也是為了滑鼠雙擊設計的,
> 我想這部份如果要改成兼容框選和雙擊可能會比較麻煩一點,
> 另外我想選取區域偵測全形字的實作方式也是做在mouseToColRow 比較好,
> 但是這也是會干擾到滑鼠雙擊的功能。
>
> 不知道各位對這部份有沒有什麼想法?
> endCol部份我個人是比較贊成修改滑鼠雙擊的邊界定義,
> 至於mouseToColRow 的部份其實不改也還好,
> 如果要改的話也許要讓它對框選和雙擊有不同的行為?
>
> p.s.
> 在Firefox 沒有最大化的情況下,
> 當滑鼠框選區域超出Firefox 視窗後就不會偵測到mousemove 和 mouseup事件,
> 其實只要把這兩個事件註冊給document就解決了,
> 不過我想一般而言都是最大化視窗瀏覽bbs 所以這不是什麼大問題就是。
>
>

--
孫俊彥 SUN Chun-Yen

scy....@gmail.com

SUN Chun-Yen

unread,
Aug 18, 2011, 10:46:25 PM8/18/11
to pcm...@googlegroups.com
我上傳了 patch,能不能請你測試一下現在還會不會送錯誤出來。

在 2011年8月18日下午8:46,u881831 <u88...@hotmail.com> 寫道:

> 我發現了一個關於文字選取的小問題,
> 當選取區的最後一個字是該行最後一個字的時候,
> selTrim 就會丟一個錯誤,
> 在絕大部分的情況下這個錯誤並不會造成選取功能上的影響。
>

u881831

unread,
Aug 19, 2011, 6:11:36 AM8/19/11
to pcmanfx
還是有,
錯誤主控台內的訊息是:
line[col] is undefined 行號108
我想這個錯誤應該很好重現,
按右鍵全選就會在錯誤主控台出現錯誤了。
我想在這行之前判斷col == buf.cols 時離開這個函式就可以了,
getText 裡面有處理col == buf.cols 的情形所以應該不需要更改endCol。


On 8月19日, 上午10時46分, SUN Chun-Yen <scy.h...@gmail.com> wrote:
> 我上傳了 patch,能不能請你測試一下現在還會不會送錯誤出來。
>

> 在 2011年8月18日下午8:46,u881831 <u881...@hotmail.com> 寫道:> 我發現了一個關於文字選取的小問題,


> > 當選取區的最後一個字是該行最後一個字的時候,
> > selTrim 就會丟一個錯誤,
> > 在絕大部分的情況下這個錯誤並不會造成選取功能上的影響。
>
> --
> 孫俊彥 SUN Chun-Yen
>

> scy.h...@gmail.com

Reply all
Reply to author
Forward
0 new messages