2020年10月18日日曜日

アドレスリストを展開してチェックするオプション(Check and Send 2.0.14)

 Check and Send 2.0.14に、アドレスリストを展開してチェックするオプションを追加しました。デフォルトでONになっています。

Check and Send 2.0.14
https://hogi.sakura.ne.jp/ja/cas/cas.rhtml

 
このオプションがONになっていると、アドレスリストの中のアドレスに対しても、宛先や宛名のチェックがされるようになります。

一方で、これまでの中身をチェックしない動作も、アドレスリストをホワイトリスト的に使用できる利点もあるので残しておきました。

どちらか運用に合わせて使っていただければと思います。
 

Thunderbird 78にアップデート後アドオンが動作しない場合の対処

Thunderbird 78にアップデートして、アドオンもThunderbird 78対応版にアップデートしたのに、動かないという報告をもらっています。

再現できていないため原因がわからず、手を打てていない状況ですが、アドオンの再インストールなどで改善する方が多いようです。

アドオンが動かない、設定が保存されないなどがある方は、以下を試してみてください。Check and Send、EnForward、Tag Popupでうまくいったという報告をもらっています。

1. アドオンをOFF/ONする

アドオンマネージャで、動作がおかしいアドオンのトグルボタン(スイッチ)をOFFにしてから、再度ONにしてみてください。運が良ければ、これだけでなおることがあるようです。
 

2. アドオンを再インストールする

アドオンのOFF/ONでも治らない場合は、再インストールをしてみてください。以下の手順で、必ず一度削除してから、インストールするようにしてください。(上書きはNG)

アドオンマネージャで、アドオンの「・・・」ボタンから削除を選んだあと、アドオンマネージャのタブを閉じてください。これで、アドオンが削除されます。再度アドオンマネージャを開いて、先ほど削除したアドオンが消えていることを確認してください。

次に、アドオンマネージャの「アドオンを探す」のところに、アドオン名を入れて検索してしてください。新しいタブに検索結果がでてくるので、「Thunderbirdへ追加」ボタンを押して、インストールしてください。最後に、Thunderbirdを再起動してください。
 
 
再インストールした場合は、設定もクリアされてデフォルト値に戻るので、再度設定してください。大部分の方は、設定すらまともにできない状態だと思うので、クリアされても影響はないかと思っています。

他のアドオン作者さんでも、似たような状況が起きているようで、もしかしたら、アドオンではなくてThunderbirdの設定読み出しのところに不具合があるのかもしれません。
 
 

2020年10月17日土曜日

Message Header Toolbar Customize 2.1.0の新機能

 Message Header Toolbar Customizeですが、ひとまず、Thunderbird 78で削除されてしまった機能と同等のことはできるようになったかなと思います。


次のステップとして、これまでThunderbirdにはなかった機能を追加してみました。
 
Message Header Toolbar Customize v2.1.0

クイックフィルターツールバーのカスタマイズ

メッセージヘッダツールバーと同じように、クイックフィルターのツールバーも、
  • アイコンの横にテキスト
  • アイコンのみ
  • テキストのみ
に設定できるようにしました。ツールバーボタンの順序変更や非表示も同様にできます。クイックフィルターのツールバーで右クリック→「ツールバーをカスタマイズ」で、カスタマイズウィンドウを開いてください。あとは、メッセージヘッダツールバーのときと同じです。

以下は、アイコンのみの例です。ちょっとだけですが、検索の入力欄が広くなります。
 
 
 このカスタマイズは、「ピン」ボタンとそのあとの区切り線に対してはできません。これは仕様とさせてください。
 

ツールバーボタンごとに表示をカスタマイズ

v2.0.x系では、一括でしかアイコン/テキスト表示を変更できませんでしたが、これを個別にできるようにしました。

以下の例は、返信と転送を「アイコンの横にテキスト」、その他を「アイコンのみ」に設定したものです。
こんなかんじで、どっちだったか紛らわしいものはテキストを表示するのもいいかなと思います。
 

 
個別設定をする場合は、カスタマイズウィンドウで、「個々に設定」を選択してください。すると、リストの右に「アイコン」と「テキスト」のボタンが出てきます。変更したい項目を選択した状態で、このボタンを押してください。

これらのボタンはトグルボタンになっています。へこんでいる状態がONを表しています。以下の例ですと、アイコンボタンがONで、テキストボタンがOFF状態なので、選択中のスレッドボタンはアイコンのみ表示になります。

また、表示順のところの表示もボタンの表示状態を表しています。
  • アイコンあり+ボタン名:アイコンの横にテキスト
  • アイコンあり+ボタン名がかっこ書き:アイコンのみ
  • アイコンなし+ボタン名:テキストのみ
  • アイコンなし+ボタン名がグレー表示:ボタンを表示しない

複数選択して、同時に切り替えも可能です。
 

 

ツールバーボタンのテキストの変更

ツールバーボタンのラベルも変更できるようにしてみました。テキストが長くてスペースを取ってしまっている場合に使えるかと思います。

以下の例は、迷惑メールに分類するボタンが「迷惑マークをつける」と長いので、「スパム」に変更しています。
 

 
このテキスト変更もカスタマイズウィンドウから行います。カスタマイズウィンドウに「名前変更」というボタンがあるので、それを押してください。すると、入力フォームがポップアップするので、新しい名前をいれてOKを押してください。一度変更したものを、もとの名前に戻す場合は、入力フォームを空にしてOKを押してください。

一点注意いただきたいのは、「適宜返信」ボタンの場合です。このボタンは、選択しているメールの状態によってボタンが変わります。そのため、「適宜返信」の名前を変更する場合は、入力フォームが取りうるすべてのテキストが入力された状態で表示されます。
 

 
上の図のように、テキストがコンマ区切りで入力されています。このコンマは消さないで、それぞれのテキストを変更してください。コンマを消したり、余分に追加すると、その入力は無効になります。また、このように、コンマは区切り文字として使用されるので、ボタンのラベルとしては使用できません。

カレンダーボタンのカスタマイズ

この機能はv2.1.0 Beta4からの機能になります。タブバーにあるカレンダーボタン/ToDoボタン、ステータスバーにあるTodayボタンを非表示にできます。

メインツールバー上で右クリックすると、コンテキストメニューの中に「カレンダーボタンをカスタマイズ」というメニューが追加されています。これをクリックすると、ポップアップウィンドウが開いて、チェックボックスでどのボタンを表示するかを設定できるようになっています。非表示にしたいボタンのチェックを外してください。
 
  • カレンダー/ToDoボタンを非表示にした場合:
 
 
  • Todayペインボタンを非表示にした場合:

 
 

スターボタンと印刷ボタン

この機能はv2.1.0 Beta5からの機能になります。メッセージにスターを付けるボタンと、印刷ボタンを追加しました。デフォルトでは非表示になっているので、カスタマイズウィンドウから表示に切り替えてください。
 

 
 
新しい機能は以上になります。使う人は少ないかもしれませんが、そこそこ使える機能かなと思っています。感想等聞かせてもらえるとうれしいです。

最後に、注意点です。
  • v2.0.xとv2.1.0は設定データが変わっています。v2.0.xからv2.1.0にアップデートすると、自動で新しい形式に変更されます。逆に、v2.1.0からv2.0.xに戻したい場合は、そのままでは動きません。一度、v2.1.0をアンインストールしてから、v2.0.xをインストールしなおしてください。
  • バグ等により、もしツールバーの表示がおかしくなり、戻せなくなってしまった場合は、おかしくなったツールバー上でカスタマイズウィンドウを開いて、「リセット」ボタンを押してください。それでも、なおらない場合は、一度アンインストールしてから、インストールしなおしてください。
 
 
 
 
 

2020年9月22日火曜日

Thunderbird 78で消されたヘッダビューのボタンを復活させてみました (Message Header Toolbar Customize 2.0.6)

Message Header Toolbar Customize 2.0.6を公開しました。

予定にはなかったのですが、タイトルの通り、新機能が少しあります。


ツールバーボタンの追加

Thunderbird 78で、スレッド、タグ、形式を指定して転送ボタンが消されてしまったので、再現してみました。個人的には、使用頻度はそれほど高くないけど、ないならないでちょっと寂しいかなというボタンたちです。


Thunderbird 68と同じ動きになるように作っています。上記の例は「アイコンの横にテキスト」で表示していますが、もちろん、他のボタンと同じようにアイコンのみの設定にもできます。

転送ボタンは、メニューから、本文として転送するか、添付ファイルとして転送するかを選べるようになっています。ボタン部分を押すと、Thunderbirdのオプションで設定している方式で転送します。これを使うのであれば、もとの「転送」ボタンは非表示にしてしまっていいかなと思います。同じこともできるので。

なお、これらのボタンはデフォルトでは表示されません。カスタマイズウィンドウを開くと、以下のようにリストの一番下で「非表示」となっているので、表示に切り替えてください。必要に応じて表示順も変更してください。
 
 
注意点:
  • 今回追加した転送ボタンは、もとからある転送ボタンと区別するために、このリスト中では「形式を指定して転送」と表示されています。ツールバーボタンでは「転送」になっていて、表示が違うので注意してください。
  • メッセージウィンドウ(別ウィンドウで開いたとき)にも「スレッド」がありますが、表示設定にしていてもでてきません。このウィンドウではタブでスレッドが開けないためです。Thunderbird 68でもツールバーには置けるけど表示されない動作だったので、特に修正しなくてもいいかなとそのままにしています。


カスタマイズウィンドウで複数選択

もう一つの追加機能として、表示順のリストのところで複数選択できるようにしました。Ctrl+クリックで個別に選択、Shift+クリックでまとめて選択できます。複数選択すると、移動と表示/非表示の切り替えがまとめてできます。表示/非表示は、選択中の先頭の項目に合わせてまとめて変更されます。

例えば、以下の状態で表示ボタンを押すと、3つまとめて表示設定に変更できます。



その他こまごま
  • メッセージウィンドウのカスタマイズの時に、表示を選ぶリストがメッセンジャーウィンドウ(メインウィンドウ)の設定で初期化されてしまっていたのを修正しました。カスタマイズを開いたときに、現在の表示とあっていなかっただけで、設定変更はもとから問題ありません。
  • 各種ボタンを使えないときは無効化するようにしました。(例:先頭の項目を選択しているときは、上へボタンを無効化)

2020年9月19日土曜日

Message Header Toolbar Customize 2.0.5

Message Header Toolbar Customize 2.0.5を公開しました。

UI周りの調整と不具合修正のみで、新しい機能はありません。

今回から、カスタマイズウィンドウにアイコンが表示されるようになっています。だいぶ、見栄えが良くなったかなと思います。


変更点は以下になります。
  • カスタマイズウィンドウを閉じると、エラーメッセージが出るのを修正
  • 表示ボタン、非表示ボタンを一つのボタンに統合
  • 非表示設定のボタンはボタン名をグレーアウトするように変更
  • ボタンのリストにアイコン表示を追加
  • フォントサイズ、ボタンサイズを調整

アイコン設定は、アドオンのサンドボックス外のデータを参照するので、ダメもとで試してみたのですが、意外とできてしまいました。それよりも、スタイルシートの扱いのほうに手間取りました。HTML/CSSは詳しくないので、だいぶ勉強になりました。

なんか問題な気もするので、そのうち塞がれてできなくなってしまうかもしれませんね。

今回の更新で、やりたかったことはできましたので、これからは不具合修正が中心になっていくと思います。今のところ、ユーザさんは120人くらいで、ポジティブなフィードバックしかもらっていないですが、これから人が増えてくれば、他のアドオンとの組み合わせで問題が出たり、いろいろあるのかなとは思っています。


2020年9月16日水曜日

アドオンインストール時の警告について

Thunderbird 78から、アドオンインストール時に、アクセス許可を聞いてくるようになっています。ちょっとびっくりされるかもしれませんが、以前より安全性が増したということで。

で、これ2タイプあります。

1. 具体的なアクセス権を聞いてくる場合

純粋にThunderbird 78のフレームワークであるMailExtensionsだけで作られたアドオンの場合に、このような聞き方をしてきます。アドオンは、ここで書かれた以上のことはしません。


アドオンの機能と照らし合わせて、明らかに不要なものを要求していたら、注意が必要かもしれません。

ただ、ここに挙げられているからといって、アドオンがその操作を必ずするとは限りません。アドオンの設定ファイル(manifest.json)に、アクセス権を宣言するところがあるのですが、アドオン作者が必要ないのに書いてしまう場合があります。足らないと動かないので分かるのですが、余分に要求しても動作に影響がなく気づかないので。
 
なので、ちょっとおかしいなと思ったら、ひとまずインストールはやめて、信頼できるか情報収集したほうがいいかなと思います。

上記のCheck and Sendの例もそうで、「ブラウザーのタブへのアクセス」を要求していますが実際はしていません。APIのドキュメントがわかりづらくて間違ってつけてしまっているだけです。アクティブなタブを取得する(タブをさわる)ので必要かなと思ってアクセス権を設定したのですが、これは何かURLを開いたりするときに必要なものらしくCheck and Sendの処理では不要でした。次回アップデートで削除する予定です。最後にまとめますが、他のアドオンでも同じ間違いをしてしまっています…


2. 無制限なアクセスを要求してくる場合

悩ましいのがこのタイプで、半分以上のアドオンはこれになると思います。これに驚いてこのページにたどり着いた方もいるかと思います。


これは、WebExtension Experimentsという仕組みを使っているアドオンの場合に出ます。WebExtension Experimentsは、Thunderbird 68のレガシーアドオンのように、Thunderbirdの内部を触るために使用されます。Thunderbird 78からの新しい仕組みであるMailExtensionsは制約が大きく、できることが非常に限られてしまうため、この仕組みを使っているアドオンが多いです。Thunderbird 68のアドオンを78対応したアドオンは、ほぼこれかと思います。

内部を自由に触れてThunderbirdとしては管理できないので、最悪ケースで「完全に無制限なアクセス」ということですね。

インストール後、アドオンの許可設定のところを見ると、以下のように「許可設定を必要としていない」とか、具体的なアクセス内容が書かれていたりしますが、これはあくまで一部で、WebExtension Experimentsを使って、それ以外のアクセスを必ずしています。Message Header Toolbar Customizeでは、ThunderbirdのUIに手を出しています。(ツールバーボタンの表示(collapsed属性)を変えるのと、順番を変える)


非常に怖い表現ですが、Thunderbird 68と何も変わらず、これまでもあったリスクを通知するようになっただけとも言えます。

このタイプのアドオンは、アドオン作者との信頼関係(性善説)の上に成り立っています。心配だったら、アドオン作者に思い切って聞いてみるのもいいかなと思います。


アクセス権の理由

最後に、私のアドオンのアクセス許可要求とその理由をまとめておきます。変なことはしていないので安心してください。

  • Check and Send
    • メールアカウントとそのフォルダーへのアクセス
      差出人ごとの設定、差出人情報のポップアップのために差出人情報にアクセスしています。
    • アドレス帳および連絡先の読み取りと変更
      宛先がアドレス帳にあるか/ないかのチェックに使用しています。変更はしていません。
    • 編集および送信するメッセージの読み取りと変更
      送信処理への割り込みと、宛先、件名、本文のチェックのための読み出しをしています。
    • ブラウザーのタブへのアクセス
      誤設定でこれに該当する処理はありません。次回更新で削除します。
      v2.0.13で削除しました。
  • EnForward
    • メールアカウントとそのフォルダーへのアクセス
      オプションでメール送信に使う差出人(サーバ)を指定するために、差出人情報を読みだしています。
    • 編集および送信するメッセージの読み取りと変更
      メール作成ウィンドウで宛先、件名を設定するために使用しています。
    • メッセージの読み取りとマーク付け、タグ付け
      利用できるタグを取得するために使用しています。
    • ブラウザーのタブへのアクセス
      誤設定でこれに該当する処理はありません。次回更新で削除します。
    • 無制限のアクセス(WebExtension Experiments)
      送信メッセージの作成(ローカルに一時ファイルを作成)、メッセージの送信をしています。
  • Evernote Tab
    • ブラウザーのタブへのアクセス
      EvernoteのWebページをタブに開くのに使用しています。
    • ナビゲーション中のブラウザーアクティビティへのアクセス
      タブでEvernoteの操作をするため、Cookieを使用するために使用しています。
  • Maximize Message Pane
    • メールアカウントとそのフォルダーへのアクセス
      フォルダ選択の変更を検知するのに使用しています。これをトリガにメッセージペインの最大化を解除しています。
    • メッセージの読み取りとマーク付け、タグ付け
      表示メッセージの変更を検知するのに使用しています。添付ファイルビューがメッセージ表示のたびに出てきてしまうので、これをトリガに添付ファイルビューを非表示にしています。
    • 無制限のアクセス(WebExtension Experiments)
      メッセージペインなどを非表示にする(collapsed=true)のに使用しています。
  • Message Header Toolbar Customize
    • 無制限のアクセス(WebExtension Experiments)
      ツールバーボタンの非表示(collapsed=true)、ボタンの並べ替えに使用しています。
  • New Tab Button
    • ブラウザーのタブへのアクセス
      誤設定でこれに該当する処理はありません。次回更新で削除します。
    • 無制限のアクセス(WebExtension Experiments)
      メッセージをタブで開くのに使用しています。(WebページのURLを開くAPIはあるのに、メッセージを開くAPIがないため)
  • Priority Switcher
    • メールアカウントとそのフォルダーへのアクセス
      選択中のフォルダのサーバタイプを取得するのに使用しています。IMAPのときだけソースを書き換えるオプションや、ソース書き換えのときのIMAP用の特別処理がいるかどうかの判断に使っています。
    • メッセージの移動、コピー、削除
      ソース書き換えの時に、もとのメッセージを削除するために使用しています。
    • メッセージの読み取りとマーク、タグ付け
      重要度ヘッダ(X-Priority等)の読み出し、ソース書き換えのためのメッセージ全体の読み出し、スター付きの判定のために使用しています。
    • 無制限のアクセス(WebExtension Experiments)
      重要度の変更をしています。また、ソース書き換えのためにローカルに一時ファイルを作成し、それをThunderbirdのデータベースに登録しています。
  • Tag Popup
    • メッセージの読み取りとマーク、タグ付け
      利用可能なタグの読み出し、メッセージにつけられたタグの読み出し、メッセージへのタグ追加/削除のために使用しています。
    • ブラウザーのタブへのアクセス
      誤設定でこれに該当する処理はありません。次回更新で削除します。
    • 無制限のアクセス(WebExtension Experiments)
      ヘッダビューでタグのつけ外しをするため、ヘッダビューのクリックの検出、タグラベルの追加をしています。


2020年9月13日日曜日

ヘッダビューのツールバーに空白、区切り線を追加する


Message Header Toolbar Customize v2.0.4で、スペースと区切り線を追加できるようにしました。

ダウンロード


利用頻度は高くないかもしれませんが、Thunderbird 68ではできていたので。こんな感じにできるようになります。



カスタマイズウィンドウに、以下のように「スペース」と「区切り線」ボタンが追加されています。ボタンを押すと、リストで選択中の項目の前にスペース/区切り線が追加されます。上へ/下へで移動することもできます。追加したスペース/区切り線を削除したい場合は、「非表示」ボタンをおしてください。通常はボタン名に「(非表示)」がつくだけですが、スペース/区切り線の場合は削除されます。



また、これはThunderbird 68にはなかったのですが、メールを複数選択したときのツールバー(アーカイブと削除)の表示も変えられるようにしました。カスタマイズウィンドウに「複数選択時のツールバーにも適用する」というチェックボックスがあるので、これをチェックしてください。こんな感じで、アイコン表示だけにできたりします。


要望があったのでやってみたのですが、これはちょっと微妙かもしれません。そんなにスペースに困るわけでもないですし、誤操作してしまいそうな気もします。アイコン表示に統一感が欲しい方は試してみてください。

2020年9月8日火曜日

Thunderbird 78のメッセージヘッダビューのツールバーをカスタマイズする

Thunderbird 78から、メッセージヘッダビューにあるツールバーが固定になっています。

以下のバグが挙がっていますが、対応にはしばらくかかりそうです。

[Bug 1556261] Implement message header button customisation

で、アイコンの横に文字があり場所をとっていやなので、アドオンで対処してみました。欲しい方もいらっしゃると思うので、公開します。あくまで、上記バグが対応されるまでのワークアラウンドと考えてください。

Message Header Toolbar Customize

メッセージヘッダのツールバーをこんな感じに変更できます。

■Thunderbird 78デフォルト(変更前)


■アドオンで変更後
表示をアイコンのみ、迷惑メールボタンを非表示、その他メニューを一番後ろに移動しています。




設定方法

設定は、以下から行います。
  • ツールバーの「その他」ボタンにある「ツールバーをカスタマイズ」
  • ツールバーの右クリックメニュー
※アドオンのオプションからの設定は、v2.0.3で廃止しました。
 

v2.0.3から、メインウィンドウとメッセージウィンドウそれぞれで設定できるようにしました。v2.0.2からバージョンアップされた方は、メッセージウィンドウのツールバーがデフォルトに戻っているので、再設定してください。

ボタンのアイコン表示
「表示」のところで、ボタンのアイコン表示を切り替えます。以下から選んでください。
  • アイコンの横にテキスト
  • アイコンのみ
  • テキストのみ
「アイコンの横にテキスト」にする方はいないと思いますが、一応いれておきました。

ボタンの順序、非表示の設定
「表示順」のところで変更します。メッセージヘッダビューのツールバーにあるボタンが列挙されているので、上へ/下へボタンで順序を設定してください。ツールバーには、上にあるものから順に表示されます。

表示したくないボタンがある場合は、非表示ボタンをおしてください。非表示にすると、ボタン名のところに「(非表示)」が表示されます。非表示にしたものを元に戻すときは、表示ボタンを押してください。

リセットボタンは、Thunderbirdのもとの並びに戻すときに使用します。リセットを押すと、Thunderbirdを再起動するようにメッセージがでるので、Thunderbirdを立ち上げなおしてください。
 
 
制限事項

いくつか制限事項があります。
  • IDを持たないボタンには対応できません。基本は大丈夫ですが、ツールバーに独自のエレメントを追加するような特殊なアドオンがあると、うまく動かないかもしれません。
  • 非表示設定は、ボタンを隠している(collapsed)しているだけで、削除はされていません。何かの機能によって、再表示されることがあるかもしれません。
  • アドオンを削除すると、ツールバーはもとに戻ります。
  • アドオンのデバッグで一時的に追加されているボタンには対応できません。

 

更新履歴など

バージョンアップでいくつか機能追加をしています。以下のリリースノートを参考にしてください。また、アドオンインストール時の警告についてまとめているので、こちらも参考にしてください。


 
 



2020年9月6日日曜日

MailExtensions版 Priority Switcher

Thunderbird 78用のPriority Switcherを作成しました。

Priority Switcher 2.0.1

旧バージョンと比べてだいぶ操作が変わっているので、簡単に説明します。前のほうがいいというところもあると思いますが、制限が多くこのような形になってしまいました。


重要度の表示、変更

旧バージョンでは、スレッドペインにアイコンを追加して、重要度の表示や切り替えをしていましたが、MailExtensions化にともないできなくなってしまいました。(がんばって実装したらできるのかもしれませんが…)

そこで、これらの機能をツールバーボタンに集約しました。以下のように、ツールバーボタンのアイコンとテキストで、選択中のメッセージの重要度を表示します。



また、ボタンをクリックすると、以下のようにポップアップが表示されます。ここでラジオボックスをクリックすると、重要度を変更できます。リセットをクリックすると、元の重要度に戻ります。



コンテキストメニューにも、ポップアップと同様のメニューがあるので、そちらからも変更できます。

ちなみに、スレッドペインへのアドオンでの項目追加は、開発元へ要望としては挙がっています。これが対応されたら、スレッドペインでの重要度表示、切り替えも対応検討します。

Add an API to allow adding columns to the message list


メッセージソースの書き換え

これは、旧バージョンと同じ仕様です。

重要度を変更した際、デフォルト設定では、Thunderbirdのインデックスファイル(.msf)のみを書き換えます。この場合、以下の制限があります。
  • インデックスファイルを再構築すると重要度がもとに戻ってしまう。フォルダの修復などをすると発生。
  • IMAPで別のメールクライアントでメッセージを開いても、重要度の変更は反映されない(もとの重要度のまま)。

これを回避するには、メッセージ本体を書き換える必要があります。ポップアップ、コンテキストメニューに「ソースを書き換え」というのがあるので、これを実行すると、新たに重要度を書き換えたメッセージを作成し、古いメッセージを削除します。メールのコピー、編集、削除が発生するので、メールのサイズや環境によっては、少し時間がかかります。

また、この書き換え処理を、重要度を変更したとに自動で実施するオプションもあります。選択肢として、
  • 常時自動で書き換える
  • IMAPサーバのときのみ、自動で書き換える
が選べます。

インデックスファイルの再構築は、それほど起こることではないと思うので、自動書き換えをする場合は「IMAPのときのみ」の運用がいいかなと思います。

また、この書き換えは、IMAPサーバによってはうまく動かないかもしれません。その場合は、私がそのサーバを使って確認することができないので、仕様とさせてください。実は、Gmail IMAPがその筆頭で、ワークアラウンドを入れて動くようにしています。


重要度ヘッダ

重要度を表すメールヘッダはいくつかありますが、ThunderbirdはX-Priorityしかみていません。今回、新規に作り直すにあたって、過去要望されていたほかのヘッダも見るオプションを作りました。ただし、あくまで、Priority Switcherのアイコン表示だけで、スレッドペインの重要度欄には影響しません。

オプションに、「Importance, Priority, X-MSMail-Priorityも解釈する」という項目があるので、これを有効にしてください。デフォルトではOFFになっています。

解釈するメールヘッダとアイコン表示の関係は以下になります。

アイコン表示
X-Priority
Importance
Priority
X-MSMail-Priority
最高
1
High
Urgent
High
2
-
-
-
標準
3
Normal
Normal
Normal
4
-
-
-
最低
5
Low
Non-urgent
Low
 
この機能は、実装したものの、これらのヘッダがあるメールがなく、動作確認できていません。おかしい動きがあれば、教えてください。


メッセージ削除時の重要度チェック

重要度が高いメッセージ、スター付きのメッセージの削除時に警告をだすことができます。旧バージョンでは、Thunderbirdの削除機能をつぶしてやっていましたが、今回は、Thunderbirdの機能はそのまま残し、Priority Switcherの機能として実装しました。ちょっとここは、不満のある方も多いと思いますが、MailExtensionsの制約として許してください。

まず、オプションを開いて、チェックの条件を設定してください。
  • 警告を表示する重要度(デフォルト:高以上)
  • スター付きのメッセージの削除で警告するかどうか(デフォルト:ON)
  • 迷惑メールはチェックから除外するかどうか(デフォルト:ON)
を設定できます。

最後の迷惑メールの設定は、ONのままでいいかと思います。迷惑メールフィルタの精度がよくない場合は、チェックを外しておいたほうが安全かもしれません。

設定ができたら、ポップアップ、コンテキストメニューに「重要度をチェックしてメッセージを削除」というのがあるので、メッセージを選択した状態でこれを実行してください。選択しているメッセージに設定した条件にマッチしたものがあると、以下のアラートが出ます。(味気なくてすみません…)



削除してよければ、「削除」、やめたければ「キャンセル」または×ボタンを押してください。「高重要度のメッセージを除く」をチェックして「削除」ボタンを押すと、条件にマッチしたメッセージを除外して削除ができます。

警告ウィンドウが表示されているときに、メッセージの選択を変更して削除を押しても、前の選択状態で削除を実行するので注意してください。モーダルダイアログで選択変更できないようにできればよかったのですが、これも、MailExtensionsの仕様でできませんでした。

このチェック付き削除は、キーボードショートカットからも実行できます。デフォルトではOFFになっているので、キーを設定して使用してください。キー設定は、アドオンマネージャを開いて、歯車ボタンの「拡張機能のショートカットキーの管理」からできます。

また、コンテキストメニュー、ツールバーボタン(ゴミ箱アイコンのとき。後述。)をShiftキーを押しながら実行すると、メッセージをゴミ箱に移動するのではなく、完全に削除します。


ツールバーボタンのコマンドの選択

MailExtensionsの制約で、アドオンはツールバーボタンを一個しか持てません。そのため、1つのツールバーボタンに機能を詰め込んでいます。オプションに「ツールバーコマンド」のセクションがあるので、ここで好みの設定に変えてください。

設定項目は、
  • 重要度を変更する
  • 重要度をチェックしてメッセージを削除する
の2つがあって、この組み合わせで、ツールバーボタンの表示、動作が変わります。

重要度を変更する
重要度をチェックしてメッセージを削除する
アイコン
ポップアップ
X
X
重要度表示
表示される。「重要度をチェックしてメッセージを削除」も表示される。
X
-
重要度表示
表示される。「重要度をチェックしてメッセージを削除」は表示されない。
-
X
ゴミ箱アイコン
表示されない。ボタンをクリックすると「重要度をチェックしてメッセージを削除」が実行される。
-
-
重要度表示
表示されない。ボタンをクリックしても何も起きない。
 
3番目(ゴミ箱アイコン)は、前記の「メール削除時の重要度チェック」に不満な方へのワークアラウンドのつもりで用意しました。重要度の表示と変更がツールバーボタンでできなくなりますが、通常のゴミ箱ボタンのように使用できます。削除機能は別アドオンに切り出そうかとも思ったのですが、バージョンアップで難民が出そうなので、苦肉の策ですがこの方法をとりました。


簡単にといいながら、結構かいてしまいました。使い方は以上になります。バグや要望等ありましたら、コメントにお願いします。



2020年8月30日日曜日

メッセージの取得【MailExtensionsメモ】

Thunderbird 78対応アドオン作成のメモ。

■表示しているメッセージの取得
messageDisplay.getDisplayedMessage() で取得する。

//アクティブなタブを取得して  
let tabs = await browser.tabs.query({
  active: true,
  currentWindow: true
});

//そのタブで表示しているメッセージを取得する
let msg = await browser.messageDisplay.getDisplayedMessage(tabs[0].id);


■選択されているメッセージの取得
mailTabs.getSelectedMessages()で取得する。最大100メッセージしか返さないので、それ以上の場合は、messages.continueList()で、残りを取得する。

//アクティブなタブを取得して  
let tabs = await browser.tabs.query({
  active: true,
  currentWindow: true
});

//そのタブが、3ペインタブだったら、選択しているメッセージを取得する
if (tabs[0].mailTab) {
  let msgs = await browser.mailTabs.getSelectedMessages(tabs[0].id);
  //選択メッセージに何か処理。メッセージは、msgs.messagesに入っている。  

  //残りがある場合は、msgs.idにIDがセットされているので、これがundefinedになるまで繰り返す
  while (msgs.id) {
    msgs = await browser.messages.continueList(msgs.id);
    //選択メッセージに何か処理。メッセージは、msgs.messagesに入っている。

  }
}


■メッセージ全体を取得
mailTabs.getSelectedMessages()等で取得されるオブジェクトは、メッセージの一部の情報しかない。全ヘッダ情報など、他の情報を取るには、messages.getFull()メッセージ全体を読み込まないといけない。読み込み時間が必要なため、大量のメッセージを扱う場合は要注意。

let msg = await browser.messageDisplay.getDisplayedMessage(tabId);
let fullMsg = await messages.getFull(msg.id);

//fullMsg は、Partごとのオブジェクトになっている。


■メッセージのソースを取得
メールのソースそのものを文字列として読み出す。読み込み時間が必要なため、大量のメッセージを扱う場合は要注意。

let msg = await browser.messageDisplay.getDisplayedMessage(tabId);
let fullMsg = await messages.getRaw(msg.id);

2020年8月28日金曜日

ThunderbirdでのGoogle連絡先の同期について

gContactSyncのThunderbird 78版がまだ出ないこともあって、以前作っていたGoogle Contactsの復活要望をよくもらうようになりました。

Google連絡先とThunderbirdのアドレス帳周りのちょっとした情報を紹介します。


Thunderbird本体での対応
2022/1/6追記
Thunderbird 91でCardDAV対応がされました。使い方を以下にまとめてみたので参考にしてください。


Thunderbirdのアドレス帳と他サービスとの連携については、ThunderbirdのCardDAV対応が本命かなと思っているのですが、それに関する内容がtb-planningメーリングリストに投げられていたので紹介します。

Where we're at with CardDAV

簡単に抜粋/意訳すると…

  • Thunderbird 78 (ESR)
    • 時間がなくて対応できなかった。(ホントはTB78でアドレス帳の作り直しが計画されていて、その中にCardDAVもありました。)
    • 隠しオプション「mail.addr_book.carddav.enabled」を使うと、現時点の実装が試せる。
    • 実装されているのは、連絡先のダウンロード、連絡先の変更のサーバへの送信で、同期はできない。
  • Thunderbird 81 (Beta)
    • 定期的/オンデマンドでの同期ができる。
    • 定期的な同期はThunderbird起動時と、30分ごと。設定は変更できない。
    • 隠しオプションは引き続き有効。
    • 以前のCardDAV実装で作ったアドレス帳がある場合は削除が必要。
  • Thunderbird 82 (Dailyの計画)
    • レビュー中で近いうちに取り込まれる。
    • 取り込まれたら隠しオプションも廃止する。
  • 将来これらは使えるようになるの?
    • Yes。来年のESRで新しいアドレス帳UIになる。でも、まだまだやることがいっぱいある。
  • Google 連絡先にはつなげられる?
    • 今はできない。コードはある。Googleの承認待ち。(期待できそうですね!)

時間はかかりそうですが、Google 連絡先の同期も含めて、考えてくれているようです。


CardDAVならアドオンで対応もできる

gContactSyncのThunderbird 78版はまだですが、TbSyncProvider for CalDAV & CardDAVがThunderbird 78に対応しています。この二つを組み合わせるとCardDAVでGoogle 連絡先にアクセスができます。CardBookも同様にCardDavでアクセスしますが、これは独自のアドレス帳をタブに構築します。

なお、グループやラベルの同期はできません。これはGoogle側の仕様のせいなので、作者さんを責めないでください。ちょっと触っただけでやめてしまったので、他にも制限があるかもしれません。


Google Contacts アドオンはどうなった?

申し訳ないんですが、「今のところ予定はありません」と回答させてもらっています。

当時のことを思い起こすと、やめたのは以下の理由だった気がします。
  1. XMLの操作にE4Xを使用していたが、Thunderbird/Firefoxが対応をやめてしまい、大規模改修が必要になった。
  2. Thunderbirdのアドレス帳自体にバグが多く、自分の作りこんだバグも重なって手に負えなくなってきていた。
  3. 要望、クレームが多く、もう趣味の域を超えてしまっていた。

2と3でモチベーションがなくなりつつある中で、1が背中を押した感じがします。

実は、Thunderbird 78対応で全アドオン作り直しになるし、アドレス帳のAPIもきっとマシになっているだろうと、ちょっと復活を考えたこともありました。しかし、今度はGoogle側の仕様が壁になりました。

Google ContactsはContacts APIというAPIを使っていました。これはGoogle独自のAPIなので、CardDAVと違って、グループなども同期できていました。今は、これをPeople APIというのに置き換えないといけないですが、見た感じ、同じことができて問題はなさそうです。
 
また、ユーザID/パスワードでの認証ではなく、OAuth2認証になっています。これも、ThunderbirdもAPIを用意してくれていて対応できそうです(Identity API)。
 
問題は、住所や電話番号なども含むデータにアクセスするので、Googleの承認が必要で、ここでひるみました…

めんどくさい(苦笑)

操作しているところをYouTubeにとったり、いろいろ説明文を書いたり、なかなか大変だなぁと。バージョンアップしたときはどうなんだろうとか、突然、認証停止されることもあるんだろうなぁとか考えると、ちょっと個人の趣味でやるにはハードルが高いです。その前に、アドオン名を変えないと絶対通らないですが。よくもまぁ、こんなそのままな名前で行ったなと自分で思います。


こんなのならありますが…

ちなみに、その代わりにというわけではないですが、ThunderbirdのタブでGoogle連絡先を開くアドオンを作っていたりします。完全に自分用で、ただ https://contacts.google.com/ を開くだけのアドオンです。

Google Contactsを作ってくれって来た人に、こんなんならあるけどと配ってます。反応は様々ですが、いやこれじゃなくて…って人が多いです(笑)

個人的にはこれで十分なんですが、欲しい方いたりしますかね?いましたら、コメントにでも書いていただければ公開します。もう誰かが、同じものを作って公開しているかもしれないですが。

以下のような感じです。アドレスをクリックするとGmailを開いちゃいますが、右クリックして「メッセージを作成」を選べばThunderbirdでメールを書けます。そのままGmailで書いてもいいと思います。
 
複数のアドレスを選択したりはできません。めんどくさいですが、一つ一つThunderbirdのメール作成ウィンドウにコピペすることになります。




あと、エラーコンソールを開くと、こんな感じで警告で脅されます。もちろん、なにかセキュリティのトラップを仕込んだりはしていませんし、そんな興味も技術もありません。また、Google側の仕様変更で動かなくなることもあるかもしれません。このあたりも理解いただける方限定で。



2020年8月26日水曜日

Tag Popup で 100以上のメッセージのタグを変更可能にしました (Tag Popup 2.1.3)

気づいている人は少ないかもしれませんが、Tag Popupは、これまで最大100メッセージまでしか同時にタグ付けできませんでした。今回、Tag Popup 2.1.3でこの制限をなくしました。

Thunderbirdがおかしくならない限り、上限なくできますが、それなりに時間がかかります。気を付けて使ってください。

Tag Popup 2.1.3 ダウンロード:

以下のログは、1894メッセージを選択してタグをつけたときのものです。50秒くらいかかっています。POP3でローカルに保存されているデータに対してやったので、IMAPの場合は、もっとかかるかもしれません。


ちなみに、コンテキストメニューからタグをつけるなど、Thunderbirdオリジナルの機能で同じことをした場合はもう少し早くできますが、UIがフリーズします。Tag Popupは非同期でやっているのでフリーズはしませんが、その分遅いです。

どちらのやり方にせよ、大量のメッセージにタグ付けするのは、あまりおすすめしません。もともとの100個程度が限度かなと思います。

2020年8月23日日曜日

タブ/ウィンドウまわり【MailExtensionsメモ】

Thunderbird 78対応アドオン作成のメモ。

■タブの取得

let tabs = await browser.tabs.query({
  active: true,
  currentWindow: true
});

if (tabs[0].mailTab) {
  //3ペインに対する処理
} else {
  //メール表示、Web表示タブに対する処理
}

■ウィンドウで開いているタブを取得
tabs.queryで、ウィンドウを指定して取得する。

let tabs = await browser.tabs.query({windowId:aWindow.id});

■メール作成ウィンドウのオープンを検知
メール作成ウィンドウを開いたときに、何かしたい場合。UI上タブはないが、内部的にはタブがある。

browser.windows.onCreated.addListener(async (aWindow) => {
  if (aWindow.type === "messageCompose") {
    let tabs = await browser.tabs.query({windowId:aWindow.id});
    //何か処理
  }
});




2020年8月19日水曜日

HTMLでリストボックスを作る【MailExtensionsメモ】

Thunderbird 78対応アドオン作成のメモ。ただのHTMLのTips。

XULのrichlistboxっぽいものをHTMLで。

■リストボックス
selectにsize属性をつけると、プルダウンではなくリストで表示される。optionの数がsizeより多くなるとスクロールできるようになる。

HTML:
<select size="4">
  <option>List1</option>
  <option>List2</option>
  <option>List3</option>
  <option>List4</option>
  <option>List5</option>
</select>

表示例:


■チェックボックス付きのリスト
selectではできなかった。以下のようにdivを使って作成。

CSS:
div.listbox {
  border: solid thin gray;
  background-color: white;
  height: 10em;
  overflow: auto;
}

borderで枠線をつけて、リストボックスっぽく見せる。
heightを設定し、overflowを設定することで、表示しきれなくなった場合にスクロールバーが出る。

HTML:
<div class="listbox">
    <input type="checkbox id="checkbox1"><label for="checkbox1">重要</label><br>
    <input type="checkbox id="checkbox2"><label for="checkbox2">仕事</label><br>
    <input type="checkbox id="checkbox3"><label for="checkbox3">プライベート</label><br>
    <input type="checkbox id="checkbox4"><label for="checkbox4">ToDo</label><br>
    <input type="checkbox id="checkbox5"><label for="checkbox5">後で</label><br>
    <input type="checkbox id="checkbox6"><label for="checkbox6">Test1</label><br>
    <input type="checkbox id="checkbox7"><label for="checkbox7">Test2</label><br>
</div>

divにinputを並べていく。labelのfor属性にチェックボックスのidを指定すると、ラベルをクリックしてもチェックボックスのチェックが切り替わるようになる。

表示例:

■selectのJavascriptでの操作
selectのよく使うプロパティ、メソッドを整理。

  • プロパティ
    • select.length: optionsの数
    • select.options: selectに含まれるoptionすべて。配列と同じようにアクセスできる。select.childNodesと似ているが、childNodesは子ノードすべてなので、option以外のノードも含まれる。
    • select.selectedIndex: 選択されているoptionのインデックス。複数選択されている場合は、一番若い数字。select.optionsのインデックスなので注意。この値をchildNodesのインデックスとして使うと、違うエレメントを参照してしまう可能性あり。
    • select.selectedOptions: 選択されているoptionすべて。
    • select.value: 選択されているoptionのvalue値。複数選択されているときは、一番若いインデックスのvalue。
  • メソッド
    • select.add(option): optionをselectに追加する。第二引数で、インデックス or optionエレメントを指定すると、その直前に挿入される。
    • select.remove(index): indexにあるoptionをselectから削除する。indexを指定しないと、selectが丸ごと削除される。removeはエレメントではなくて、インデックスなので注意。

2020年8月18日火曜日

WebExtension Experiments の注意点【MailExtensionsメモ】

Thunderbird 78対応アドオン作成のメモ。Experiments API関係。

基本的には、サンプルをテンプレートに作成していく。


■windowオブジェクト
Thunderbirdの内部を触れるようになるが、別のスコープにいる。WindowMediatorを使って、windowオブジェクトを取得しないといけない。

var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");

let rw = Services.wm.getMostRecentWindow("mail:3pane");
if (rw) {
   rw.document.getElementById(...);
}

legacy add-onのコードを持ってくる場合は、
  • document.getElementById()
  • setTimeout()
  • addEventListener()
など、上記で取得したwindowに置き換えないといけない。

getMostRecentWindow()の引数は、取得したいウィンドウに合わせて変える。
  • mail:3pane:メインウィンドウ
  • msgcompose:メッセージ作成ウィンドウ
  • mail:addressbook:アドレス帳
  • mail:messageWindow:別ウィンドウでメールを開いたときのウィンドウ
引数をnullにすれば、すべてのウィンドウの中で、最後にアクティブになったウィンドウを返す。あまり使い道はないかも。


■XMLSerializer
Experimentsのスコープにインポートしないと使えない。

Components.utils.importGlobalProperties(["XMLSerializer"]);

let xmlSerializer = new XMLSerializer(); //importしていないとnewできない
let xmlString = xmlSerializer.serializeToString(xmlNode);


■MailServices.jsm
Thunderbird 78では、MailUtils.getIdentityForServer(server)が、配列を返すようになっている。Identityは戻り値の0番目。公式サイトの「Adapt to Changes in Thunderbird 69-78」にはのっていない。

var { MailServices } = ChromeUtils.import("resource:///modules/MailServices.jsm");

let identity = MailUtils.getIdentityForServer(server)[0];


■Javascript module (*.jsm)
Javascriptコードモジュールはキャッシュされる。Thunderbird終了時にキャッシュをパージする処理を入れないと、アドオンのバージョンアップでモジュールの変更が反映されない場合がある。サンプルコードに入っているので、自分のファイル構成に合わせて変更すればよい。

var myApi = class extends ExtensionCommon.ExtensionAPI {
  getAPI(context) {
    context.callOnClose(this);

    return {
      //Experiments APIの定義。省略。
    }
  }  

  close() {
    Components.utils.unload(extension.rootURI.resolve("modules/utils.jsm"));
    Services.obs.notifyObservers(null, "startupcache-invalidate", null);
  }
};

また、この処理は、デバッグしているときに再読み込みを実施しても呼ばれないので注意。上記例のmodules/utils.jsmを変更して再読み込みを実行しても、キャッシュが使われてしまう。一時読み込みしたアドオンを削除して、再読み込みしないといけない。
 
■document.createElement()
Thunderbird 78から、HTMLエレメントを返すようになった。XULエレメントを作るときは、document.createXULElement() にしないといけない。


2020年8月17日月曜日

openPopup() の使い方 【MailExtensionsメモ】

Thunderbird 78対応アドオン作成のメモ。

ひとまず、アドオンの修正も一段落ついたので、私がはまったときのメモを吐き出していきます。何かのお役に立てれば。まずは、ポップアップ表示(openPopup())ではまったポイント。


browser.browserAction.openPopup() など、スクリプトからツールバーボタンのポップアップを表示する際、以下のメッセージでエラーになる場合がある。

Uncaught (in promise) Error: browserAction.openPopup may only be called from a user input handler

 openPopup()は使用できるケースが限られ、ユーザ操作のイベントからしか呼べない様子。

ツールバーボタンのクリック、コンテキストメニュー、ショートカットキーなどのイベントではポップアップ表示できるが、メッセージ表示時(messageDisplay.onMessageDisplayed())や、ウィンドウ間の通信(runtime.onMessage()/sendMessage())をトリガに実行しても、上記のエラーメッセージになる。WebExtension Experimentsで自作したイベントもNG。

また、ユーザ操作のイベントであっても、非同期関数(async)からは呼び出せないっぽい。例えば、メッセージが選択されている状態でのみポップアップを開きたくて、以下のようにしても、同じエラーメッセージで怒られる。

browser.commands.onCommand.addListener(async (command) => {
  let tabs = await browser.tabs.query({
    active: true,
    currentWindow: true
  });

  //選択中のメッセージを取得
  let messages = [];
  if (tabs[0].mailTab) {
    let msgs = await browser.mailTabs.getSelectedMessages(tabs[0].id);
    messages = msgs.messages;
  }

  //メッセージが選択されていたらopenPopup()する。
  //ここで冒頭のエラーがでてしまう。
  if (command === "cmd_open-popup" && messages.length > 0) {
    browser.browserAction.openPopup();
  }
});


別イベントで選択メッセージを取得しておくなどして、openPopup()をasync関数の中で呼ばないようにしないとダメ。

var messages = [];

browser.mailTabs.onSelectedMessagesChanged.addListener((tab, selectedMessages)=>{
  messages = selectedMessages.messages;
});

browser.commands.onCommand.addListener((command) => {
  if (command === "cmd_open-popup" && messages.length > 0) {
    browser.browserAction.openPopup();
  }
});

MailExtensions APIのドキュメントを見ても、特にこの仕様に関して言及なし。
 
Firefox のWebExtensions APIは以下に説明あり。おそらくFirefoxと同じ動作と思われる。

カット&トライで調べていくしかないが、Thunderbird独自のイベントでは使えないと予想。compose.onBeforeSend()では使えた。


2020年8月16日日曜日

EnForward 2.0.1をThunderbird 68に適用しないでください

Thunderbird 68でEnForward 2.0.1の更新通知を受けてしまった方へのお願いです。

EnForward 2.0.1はThunderbird 78用のため、Thunderbird 68では正しく動きません。更新を適用しないでください。もし、更新してしまった場合は、v2.0.1をアンインストールして、v0.5.1を再インストールしてください。

アドオンサイト(addons.thunderbird.net)に登録する際に、最低バージョンを間違えてTB68に設定してしまっていました。すみません。今は、修正してあります。

 

2020年8月14日金曜日

EnForward 2.0.2

EnForward 2.0.2を公開しました。バグ修正が中心です。

ダウンロード

  • ツールバーボタンがない状態だと、送信できないのを修正
    • ツールバーボタンを使って、確認のポップアップを出しているので、ツールバーボタンをしまっている状態では、ポップアップがでないので注意してください。
  • 通常のメール送信でEvernote宛てにメールを送った場合も、制限チェックのカウントに含むように変更。
  • メール送信のエラー処理が不十分だったのを修正
  • 日本語ロケールを追加

[2020/8/14 追記]
起動時間によってツールバーボタン有無の判定に失敗する場合がありました。EnForward 2.0.3で修正していますので、こちらを使用してください。 

[2020/8/15 追記]
メール作成ウィンドウのポップアップが日本語化できていませんでした。EnForward 2.0.4で修正しました。

2020年8月13日木曜日

Tag Popupにカテゴリを実装しました (Tag Popup 2.1.2)

Tag Popup 2.1.0を公開しました。
処理を改善したv 2.1.2を公開しました。こちらをご使用ください。
 
ダウンロード

Thunderbird 78がリリースされて3週間くらい、Tag Popupへ移行したユーザさんも少しずつでてきました。まぁ、予想通りっちゃぁ予想通りなんですが、あまり評判は芳しくないです(苦笑)。なかなか辛辣なコメントもありますが、できないものはできないので…

今回、Tag Toolbarにあったカテゴリ機能を追加してみました。細かいところはちょっと違ったりしますが、だいたい同等のことがポップアップでもできるようになっていると思います。

大きめな変更なので、しばらくはHPのみでの公開にして、様子をみて addons.thunderbird.net への登録としようと思います。

以下、追加した機能の説明です。


できるようになること

基本的には、タグが大量にある人向けの機能です。

■ポップアップに表示するタグの絞り込み
以下のように、ポップアップにカテゴリが追加され、そのカテゴリに含まれるタグだけ表示されます。その下の検索も、カテゴリの中で検索します。

「最近使ったタグ」の表示も可能です。




■ヘッダビューに表示するタグの絞り込み
Tag Popupの新機能として、ヘッダビューのタグのクリックでタグのつけ外しができますが、これをするために全タグが表示されます。タグがたくさんある場合に、ヘッダビューがあふれてしまうのでその対策です。

特定のカテゴリに含まれるタグだけ表示する設定を追加していますので、カテゴリを使って表示を絞ってください。



カテゴリの作成

まずは、Tag Popupのオプションを開いてカテゴリを作ってください。下のほうにスクロールしていくと、「カテゴリエディタ」というのがあるので、ここで作成します。こんな感じです。

「カテゴリ」のところでカテゴリを選択して、「カテゴリを編集」のところでそのカテゴリに入れるタグを設定する流れになります。

最初は「すべて」と「最近使ったタグ」しかありません。このカテゴリは変更、削除はできません。




カテゴリを作るには、カテゴリの横にある「新規」ボタンを押してください。すると、「New Category」という名前で空のカテゴリが追加されます。そのあと、カテゴリ名やタグを設定して「更新」ボタンを押してください。これで、カテゴリが一つできます。

カテゴリには、通常のカテゴリと検索カテゴリの2種類があります。

通常のカテゴリ

カテゴリに含むタグを手動で決めるカテゴリです。カテゴリに入れるタグは、←ボタンで「利用可能なタグ」から「現在のカテゴリ」に移動することで設定できます。「上へ」「下へ」ボタンは、カテゴリの中でのタグの表示順を設定します。ポップアップでは、この順序でされます。

タグが大量にある場合は、「タグをフィルタ」のところに検索ワードを入れてください。ヒットしたタグのみ表示されます。

検索カテゴリ

検索条件にマッチしたタグのみ表示するカテゴリです。都度検索して表示するのでタグの追加などをしたときにカテゴリを見直す必要がなくなります。一方で、検索を毎回する分、大量にタグがある場合にパフォーマンスへの影響があります。

設定するには、「検索カテゴリ」のところにチェックを入れてください。カテゴリを編集の部分が、以下のような表示に切り替わります。




ここで、「検索クエリ」と書かれているテキストボックスに検索ワードを入れてください。大文字と小文字を区別したり、正規表現で検索したりもできます。検索条件を入れるとマッチしたタグが「マッチしたタグ」のところに表示されます。希望通りの結果になっている場合は、更新ボタンをおして保存してください。

Tag Toolbarでは、検索条件に色も指定できましたが、Tag Popupでは見送りました。というのも、Thunderbird 68から、タグに使える色が大幅に増えてしまい、検索条件としては使いにくいかなと思ったためです。見た目同じ赤色でも、カラーコードがちょっとだけ違うものが存在してしまうので。実装自体は、そんなに難しくないので、要望が多ければ復活させるかもしれません。

カテゴリの表示順序の設定

ポップアップでカテゴリを選択する部分ですが、ここの表示順も設定することができます。「カテゴリ」のところでカテゴリを選択して、横にある「上へ」「下へ」ボタンで順序を変更してください。「すべて」「最近使ったタグ」は消せないので、いらなければ、下のほうに追いやってください。

カテゴリの作り方はここまでです。

最近使ったタグの記録

メッセージにタグを追加するとそれを記録して、「最近使ったタグ」カテゴリに表示します。追加したタグだけで、外したタグはカウントしません。

デフォルトでは無効になっているので、設定の一番上にある「最近使ったタグの記録数」を設定してください。0に設定すると無効になります。

また、最近使ったタグが一つも記録されていない状態だと、ポップアップのカテゴリ選択のところにでてこないので注意してください。

「履歴をクリア」ボタンは、記録したタグをリセットします。


メッセージヘッダに表示するタグの設定

ちょっとややこしい設定になってしまいました…

ヘッダビューに表示するタグの絞り込み設定です。「ヘッダビューでタグを切り替える」オプションの下に、カテゴリ選択を追加しました。ここには、検索カテゴリは表示されず、設定できません。メッセージ選択のたびにタグ検索が走ってしまうので、表示が遅れるなどの影響が心配なためです。




ヘッダビューには、ここで指定したカテゴリのタグのみ表示されます。この設定は、そのメッセージにつけられていないタグのみに効きます。

例えば、「重要」「仕事」「ToDo」タグが入っている「仕事用」カテゴリを設定したとします。それで、「重要」「プライベート」タグがつけられたメッセージを選択すると以下のような表示になります。




メッセージについているタグは設定に関係なく表示、つけられていないタグ(白背景)はカテゴリに含まれるもののみになります。ここで、「プライベート」タグをクリックして外すと、




の表示なって、「プライベート」タグが消えます。これは、「仕事用」カテゴリに含まれないためです。


タグを変更した場合の設定
 
[2020/8/14 追記 v2.1.1]
カテゴリは、作ったときのタグの情報をキャッシュしています。タグの名前や色を変更した場合やタグを削除した場合は、カテゴリは古い情報で表示してしまいます。

なので、Thunderbirdの起動時に、カテゴリのキャッシュをリフレッシュする処理を入れました。タグを変更した場合は、次の起動時からカテゴリにも反映されます。
 
ただ、タグが大量にある場合は、毎回チェックすると起動時間に影響があるかもしれません。その場合は、Tag Popupのオプションで、「起動時にカテゴリのタグキャッシュを更新する」のチェックを外してください。タグを変更した場合は、「今すぐ更新」を押して手動で同期してください。


カテゴリ表示などの都度最新のタグを読みだしてもいいのですが、タグが多い場合のパフォーマンスへの影響を気にして、キャッシュしています。12,000個近いタグを持っている人もいるようなので。ちょっと信じられないですが…
 

お盆休みですがコロナで外出もしづらく…ということで、がんばって作ってみました。無駄に徹夜になってしまったり…区切りがつかない自分が悪いんですが(笑)

おかしなところなどがあったら、コメントください。この記事を書きながら、タグを削除したときにカテゴリが追従できていないことに気づきました。存在しないタグをつけようとしたときに、Thunderbirdがどうなるのかわからないので、気を付けてください。次のバージョンでなにかしら対応を入れようと思いますが、しばらくは、タグを削除したら手動でカテゴリからも削除してください。

2020年8月12日水曜日

Tag Popup 2.0.6 / EnForward 2.0.1

Tag Popup 2.0.6とEnForward 2.0.1をリリースしました。公式サイト(ATN)に申請したらリジェクトされてしまったので、その修正をしています。機能的には変更ありません。

  • 使用していない不要なファイルが入っていたので削除(scripts/content.js)

  • 不要な権限(activeTab)を要求していたのを削除


この他にも、公式サイトにベータテストへのリンクを貼っていたのですが、レビューを通していないバージョンへの誘導はポリシー的にダメなのでこれも消してくれと。まぁ、おっしゃる通り。

今回は、しっかり見るレビュアさんにあたったようです。

2020年8月11日火曜日

送信トレイの未送信メールを送信するツールバーボタン

とあるユーザさんから、Thunderbird 78用に、未送信メールを送信するツールバーボタンを作ってくれないかと依頼を受けました。たんにファイルメニューの「未送信メッセージを送信」をするだけでいいからということで。

それくらいであればすぐできるので、ちょっと作ってみました。依頼主さんもうごいた!といっていたので、ここでも公開します。Mozillaのアドオンサイトに登録するほどのものじゃないので、ひとまず、私のHP上だけでの公開です。

■Send Unsent Button

MailExtensions版はVer 2.xにすることにしたので、初物ですがいきなりVer 2.0.0からスタートです。

Thunderbird 68、78どちらでも使えるように作りましたが、私も依頼主さんもThunderbird 78でしか見ていないです。v68でなにか問題があったらスミマセン。

インストールすると、以下のような感じで、ツールバーボタンが追加されます。アイコンは、やっつけで、メール作成ウィンドウからコピってきた紙飛行機のやつです。ダークテーマでも大丈夫なようにはしておきました。


ほんとに未送信メールを送信するだけのボタンですが、もし必要な方がいれば使ってください。他の誰かがもう作ってそうな気もしますが。


ちょっと話は変わりますが、これって問答無用で送信トレイにあるメールを順に全部送っちゃうんですね。

私はこの機能をほとんど使わないので、今回Thunderbirdのコードを眺めていて知ったんですが、これ、困る人いないのかなぁとちょっと思いました。飛行機とか新幹線とかの細い回線の時に、大きい添付のメールのせいで残りのメールがつかえちゃったり、スマホでテザリングしていて大きいメールは送りたくなかったり(メール程度で容量気にすることはないかもしれませんが)。

ファイルが小さいのから送るとか、大きいファイルはオフィスに帰るまで保留できるとか、なんか工夫のしようがあるんじゃないかなぁと。アドオンで触ってみようかとも思ったんですが、一時的にどこかのフォルダに退避させてから送信みたいな力業しかなさそうで、そこで熱が冷めてしまいました(笑)
 
[2020/8/15 追記]
v2.0.1を公開しました。ショートカットキーからも呼び出せるようになっています。デフォルトでは何もキーが設定されていないので、お好きなキーを設定してください。

キーの設定は、アドオンマネージャの 歯車ボタン→拡張機能のショートカットキーの管理 からできます。


2020年8月9日日曜日

サポート、要望、雑談スレッド3

サポートスレッドを新調しました。旧スレッドは、未メンテで収拾がつかなくなっているので、いったんリセットさせてください。

Thunderbird 78用のアドオンに関して、不具合や改善要望等がありましたら、ここにコメントを書いてください。リリース時の投稿などにコメントいただいてもOKです。

質問や不具合報告をする場合は、以下の情報も加えて教えてください。
  • OS
  • アドオンのバージョン
  • Thunderbirdのバージョン
  • インストールしているアドオン・テーマ
  • デフォルトから変更している設定
  • エラーコンソールにでているエラーメッセージ(エラーコンソールは、Ctrl+Shift+Jで出ます)

あと、すみませんが、Thunderbird 68用のアドオン(ver 0.x系、ver 1.x系)は、サポート終了とさせてください。両バージョン見ていくのは、さすがにしんどいので。空いた時間に趣味でやっているのでご理解いただきたく。

2020年8月6日木曜日

New Tab Button 2.0.5 / Tag Popup 2.0.5

New Tab Button 2.0.5 と Tag Popup 2.0.5 をリリースしました。

アドオンの承認に時間がかかっており、まだ公式サイトではダウンロードできるようになっていません。以下のホームページからダウンロードしてインストールしてください。

New Tab Button 2.0.5

Tag Popup 2.0.5


New Tab Button 2.0.5

メール中のURLをThunderbirdのタブで開くコンテキストメニューを追加しました。

メール本文のリンクを右クリックして、「リンクをタブで開く」を選択してください。

ソースコード上は、New Tab Buttonのオプションを見て、タブを前面(アクティブ)に開くかどうか切り替えられるようにしているのですが、Thunderbird側のバグっぽくて、必ず前面で開いてしまいます。

そんなに使う機能ではないと思いますが、よければ使ってください。




Tag Popup 2.0.5

以下のブログポストの中で要望いただいた機能を追加しました。

以前のThunderbird (v60?)までは、タグに「色なし」を指定できたのですが、今はデフォルトで黒になってしまいます。スレッドペインに背景色をつけるときに、この黒を無視するオプションを用意しました。デフォルトでは無効になっているので、Tag Popupのオプションで、「黒色のタグは背景色を変えない」を有効にしてください。

設定変更したらThunderbirdを再起動してください。再起動しないと、色が変わったり変わらなかったり、ちょっと不安定になります。


■黒色の背景色をつけた場合(No Colorが黒色のタグ)


■黒色の背景色をつけない場合(No Colorが黒色のタグ)


2020年8月5日水曜日

テキストエディタMeryでEmacsキーバインド (2)

以前、「テキストエディタMeryでEmacsキーバインド」でMeryでEmacsキーバインドを実現するマクロ集を公開しました。今回、新たにいくつかEmacsコマンドを追加して、v1.1を公開しました。

ダウンロードはこちらから。

追加したのは以下のコマンドです。
  • write-file
  • save-buffer
  • search (検索ウィンドウを開くだけ)
  • cancel-command (C-x入力をキャンセルするだけ)
  • kill-mery
  • unindent
  • scroll-down
  • scroll-up
  • find-file

力業ですが、前回は断念した、2ストロークキーバインドも対応しています。

というのも、「C-x C-s (save-buffer)」ではまったためです。C-f などでカーソル移動していると、どうも手がEmacs気分になってしまい、保存しようとして C-x C-s を押してしまうんです。で、何が起きるかというと、カーソル行が消去されて上書き保存。よそ見をしていたりすると、気づかないうちに一行なくなっていて…

C-x C-s だけだったら、C-x のキーアサインを消してしまえばいいんですけど、せっかくなので、Meryを閉じる(C-x C-c)とかも欲しいなということでやってみました。

2ストロークキーは、少しトリッキーなので、最後の注意事項も見ておいてください。

個人的には、これでだいぶ快適にMeryが使えるようになりました。


Emacsキーバインド用マクロ

v1.0のものも含めて、同梱しているマクロとキーアサイン例をまとめます。キーアサインのしかたは、前回のブログポスト「テキストエディタMeryでEmacsキーバインド」を確認してください。太字がv1.1で追加したマクロです。

マクロ
動作
キーアサイン例
ctrl-x.js
内部的にC-xが押されたフラグを立てます。これを見て次のコマンドの動作が変わります。
C-x
cancel-command.js
C-xの内部フラグをクリア
C-g
beginning-of-line.js
行頭にカーソルを移動
C-a
end-of-line.js
行末にカーソルを移動
C-e
forward-char.js
一文字右にカーソルを移動
C-f
find-file-and-forward-char.js
[C-xが押された後の場合]
ファイルを開く

[C-xが押されていない場合]
forward-char.jsの動作
C-f
backward-char.js
一文字左にカーソルを移動
C-b
next-line.js
次の行にカーソルを移動
C-n
previous-line.js
前の行にカーソルを移動
C-p
kill-line.js
カーソル位置から行末までをカット
C-k
delete-char.js
カーソル右を一文字削除
C-d
delete-backward-char.js
カーソル左を一文字削除
C-h
set-mark-command.js
カーソル位置をマーク
C-SPACE
kill-region.js
マークからカーソル位置までをカット。範囲選択している場合は、その部分をカット。
C-w
write-file-and-kill-region.js
[C-xが押された後の場合]
名前を付けて保存

[C-xが押されていない場合]
kill-region.jsの動作
C-w
kill-ring-save.js
マークからカーソル位置までをコピー。範囲選択している場合は、その部分をコピー。
Alt-w
beginning-of-buffer.js
バッファ(現在のタブ)の先頭にカーソルを移動
Alt-<
(Alt-Shift-,)
end-of-buffer.js
バッファ(現在のタブ)の末尾にカーソルを移動
Alt->
(Alt-Shift-.)
yank.js
ペースト
C-y
undo.js
アンドゥ
C-/
save-buffer-and-search.js
[C-xが押された後の場合]
上書き保存

[C-xが押されていない場合]
検索ウィンドウを開く。ウィンドウを開くだけで、EmacsのようにC-s/C-rを押して次の検索はできません。
C-s
kill-mery-and-copy.js
[C-xが押された後の場合]
Meryを終了。保存していないファイルがある場合は確認する。

[C-xが押されていない場合]
コピー。Emacsのキーバインドではないですが、つぶすのももったいないので残しました。
C-c
unindent.js
インデントを1つ分戻す。Emacsのキーバインドではないですが、欲しかったので作りました。
Shift+Tab
scroll-up.js
一画面順方向に送る
C-v
scroll-down.js
一画面逆方向に送る
Alt-v


注意事項

[キーアサイン]
上記の表で、C-f と C-w は重複しています。C-xと組み合わせて使いたいかどうかで、どちらのマクロを登録するか決めてください。

例えば、C-x C-f でファイルを開きたい場合は find-file-and-forward.js を、C-f でのカーソル移動だけがほしい場合は forward-char.js を、C-f に登録してください。

[C-x キー]
C-xは、そのあとに対応していないキーを入力すると、内部フラグが残ったままになってしまいます。

例えば、ファイルを挿入しようと思って C-x i と打つと、単に「i」が入力されます。そのあと、カーソル移動しようとして C-f を打つと、最初の C-x が残っていて、C-x C-f となってファイルを開きに行ってしまいます。間違えて C-x を押してしまった場合は、cancel-command.js (C-g) でキャンセルしてください。

対応するコマンドを打った場合は、自動で C-x フラグはクリアされます。なので、上記の例で、間違ってファイルを開くウィンドウを開いた後は、正常に戻ります。

C-x を使った2ストロークキーはMery 3.0.0以上が必要です。

[v1.0とv1.1の差分]
v1.1は上記表の太字のマクロを追加しただけで、v1.0からあったものは変わっていません。



人気の投稿(過去7日間)