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からあったものは変わっていません。



2020年8月2日日曜日

Check and Send 2.0.11

Check and Send 2.0.11をリリースしました。

ダウンロード

オプション設定で、エラーがなかった時にポップアップを自動で閉じるオプションを追加しました。デフォルトでは、「エラーがなくてもポップアップを表示する」が有効になっているので、エラーがなくても確認のポップアップを表示します。不要な場合は、このチェックを外してください。



あと、オプションのUIを少しだけ修正しています。

Mail Extensions版 EnForward

EnForward 2.0.0を公開しました。これで、EnForwardもThunderbird 78対応になります。

ダウンロード

■概要


EnForwardは、Thunderbirdで受信したメールをEvernoteに保存するアドオンです。FirefoxのWeb Clipperなど、EvernoteのAPIを使って連携するのではなく、Evernoteのメール転送機能を使用します。したがって、あまり大量に保存しようとすると、お使いのメールサーバに負荷をかけてしまったり、Evernote側の一日の転送数(200件)を超えてしまうので注意してください。

メール転送機能の詳細は以下をご確認ください。

※メール転送は、ベーシックプランでは使用できません(5回の試用しかできません)。そのため、このアドオンは、プラス、プレミアム、ビジネスプラン向けになります。

私は、Evernote プラスなので、プレミアム、ビジネスプランでの動作確認はできていません。多分大丈夫だと思いますが。プランがわからない場合は、Evernoteのアカウント情報から確認できます。お金を払っていなければベーシックプランです。

メールの件名を編集してEvernoteに送るだけなので手動でも可能ですが、EnForwardでは、この作業を自動化してバックグラウンドで送信することができます。さらに、Thunderbirdのフィルタにも統合されているので、フィルタを使って、受信メールの件名を編集→Evernoteへ転送まで完全自動で行うこともできます。

また、OneNoteなど、ほかのノートサービスも同様のメール転送機能があるので、これらにも対応しています。(Evernoteと比べると機能は少なくなります)

以下、旧バージョンとの違いを中心に使い方を説明します。設定の詳細は、また別の記事で書こうと思います。

■初期設定


EnForwardをインストールしたら、まず設定をしてください。旧バージョンのEnForwardからアップデートした場合も、再設定が必要です。

最低限、以下の設定をしてください。

共通


ツールバーボタンの動作を選択してください。


  • Evernote: Evernoteにメールを転送します。
  • Evernote with Reminder: Evernoteにリマインダ付きでメールを転送します。
  • Other Note Service: OneNoteなど、Evernote以外のサービスにメールを転送します。


Evernoteの場合


Evernote Email Addressの部分に、Evernoteのメールアドレス(転送先)を入力してください。


OneNoteなど、Evernote以外の場合


設定画面を下のほうへスクロールして、「Other Note Service」のセクションまで行ってください。


Service name, Address, Identityを設定してください。デフォルトでは、OneNote向けの設定が入っています。
  • Service name: サービスの名前を入れてください。コンテキストメニューやフィルタのアクション名などのUIに使用されます。好きな名前を入れてもらってOKです。
  • Address: メールの転送先を入れてください。OneNoteだと、me@onenote.comです。
  • Identity: メールを送信するアカウントを選択してください。OneNoteの場合は、送信するアカウントをOneNoteに登録しているはずなので、そのアカウントを設定してください。

最低限の設定はここまでになります。


■メールを転送する


ツールバーボタン


転送したいメールを選択して、ツールバーボタンをクリックしてください。ツールバーボタンがない場合は、ツールバーのカスタマイズから置いてください。メールを複数選択した場合は、選択したメールすべてが転送されます。

すると、以下のようなポップアップが表示されます。ここで、必要に応じて内容を変更して、Forwardボタンを押してください。Fwdのチェックを外すと、そのメールの転送はされません。このポップアップは設定で表示しないようにもできます。その場合は、なにも表示されず、すぐに転送が始まります。


メールの転送が始まると、ツールバーボタンに以下のように残りメッセージの数が表示されます。この状態で、再度ツールバーボタンを押すと、残りの転送をキャンセルすることができます。



コンテキストメニュー


メールを選択した状態の右クリックメニューからも実行できます。ツールバーボタンと違って、アクションを選択できます。下記の画像の「Foward to OneNote」の部分は、設定で「Other Service Name」に指定した名前になります。


ショートカットキー


キーボードショートカットからも実行できます。ショートカットは、デフォルトでは無効になっているので、まず設定をしてください。アドオンマネージャの歯車ボタン→拡張機能のショートカットキーの管理を選択してください。ツールバーコマンドの設定と同様に、3つのコマンドがあるので、それぞれ好きなキーを割り当ててください。

メッセージを選択した状態で、割り当てたショートカットキーを押すと、転送が始まります。




■新機能


旧バージョンユーザの方向けに、新機能を紹介します。

元メッセージへのタグ付け

Evernoteへ転送したメッセージにタグをつけたり、外したりできます。「転送済み」のようなタグを用意して、Evernoteへの保存状況の管理に使用することを想定しています。

Evernote/Other Note Service それぞれに、以下のような設定があります。ここで使用したいタグを選択してください。上が転送後につけるタグ、下が外すタグです。


メール作成ウィンドウのボタン


メール作成ウィンドウにもツールバーボタンを追加しました。これを押すと、以下のようなポップアップが表示されます。このフォームを埋めてUpdateを押すと、その内容でToと件名が入力されます。Fill fieldsボタンを押すと、選択中のメッセージから情報をとって埋めます。

メール作成ウィンドウで議事録を取ってEvernoteへ送る場合や、受信したメールをそのまま転送するのではなく、「新しいメッセージとして編集」などで内容を変更してから転送する場合などを想定しています。



不具合や改善要望等ありましたら、コメントください。


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