有馬総一郎のブログ

(彼氏の事情)

2021年05月22日 00:33:07 JST - 4 minute read - Mozilla

Thunderbirdのアドオンtbkeysの設定を晒す

ちょっと前に Muttator、Dorando keyconfigの代替となる?Thunderbird 68以後もキーバインド可能なMailExtensions形式アドオンtbkeysを紹介した。

色々設定してみて、大分やりたいことがマウスなしで出来るようになったので設定を晒す。

Main key bindings

{
    "//"      : "次のメッセージ",
    "j"       : "cmd:cmd_nextMsg",
    "//"      : "前のメッセージ",
    "k"       : "cmd:cmd_previousMsg",
    "//"      : "メッセージを開く",
    "o"       : "cmd:cmd_openMessage",
    "//"      : "メッセージ転送",
    "f"       : "cmd:cmd_forward",
    "//"      : "メッセージ削除",
    "#"       : "cmd:cmd_delete",
    "//"      : "メッセージ返信",
    "r"       : "cmd:cmd_reply",
    "//"      : "全ての人に返信",
    "a"       : "cmd:cmd_replyall",
    "//"      : "未設定",
    "x"       : "unset",
    "//"      : "タブを閉じる",
    "d"       : "func:CloseTabOrWindow",
    "//"      : "メッセージ作成",
    "c"       : "func:MsgNewMessage",
    "//"      : "メッセージ閉じて更新",
    "u"       : "tbkeys:closeMessageAndRefresh",
    "//"      : "フラグを付ける/外す",
    "+"       : "cmd:cmd_markAsFlagged",
    "//"      : "リモートコンテンツをロード",
    "ctrl+r"  : "func:LoadMsgWithRemoteContent",
    "//"      : "左のタブに移動",
    "h"       : "window.document.getElementById('tabmail-tabs').advanceSelectedTab(-1, true)",
    "//"      : "右のタブに移動",
    "l"       : "window.document.getElementById('tabmail-tabs').advanceSelectedTab(1, true)",
    "//"      : "本文メッセージ下にスクロール",
    "ctrl+j"  : "window.document.getElementById('messagepane').contentDocument.documentElement.getElementsByTagName('body')[0].scrollBy(0, 100)",
    "//"      : "本文メッセージ上にスクロール",
    "ctrl+k"  : "window.document.getElementById('messagepane').contentDocument.documentElement.getElementsByTagName('body')[0].scrollBy(0, -100)",
    "//"      : "次の未読メッセージ",
    "shift+j" : "cmd:cmd_nextUnreadMsg",
    "//"      : "前の未読メッセージ",
    "shift+k" : "cmd:cmd_previousUnreadMsg",
    "//"      : "メッセージ一覧先頭",
    "g"       : "(function () { var tree = window.document.getElementById('threadTree'); tree.ensureRowIsVisible(0); tree.view.selection.select(0); })();",
    "//"      : "メッセージ一覧最後",
    "shift+g" : "(function () { var tree = window.document.getElementById('threadTree'); var rowCount = tree.view.rowCount; tree.ensureRowIsVisible(rowCount - 1); tree.view.selection.select(rowCount - 1); })()",
    "//"      : "メッセージ一覧上にページスクロール",
    "ctrl+u"  : "(function () { var tree = window.document.getElementById('threadTree'); var currentIndex = tree.view.selection.currentIndex; var pageUpIndex = currentIndex - (tree.getPageLength() - 1); if (pageUpIndex < 0) { tree.ensureRowIsVisible(0); tree.view.selection.select(0); } else { tree.ensureRowIsVisible(pageUpIndex); tree.view.selection.select(pageUpIndex); } })();",
    "//"      : "メッセージ一覧下にページスクロール",
    "ctrl+d": "(function () { var tree = window.document.getElementById('threadTree'); var rowCount = tree.view.rowCount; var currentIndex = tree.view.selection.currentIndex; var pageDownIndex = currentIndex + (tree.getPageLength() - 1); if (pageDownIndex > rowCount - 1) { tree.ensureRowIsVisible(rowCount - 1); tree.view.selection.select(rowCount - 1); } else { tree.ensureRowIsVisible(pageDownIndex); tree.view.selection.select(pageDownIndex); } })()",
    "//"      : "クイックフィルター",
    "ctrl+f"  : "cmd:cmd_toggleQuickFilterBar",
    "//"      : "パネル遷移 フォルダ->一覧->本文",
    "ctrl+w"  : "func:SwitchPaneFocus",
    "//"      : "設定ダイアログ",
    "ctrl+o"  : "func:openOptionsDialog",
    "//"      : "フォルダツリーにフォーカス",
    "ctrl+t"  : "window.document.getElementById('folderTree').focus();"
}

Compose key bindings はあれから変えてない。

殆ど自力で成し遂げたものはなく、 Issues · wshanks/tbkeys · GitHubを漁っていたら、思いの他、色々載っていたのでそれをそのまま持ってきただけだ。

メッセージ一覧の先頭、最後の移動についてはここから↓
Need help with identifying go to the top and bottom functions · Issue #66 · wshanks/tbkeys · GitHub

メッセージ作成のキーバインド時には

window.goDoCommand('cmd_scrollTop');
window.goDoCommand('cmd_scrollBottom');
window.goDoCommand('cmd_moveUp2');
window.goDoCommand('cmd_moveDown2');
window.goDoCommand('cmd_moveTop');
window.goDoCommand('cmd_moveBottom');

も使えるようだ。

フォルダーの色付け、フォルダー表示(移動ではない)についてはここから↓
[FR] func with params · Issue #62 · wshanks/tbkeys · GitHub

{
  "ctrl+1": "window.EditorSetTextProperty('font', 'color', '#ff0000'); window.goUpdateCommandState('cmd_fontColor');",
  "ctrl+2": "window.EditorSetTextProperty('font', 'color', '#00ff00'); window.goUpdateCommandState('cmd_fontColor');",
  "ctrl+3": "window.EditorSetTextProperty('font', 'color', '#ff00ff'); window.goUpdateCommandState('cmd_fontColor');"
}

Thunderbirdでのフォルダの表示。余りThunderbirdのフォルダ表示は使ってこなかったが、これを機に使うようにすると便利になるかも。

window.gFolderTreeView.mode = 'all';
window.gFolderTreeView.mode = 'unread';
window.gFolderTreeView.mode = 'favorite';
window.gFolderTreeView.mode = 'smart';
window.gFolderTreeView.mode = 'unread_compact';
window.gFolderTreeView.mode = 'favorite_compact';
window.gFolderTreeView.mode = 'recent_compact';

試してないが、メッセージ移動も出来るようだ。

   "o": "window.MsgMoveMessage(window.MailUtils.getExistingFolder('imap://user@host.name/folder/path'))",

クイックフィルターについてはここから↓
Quick Filter / Quick Search for Sender / Recipients / Subject · Issue #48 · wshanks/tbkeys · GitHub

フォルダ遷移は、どうしても上手く行かないので、パネルフォーカスのキーバインドを設定する。

フォルダペインにフォーカスするについてはここから↓
How do I find more “func:”? · Issue #69 · wshanks/tbkeys · GitHub

func:SwitchPaneFocus
func:openOptionsDialog

window.document.getElementById('folderTree').focus();といったやり方で可能みたいだ。

フォルダペインにフォーカスしてしまえば、後は↑↓上下の矢印キーで移動できる。本当は一気にスター、とか送信済みとかのフォルダに移動したいが、これで十分。

最後に、出来ればmuttextract_url.plみたいに本文のリンクをマウスなしで叩ければ嬉しい。

それには本文検索をして、リンクと一致させてEnter叩くしかないかな、と。

やりかたとしては、

  1. メッセージ一覧で該当のメールメッセージ選択
  2. 本文メッセージにフォーカスする
  3. /を押して本文検索する1
  4. リンクとなっている文字、もしくはURLを入力する
  5. 自動でその単語にフォーカスするので、該当のリンク、URLならEnter
  6. もし次のリンク、URLならCtrl+gで次の検索

上記のようやれば、殆どマウスは不要となる。マウスが使えない呪いかけられたわけでも、マウス使ったら負けって訳でもないんだが。

以上、だたのコピペの固まりだが、このご時世にメーラーを使っている奇特な方々へ、少しでもThunderbirdの素晴らしさが伝われば幸いだ。


  1. 本文にフォーカスしてないとできない。メッセージ一覧にフォーカスしているときは青色の帯が見える。本文にフォーカスしながらメッセージの移動は可能。 ↩︎