mozex 是一個 Mozilla 的外掛模組. 它對 Mozilla 加強了許多功能, 像是使用外部編輯器來看 HTML 源碼, 以偏好的程式來處理不同的連結. 我最喜歡的, 是以外部編輯器來編輯 textarea 裡的資料.
Mozilla 本身雖然有提供一些基本的編輯功能, 但是畢竟不是文字編輯器, 用起來不甚順手. 而且每個人都有偏好的文字編輯器, 能夠使用自己順手的工具, 來編輯一篇較長的文字 (像是這一篇. :), 不是很好嗎?
可惜的是, mozex 存出來的文字檔, 無法被文字編輯器正確地辨識. 簡單地說, Mozilla 本身以 Unicode 來儲存內部的文字, 也就是兩個位元組. 但是寫出時, 卻只會寫入每個字的
5feb 7d00
但是實際存進檔案時, 變成:
eb 00
我對它修改了一下, 在寫入檔案之前, 先轉成 UTF-8 的字元串流, 然後讀檔之後, 再轉回 Unicode. 這樣就可以正確地被可辨識 Unicode 的文字編輯器所使用. 以下是對 v1.07 的 mozex 的 patch (或者你可以從這裡下載):
diff -ruN content/mozex/mozex.js content.new/mozex/mozex.js --- content/mozex/mozex.js Sun Sep 21 17:14:58 2003 +++ content.new/mozex/mozex.js Fri Nov 14 00:07:55 2003 @@ -865,11 +865,16 @@ return false; } + var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. + createInstance(Components.interfaces.nsIScriptableUnicodeConverter); + uc.charset = "UTF-8"; + var data_stream = uc.ConvertFromUnicode( data ); + var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]. createInstance(Components.interfaces.nsIFileOutputStream); var PR_WRONLY = 0x02; stream.init(file, PR_WRONLY, 0600, 0); - stream.write(data, data.length); + stream.write(data_stream, data_stream.length); stream.flush() stream.close(); } @@ -898,7 +903,10 @@ var data = sis.read(sis.available()); sis.close(); is.close(); - return data; + var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. + createInstance(Components.interfaces.nsIScriptableUnicodeConverter); + uc.charset = "UTF-8"; + return uc.ConvertToUnicode( data ); } else { mozexError("temporary file '" + filename + "' does not exist or is not readable");
使用方式:
現在, mozex 應該就會輸出可正確被文字編輯器使用的 utf-8 檔案了. 本篇 blog 就是以 mozex, 在 Emacs 上寫成的. :)
由 plasma 於 2003-11-14 09:31:32 所發表bravo!!