Thunderbird 60にアップデートして muttatorは使えなくなってしまった。
有志による対応を待っていても良いのだけど、望み薄なのと、それまでずっと通常のキーバインドで操作するのは辛い。
代わりになるアドオンがないかと探すと Dorando keyconfigというショートカットのカスタマイズできるものがあった。


これを使えば大分 mutattor に近い操作感を得ることができる。設定は簡単、アドオンの設定画面から操作のキーの割り当てを変更するだけだ。



ただ、問題は、何の操作なのか分かりにくいということと、絞り込み検索といったことができないこと。そして設定のインポート・エクスポート機能がないことだ。
とはいえ、プロファイルフォルダ直下にある prefs.js からキーがextensions.dorandoKeyConfig.mainで始まっている
行をコピペすれば簡単に移行することができる。
user_pref("extensions.dorandoKeyConfig.main.key_nextMsg", "][J][");
場所は以下のとおり。
OS | pref.jsのパス |
---|---|
Windows | %APPDATA%\Thunderbird\Profiles\xxxxxxxx.default\pref.js |
Linux | $HOME/.thunderbird/xxxxxxxx.default/prefs.js |
そして、自分でコードを書いて、それをショートカットキーに割り当てることもできるので、適当に書いてみて、何とか前後フォルダの移動、特定フォルダの移動を実現させることができた。
次のフォルダに移動
gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex + 1, 500);
前のフォルダに移動
gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex - 1, 500);
送信済みフォルダに移動
let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.SentMail);
gFolderTreeView.selectFolder(folder, true);
フォルダ名 | 引数 |
---|---|
全てのメール | Ci.nsMsgFolderFlags.Archive |
下書き | Ci.nsMsgFolderFlags.Drafts |
送信済みメール | Ci.nsMsgFolderFlags.SentMail |
ゴミ箱 | Ci.nsMsgFolderFlags.Trash |
迷惑メール | Ci.nsMsgFolderFlags.Junk |
何故か スター付きの定数がなくて、一度[Gmail]
フォルダを取得して、更にそこからスター付き
のフォルダを取得するいう形になった。
スター付き
let folder = GetDefaultAccountRootFolder().getChildNamed("[Gmail]").getChildNamed("スター付き");
gFolderTreeView.selectFolder(folder, true);
当然、自分が作ったフォルダにも同じやり方で移動できる。
ネットショッピング
let folder = GetDefaultAccountRootFolder().getChildNamed("ネットショッピング")
gFolderTreeView.selectFolder(folder, true);
本当はスマートなコードの書き方やデバッグの仕方があるのだろうけど、情けないながら、以下のような泥臭い方法で調査・実装を進めた。
以下のソースから参考になりそうな箇所を検索しつつ、眺める。
そして、ソース、デバッグは[Ctrl+Shift+i]
もしくは メニュー -> ツール -> 開発ツール(E) -> 開発ツールボックス(T)
から行うことができる。




以下、 pref.js の自分が設定した Dorando keyconfig 部分
pref.jsのDorando keyconfig部分
user_pref("extensions.dorandoKeyConfig.main.calendar-delete-item-key", "!][][");
user_pref("extensions.dorandoKeyConfig.main.calendar-go-to-today-key", "shift][G][");
user_pref("extensions.dorandoKeyConfig.main.key_delete", "][D][");
user_pref("extensions.dorandoKeyConfig.main.key_forward", "][F][");
user_pref("extensions.dorandoKeyConfig.main.key_killSubthread", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_killThread", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_markAllRead", "shift][R][");
user_pref("extensions.dorandoKeyConfig.main.key_markJunk", "shift][!][");
user_pref("extensions.dorandoKeyConfig.main.key_markNotJunk", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_markReadByDate", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_markThreadAsRead", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_newMessage2", "][C][");
user_pref("extensions.dorandoKeyConfig.main.key_nextMsg", "][J][");
user_pref("extensions.dorandoKeyConfig.main.key_nextUnreadMsg", "shift][J][");
user_pref("extensions.dorandoKeyConfig.main.key_nextUnreadThread", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_openMessage", "][O][");
user_pref("extensions.dorandoKeyConfig.main.key_previousMsg", "][K][");
user_pref("extensions.dorandoKeyConfig.main.key_previousUnreadMsg", "shift][K][");
user_pref("extensions.dorandoKeyConfig.main.key_print", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_replyall", "][R][");
user_pref("extensions.dorandoKeyConfig.main.key_selectThread", "][T][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_ゴミ箱", "alt][R][][let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.Trash);\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_スター付き", "shift][S][][let folder = GetDefaultAccountRootFolder().getChildNamed(\"[Gmail]\").getChildNamed(\"スター付き\");\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_ネットショッピング", "alt][N][][let folder = GetDefaultAccountRootFolder().getChildNamed(\"ネットショッピング\")\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_下書き", "alt][D][][let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.Drafts);\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_全てのメール", "alt][A][][let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.Archive);\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_前のフォルダ", "control][P][][gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex - 1, 500);][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_次のフォルダ", "control][N][][gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex + 1, 500);][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_迷惑メール", "alt][J][][let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.Junk);\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_送信済みのメール", "alt][S][][let folder = GetDefaultAccountRootFolder().getFolderWithFlags(Ci.nsMsgFolderFlags.SentMail);\ngFolderTreeView.selectFolder(folder, true);\n][chrome://messenger/content/messenger.xul");