沒穿方服

索引

顯示╱隱藏內文

一直有用 Firefox 的 FoxAge2chbbs2chreader 兩個套件來訂閱 2ch 的討論,不過後來遇到一些我也懶得研究的問題,其實不是那麼順手……直到昨天 FoxAge2ch 公開了 3.0b2 版,試用後一些疑難雜症都不見了!功能完善,值得寫個簡單入門步驟、介紹一下:

  1. 下載/安裝套件

    • FoxAge2ch - 3.1b2 支援 Firefox 3.0 - 3.1b2pre
    • bbs2chreader - 0.4.17(不過我是用 Nightly 開發版)支援 Firefox 3.0 - 3.0.*

    安裝 xpi → 重開 Firefox 就行了。

    註:FoxAge2ch 只有英、日文語系,臺灣這邊裝完會變英文,但這篇文章的擷圖是日文——因為我試著改為日文試用的關係。若也想修改,請先把 xpi 檔另存下來,然後照後述步驟進行吧。

  2. 讓 FoxAge2ch 和 bbs2chreader 合作

    打開 FoxAge2ch 選項(工具 → 附加元件 → 擴充套件 → FoxAge2ch → 選項)在一般 → ビューア(Viewer)裡選擇 bbs2chreader。日後就會用 bbs2chreader 來閱讀看板/討論串了。

    設定以 bbs2chreader 閱讀文章

  3. 打開 FoxAge2ch

    每次要檢查更新都要先開 FoxAge2ch。

    簡易作法是把 FoxAge2ch 按鈕放到工具列:在工具列按右鍵 → 自訂 → 找出 FoxAge2ch 按鈕(黃色的)→ 拖曳到工具列上即可。

  4. 到 2ch 找看板

    接下來要用 bbs2chreader 找看板,先打開 FoxAge2ch,選擇 ツール(Tool)的最後一項 2ちゃんねる:

    由 FoxAge2ch 進入 bbs2chreader

    就會出現 bbsmenu。點想看的項目,看板就會開在瀏覽器內。
    這裡有「更新」和「検索」等功能都會常用到。

    bbs2chreader 看板 - 討論串一覽

    下面是進入討論串的樣子,看看閱讀的感覺:

    閱讀討論串

  5. 訂閱討論串

    要訂閱的話,先回到 FoxAge2ch,在工具面板選「追加」:

    FoxAge2ch 訂閱討論串

    成功的話,就會出現在列表中:

    訂閱成功

  6. 檢查更新

    訂閱搞定後,只要一個按鈕就能檢查更新了。

    檢查更新

    如果有開 FoxAge2ch 選項「更新されたスレッドを開く (すべての板)」,更新的討論串就會自動開在新分頁,真是太方便了。

    檢查更新(並開啟)中……

    這種入門文章總是給人突然結束的感覺。


附錄:修改套件,改為使用日文語系

解壓縮 foxage2ch.xpi 後,修改裡面的 chrome.manifest,將 en-US 改為 ja-JP

把 en-US 換成 ja-JP(圖中是改完的樣子)

然後把所有檔案壓縮成 foxage2ch.zip,改副檔名為 xpi 就可以安裝了。

修改語系設定

先說明一下,如果你不想寫/改套件,這篇文章很慚愧地幫不上什麼忙。

問題是這樣:Firefox「附加元件管理員」開啟的選項視窗(prefwindow)是不能縮放的;所以視窗過大、過小都會變成痛苦。以往要突破此限制,可能會另外提供開視窗的方法,例如把選項放在工具列以便自行操作開視窗的行為;但不是每個套件都值得為了這個,特別新增選單項目佔空間吧。

正好前幾天 Tab Mix Plus 放出新版 0.3.7,發現他的選項視窗很特別,開了以後還能把套件管理員關掉(本來是暫時關不掉),於是看了原始碼,在 chrome/content/tabmixplus/links/setup.js 第 29 行找到魔法的痕跡……細節就省略,因為跟下面改的東西原理相同(改的極少,恐怕說抄比較貼切。)

這是一個 XULoverlay 檔案,讓附加元件管理員開出可縮放的視窗:

<?xml version="1.0" encoding="UTF-8"?>
<overlay id="resizable-extensions-overlay"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/x-javascript"><![CDATA[
    // Make prefwindow resizable.
    // overwrite cmd_options, see chrome/tookit/content/mozapps/extensions/extensions.js
    window.addEventListener("load", function(){
      eval("gExtensionsViewController.commands.cmd_options ="+gExtensionsViewController.commands.cmd_options.toString().replace(
        'openDialog(optionsURL, "", features);',
        'openDialog(optionsURL, "", features + ",resizable=yes"';
      ));
      return;
    }, false);
  ]]></script>
</overlay>

看來是鑽到某個不為人知的物件,把它的方法轉成字串修改後再 eval ……感覺很不可靠,但是寫法好簡單,乾脆急病亂投醫吧。

Known Issues .blogspot

幾乎所有 blogger.com 的 blog 送交 W3C Markup Validator 都能驗出錯誤,其中很多是 blogger 自動產生的原始碼,想改也改不掉。

這個問題至少 2006 年起就有人在 Blogger Help Group 留言或寄信反應,但是官方一直沒修正,儘管問題看起來好像很簡單——以此 blog 來說,只剩下新/舊文章連結的 & 要改成 &amp;、留言內容的標籤名稱要改成小寫,兩個地方而已。

當然 invalid 未必有什麼毒害,只是 Google 擺著幾個小問題(假設是小問題)不管以致無法通過檢驗,教人煩悶。

回報方式除了 Blogger Help Group 外,說明中心有個 Wishlist,另好像也有 Contacting Support 不過我找不到信箱位址……根據論壇使用者說法,官方回信這問題被歸為「低優先性」所以進展較慢。至於有多慢呢?至少在 Known Issues for Blogger 還找不到,可見 valid XHTML 真是沒有普遍需求的東西啊。

多虧貢獻者回報,總算找到某 Firefox 套件為啥在 Mac 沒反應了——就是作者沒注意到 browser.preferences.instantApply 這個設定啦(其實抄程式的時候有看過,但是不解其意就順理成章地忽略了……)

instantApply 中文意思是「立即套用」,在 Windows 預設是 False(不會立即套用):
選項視窗會出現「確定」和「取消」按鈕,等使用者按了「確定」後設定才會生效。

instantApply 為 false

另一方面在 Linux 和 Mac,這個選項預設是 True
選項視窗不會出現確定/取消,而是出現「關閉」按鈕。使用者一旦更改選項(比方勾了某個框框),該選項便當場生效。

instantApply 為 true

問題是,如果套件只知道等使用者按「確定」才動作,那在 instantApply 有效而沒有確定鈕的情形下,套件就跟冷凍魚一樣不會動了。

出錯的是這種寫法:在 prefwindow 的 ondialogaccept(按確定/接受)事件發生時進入處理動作,結果 instantApply 啟用時,按關閉按鈕觸發的是 ondialogcancel(取消)而非 ondialogaccept 事件,導致視窗關了,套件卻什麼也沒做。

解決方式

  • 如果是單純開、關、修改對應到 prefs 的選項,那聰明的 Firefox 會自己搞定,不需特別照顧。
  • 如果要做的動作比較複雜,可以用 document.documentElement.instantApply 來取得 instantApply 到底有開沒開,有的話,再捕捉選項改變的時機,另行處理。
  • 如果做不到前一個辦法(捕捉改變時機再處理),還是可以退一步在 ondialogcancel 裡面做原本 ondialogaccept 要做的事。只是這麼一來就不是真的 instantApply 了。

實際在 Noise 套件中,因為改設定的處理比較囉唆,會存 RDF 和一些有的沒的,所以目前決定不做真正的 instantApply,而是在改變選項時,顯示一個「關閉後才會套用」的提示:

沒有提供 instantApply,就給個提示訊息吧

這個方式我覺得很好,可以接受。

參考:About:config entries - MozillaZine Knowledge Base 下的 browser. preferences. instantApply 項目

「什麼動作配什麼手勢」應該是有原則的,例如「上一頁」的手勢是左,那「下一頁」想必是右,因為兩個動作互相對稱,手勢自然也要對稱,才容易習慣——此類簡單的考量,可以避免亂設 → 難適應的痛苦。

  • 上一頁 ← (L)
  • 下一頁 → (R)

    動作本身有方向性,很好決定。這例子跟瀏覽器的上一頁/下一頁圖示方向一致。

  • 遞增網址裡頭的數字 ← → (LR)
  • 遞減網址裡頭的數字 → ← (RL)

    同樣是在網址列進退,不過出發前先往反方向墊一下。可能不合理但指令容易接受。

  • Rewind (Go to First Page of History) ← → ← (LRL)
  • Fast Forward (Go to Last Page of History) → ← → (RLR)

    動作是上一頁/下一頁的加強版,手勢也是畫出上一頁/下一頁後用往返方向加速。

  • 捲動到頁首 ↑ (U)
  • 捲動到頁尾 ↓ (D)

    也是動作有方向性。

  • 回到上一層 → ↑ (RU)

    (有點心虛)跟 Windows 的上移圖示方向一致。

  • 上一個分頁 ↓ ← (DL)
  • 下一個分頁 ↓ → (DR)
  • Focus Last Tab ↓ ← → (DLR)
  • Focus First Tab ↓ → ← (DRL)

    因為我把分頁標籤列擺在瀏覽器底端,所以 ↓ (D) 開始就是要選擇分頁。
    算是以動作發生在視窗的「位置」為依據。

  • 關閉分頁 ↑ ↓ (UD)

    模仿日常生活中的關閉動作,例如關箱子,就是手拿起來,然後蓋下去。

    連續動作:上 連續動作:下

  • 復原已關閉分頁 ↓ ↑ (DU)

    這是關閉分頁的對稱,自然也類似開箱子的動作。

  • Open Link in New Tab (Next to the Current Tab) ↑ → ↓ (URD)

    取其位置,因為分頁標籤在正下方,所以我把鏈結抓起來,在目前分頁的右邊放下。

  • 關閉視窗 → ↑ ↓ (RUD)

    因為關視窗的叉叉按鈕在右邊,所以先往右,然後做關閉動作。

  • Enlarge Image Size ← ↑ (LU)
  • Reduce Image Size ← ↓ (LD)
  • Reset Image Size ← ↑ ↓ (LUD)

    圖片縮放動作都是由 ← (L) 開始,倒沒有好理由,只是剛好左還沒用到。

  • 檢視頁面資訊↑ → (UR)
  • 附加元件↑ ← (UL)

    兩項都是另開視窗的動作,往上是因為指令在視窗頂端的工具列裡,往左/右則與新視窗開啟後的位置有關。

  • [彈出視窗] 最近關閉的分頁 ↓ → ↑ (DRU)
  • 顯示 cookie ← ↓ → (LDR)
  • 同文堂 轉繁體 → ← ↓ (RLD)

    取動作的英文首字,DRU 是 Undo closed tab、LDR 是 Cookie、RLD 是 Traditional。

  • [彈出視窗] 以選取的搜尋引擎搜尋文字 → ↓ (RD)

    好的方向都用光了……只好採用 FireGestures 的預設值。

  • MODI(某 bookmarklet) ↑ ↓ ↑ (UDU)

    這只是個習慣。以前 All-in-One Gestures 只能設兩個開書籤的手勢,不好決定怎麼設,結果沿用至今。

  • [Popup] Resize Window ↑ → ↑ (URU)

    錯誤示範,手勢一多似乎就只能亂設。

  • 縮放 - 放大 (滾輪手勢)右鍵 + 向上滾動
  • 縮放 - 縮小 (滾輪手勢)右鍵 + 向下滾動
  • 重新載入 (搖擺手勢)按住右鍵不放再按左鍵
  • 切換 Grab and Drag (搖擺手勢)按住左鍵不放再按右鍵
  • 複製所有劃過的連結網址 (按鍵手勢)按住 Ctrl 鍵並劃過連結
  • 於分頁中開啟所有劃過的連結 (按鍵手勢)按住 Shift 鍵並劃過連結

    六個特殊手勢就靠各人聯想,這東西確實大幅減輕手勢複雜的負擔。


以上就是我自認為親切的列表。如果想列出自己的設定,可以參考上一篇文章:bookmarklet - 匯出 FireGestures 手勢對應設定