有馬総一郎のブログ

(彼氏の事情)

Mutattorの代わりにDorando Keyconfigを使う

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

そして、自分でコードを書いて、それをショートカットキーに割り当てることもできるので、適当に書いてみて、何とか前後フォルダの移動、特定フォルダの移動を実現させることができた。

次のフォルダに移動
1
gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex + 1, 500);
前のフォルダに移動
1
gFolderTreeView.selection.timedSelect(gFolderTreeView.selection.currentIndex - 1, 500);
送信済みフォルダに移動
1
2
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]フォルダを取得して、更にそこからスター付きのフォルダを取得するいう形になった。

スター付き
1
2
let folder = GetDefaultAccountRootFolder().getChildNamed("[Gmail]").getChildNamed("スター付き");
gFolderTreeView.selectFolder(folder, true);

当然、自分が作ったフォルダにも同じやり方で移動できる。

ネットショッピング
1
2
let folder = GetDefaultAccountRootFolder().getChildNamed("ネットショッピング")
gFolderTreeView.selectFolder(folder, true);

本当はスマートなコードの書き方やデバッグの仕方があるのだろうけど、情けないながら、以下のような泥臭い方法で調査・実装を進めた。

以下のソースから参考になりそうな箇所を検索しつつ、眺める。

そして、ソース、デバッグは[Ctrl+Shift+i] もしくは メニュー -> ツール -> 開発ツール(E) -> 開発ツールボックス(T) から行うことができる。

以下、 pref.js の自分が設定した Dorando keyconfig 部分

pref.jsのDorando keyconfig部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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");

Comments