ラベル Tips の投稿を表示しています。 すべての投稿を表示
ラベル Tips の投稿を表示しています。 すべての投稿を表示

2024年2月5日月曜日

EvernoteからOneNoteへの移行(Evernote2OnenoteのTips)

Evernoteをプラスプランで使い続けていたのですが、ついにプラン廃止、強制的にパーソナルプランへ移行となってしまい、更新のタイミングでフリープランに切り替えました。
パーソナルは、ちょっと高すぎです。機能を使いきれないですし。

プラン移行後、追い打ちをかけるように、1ノートブック、50ノートに制限されてしまい、新しいノートを作るどころか、ノートの移動すらできない状況になってしまいました。アプリはアプリで、使い物にならないくらいに割引の広告…

というわけで、思い切ってOneNoteに移行してみました。Notionも考えたのですが、あまり細かいことを考えずにノートをサクサク作りたいのと、オフライン中に何もできなくなってしまうのでOneNoteにしました。

Evernote2Onenoteを使って移行しました…だけでは面白くないので、enexファイルを下処理することで、インポートの課題を多少改善できたので、その共有です。基本的には、Evernote独自のタグ、styleが引き継げないので、そこをゴニョゴニョしています。
最後に、私がやった下処理をするプログラムを置いておくので、よければ使ってください。

課題1:空行が消える

空行は
 <div><br/><div>
となっているのですが、行頭にスペースを入れて、
 <div> <br/></div>
とすると空行が残るようになります。
スペースを入れるのがイヤな場合は、
 <div><br/><br/><div>
のように</br>を2個にしても空行ができますが、表に空白のセルがあると崩れてしまうので注意です。


課題2:インデントされない

インデントは、
 <div style="padding-left:40px;">
のように、1レベルで40px下げられているので、その行頭に1インデントあたり4個のスペースを追加しました。単純にスペースを入れても、2個以上のスペースは無視されてしまうので、「&nbsp;」でスペースを入れます。


課題3:中央寄せ、右寄せがされない

こちらも、
 <div style="text-align:center;">
のようにstyleが指定されていますが、これが引き継げません。左右にスペースを補って中央寄せ、右寄せっぽくしました。


課題4:タスクが削除される

インポートすると、「サポートされていないコンテンツです~」という警告文に置き換わってしまいます。

<div style="--en-task-group:true; ...
というところが、該当部分ですが、ここはプレースホルダで、タスクは<task></task>タグとして、別のところで定義されています。
<task>の中の、<title>がタスクのタイトル、<taskStatus>がタスクの状態(open/completed)、<taskGroupNoteLevelID>がプレースホルダと紐づけるIDになります。

なので、openのタスクは( )、completedのタスクは(x)をタスクのタイトルにつけて、プレースホルダの位置に挿入しました。
こんな感じ:
 <div>(x) タスク1(完了)</div>
 <div>( ) タスク2(未完了)</div>

プレースホルダのところは、残しておくと警告文がでてしまうので、ざっくり削除します。

何を言っているのかさっぱり…という方は、後で紹介するプログラムを使ってください。

課題5:チェックボックスが削除される

チェックボックスは<en-todo/>というタグになっています。
 <en-todo checked="false" />チェックボックス(チェックなし)
 <en-todo checked="true" />チェックボックス(チェックあり)

これを、以下のようにチェックありは[x]、なしは[ ]に置き換えました。
 <div>[ ]チェックボックス(チェックなし)</div>
 <div>[x] チェックボックス(チェックあり)</div>

課題6:チェックリストが箇条書きになってしまう

チェックリストは、
 <ul style="--en-todo:true;">
というリストになっていますので、リストをやめて、チェックボックスと同じように置き換えました。

タスク、チェックボックス、チェックリストは、終わっているノートはそのまま、まだ使っているノートは、手動でノートシールに置き換えるつもりです。

 

課題7:区切り線が消える

<hr/>を<div>-----------------</div>のように、「-」の線で置き換えました。

課題8:タグがセクションに変換される。複数タグがある場合は、ノートが重複する

これは、Evernoteの階層を、どうOneNoteに引き継ぐかによると思いますが、私はノートブック=セクションとしたかったので、タグを削除し、ノートブック名のタグを追加しました。
タグは、<tag>タグになっているのでこれを削除、代わりに
 <tag>ノートブック名</tag>
を追加し、全ノートがノートブック名のセクションに格納されるようにしました。

このとき、元のタグ情報が消えてしまうので、「#tag1 #tag2 ...」のように、ノート本文に元のタグを追記するようにしました。あとで検索してノートシールを付けようという作戦だったのですが、OneNoteの検索がイケておらず、これはうまくいかず…

課題9:コードブロックの書式が消える、ノートリンクがEvernoteのリンクのまま

これはいかんともしがたいので、該当箇所に「!!!ここはコードブロック!!!」のような目印を追加して、インポート後に検索、修正することにしました。
コードブロックは、
 <div style="--en-codeblock:true;>
ノートリンクは
 <a href="evernote:/// ... >
のようになっているので、この直前に、
 <div>!!!ここはコードブロック!!!</div>
のようにマークを入れました。

おまけのスクリプト

これまでのように、enexファイルを修正していけばいろいろできるのですが、さすがに手作業は無理なのでRubyでスクリプトを書いてやりました。下記に、スクリプトを実行ファイル化したものと、スクリプト本体を置いておきますので、使ってみてください。

また、設定が必要なので、readme.txtを確認してから使ってください。あと、決まり文句ですが、データが壊れても責任はとれませんし、途中でエラーで落ちてしまうこともあると思うので、必ずバックアップを取ったうえで、動いたらラッキーくらいで。

実行ファイルをそのまま使ってもらってもいいですし、スクリプトをいじってカスタムしてもらってもかまいません。もっといいスクリプトが書けたら、教えてもらえるとうれしいです。

ダウンロード:

https://hogi.sakura.ne.jp/dl/b4e2o_v101.zip

最後に

私は、これでなんとかOneNoteでやっていけそうな感じになりました。全ノートを確認していないので、Evernoteに過去データを残しつつ、OneNoteで新しいノートを作っていく形になりそうです。OneNoteはタグがない、Webクリップがいけてないと不満点もありますが、これは慣れかなぁと。

今回、OneNoteへの移行をしましたが、上記に書いたものは、OneNoteに特化したものではないので、他のノートサービスで同じような課題がある場合にも、有効かもしれません。

最後に、Evernote2Onenoteの作者さん、あなたがいなければ路頭に迷うところでした。Evernote、何してくれんねん。ホント。




2022年1月6日木曜日

Thunderbirdのアドレス帳とGmail の連絡先(Google Contacts)の同期

Thunderbird 91から、Thunderbird本体でCardDAVに対応しました。ほんとは78.7.1からですが、内部的に作られただけでUIがありませんでした。(たぶん。見つけられてなかっただけかも?)

で、何がうれしいかというと、ThunderbirdとGmailの連絡先との同期がアドオンなしでできるようになります。Gmailの連絡先を経由してiPhone/AndroidスマホとThunderbirdでアドレス帳を共有することもできるはずです。(「はず」と書いたのは、私は試していないからです。やるときは、バックアップをとるなど気を付けてください。)

過去、同期アドオンを作っていたこともあり(といっても10年近く前ですが)、今でも復活させてくれという要望がくるほどの機能なのですが、あまり知られていないようなので、簡単にやり方を紹介します。

やり方は2つ。
  1. 新規にアカウントをセットアップする場合:
    ウィザードに従ってアカウントを設定していった最後の画面に「リンクしたサービスへの接続」という項目がでてくるので、そこで設定します。
  2. すでにメール設定はできているなどでアドレス帳のみ設定する場合:
    アドレス帳で、「ファイル→新規作成→CardDAVアドレス帳」から作成します。

これでわかる方は、これでこの記事は終了です。

以下、手順を書いていきます。Thunderbird 78を使っている場合は、Thunderbird 91にあげる必要があるので、使っているアドオン対応状況等もふまえて慎重に。

1. 新規にアカウントをセットアップする場合

メールの設定と合わせてアドレス帳の同期設定もするケースです。すでにアカウントを設定済み場合は、削除してからやる必要はありません。その場合は2のほうの手順を確認してください。

まず、アカウントのセットアップウィザードを立ち上げます。ハンバーガーメニュー(ツールバーの三本線のボタン)から、「新規作成→既存のメールアカウント」で開きます。Thunderbirdをインストールしたての場合など、プロファイルが空っぽの場合は、勝手にこの画面になります。
「あなたのお名前」はメールのFromのところに表示したい名前を入れます。メールアドレスとパスワードは、設定したいGmailのアドレスとパスワードを入れます。

入力が終わったら、続けるを押して次へ。

以下のように、Thunderbirdが自動でサーバ設定を検知してくれます。普通はこのまま完了でいけるはずです。デフォルトではIMAPの設定になっているので、POP3にしたい場合は、選択を変えてください。

完了を押すと、OAuth2認証が始まります。メールアドレス、パスワードを入力して認証してください。認証を通ると、以下のように、Thunderbirdがメールや連絡先にアクセスするよと言ってくるので、許可を押します。よく見るとGoogleカレンダーにもアクセスすると書かれています。連絡先だけじゃなくて、カレンダーも一緒に同期することもできます。
アクセス許可すると、Thunderbirdのウィザードに「アカウントの作成が完了しました」とでてきます。が、ここですぐに閉じないでください。閉じてしまった場合は、この次の手順2のやりかたで設定してください。
下のほうに、「リンクしたサービスへの接続」というところがあり、「Thunderbirdがメールアカウントにリンクされたアドレス帳を1冊見つけました」というメッセージがあると思います。メッセージ横の矢印ボタンを押すと、上の画像のように「接続」ボタンが出てくるのでこれを押します。これで、アドレス帳が同期されます。

ちなみに、カレンダーも同様の項目があるので、同じように接続を押すとGoogleカレンダーも同期されます。

ここまできたら、「2.アドレス帳のみ設定する場合」は読み飛ばして、「同期設定が終わったら」へ進んでください。

2. アドレス帳のみ設定する場合

メールは設定済みの場合など、アドレス帳のみ設定するケースです。

まずは、アドレス帳ウィンドウを開きます。で、アドレス帳ウィンドウで、「ファイル→新規作成→CardDAVアドレス帳」を開きます。

ダイアログが開くので、以下のように設定します。
  • ユーザ名:Gmailのメールアドレス
  • 場所:https://www.googleapis.com/carddav/v1/principals/userEmail/lists/default
※場所のuserEmailのところは、Gmailのメールアドレスに変えてください。
 メールアドレスがsample@gmail.comの場合は、
 https://www.googleapis.com/carddav/v1/principals/sample@gmail.com/lists/default
 になります。

次へを押すと、OAuth2認証が始まります。メールアドレス、パスワードを入力して認証してください。すると、以下のように、Thunderbirdが連絡先にアクセスするけどいいか?と聞いてくるので許可を押します。

許可すると、ダイアログに「利用可能なアドレス帳」というのが出てきます。「Address Book」にチェックが入ったままで次へを押すと完了です。チェックを外してしまうとアドレス帳ができないのでご注意を。

同期設定が終わったら

手順1または2で同期設定をしたら、アドレス帳ウィンドウを開いてみてください。「Address Book」というアドレス帳ができていると思います。

「Address Book」上で「右クリック→プロパティ」を開いてください。アドレス帳の名前や同期間隔を設定できます。CardDAV URLのところはいじらないように。
「Address Book」という名前は、別のアカウントを追加した場合も、同じ名前になってしまい(Address Bookというアドレス帳が2個できる)、紛らわしいので変えるのをおすすめします。同期間隔は、頻繁にアドレス帳を編集することはないと思うので、デフォルトの30分ごとで十分ではないかなと思います。今すぐ同期したいときには、右クリックメニューに「サーバと同期」というのがあるので、ここからできます。

以上で設定は終わりです。

最後に

今回、CardDAVというプロトコルを使用しているので、すべての項目が同期されるわけではないのでご注意ください。例えば、Google連絡先のラベルはThunderbirdから見ることはできません。何が同期されるのか、私も全部確認はしていませんが、できないものはしょうがないと割り切るしかないです。

どうしてもやりたい場合は、People API(旧Contacts API)を使ってアドオンを作る必要がありますが、なかなかに大変なので、そういったアドオンが今後でてくることはあまり期待できないかなと思います。Thunderbird 68までは、gContactSyncが頑張ってくれていましたが、Thunderbird 78対応で力尽きてしまったようですし。

私の過去のアドオンGoogle Contactsを動かしたくてたどり着いた方もいるかと思いますが、このCardDAVでの同期でカンベンしてください。自分用だったらいいんですが、いろんな使われ方をして、あれができない、データ壊れたとかいっぱいきちゃうんですよね…。gContactSyncの作者さんは、こんな低レベルな話じゃなくて単純に時間がとれてないだけみたいですけど。

2020年10月18日日曜日

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年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年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版はまだですが、TbSyncとProvider 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月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月9日日曜日

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

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

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

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

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

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年7月24日金曜日

MailExtensionsとWebExtensions

Thunderbird 78.0がリリースされ、アドオンに関しての問い合わせが多くなってきました。その中で、レガシー(Overlay/Bootstrap)、MailExtensions、WebExtensionsと、いろんな言葉があり、混乱されている方が多いので、まとめてみます。

結論から言うと、Thunderbird 78で、WebExtensionsは動きます。


■レガシーアドオン (Legacy Extension)

オーバーレイ(Overlay)タイプとブートストラップ(Bootstrapped)タイプがあります。

オーバーレイは、ThunderbirdのUIやコードを上書きする形で拡張するタイプで、Thunderbirdの初期からあるタイプです。自由度が高く何でもできるため、Firefox/Thunderbirdの強みになっていました。その反面、セキュリティ上のリスクやThunderbird本体の変更の影響をモロにうけるため、バージョンアップの都度、アドオンの修正が必要になり、また、アドオンへの影響を気にしてThunderbird本体側もドラスティックな変更ができない(と開発チームは言っている)といった弱点もありました。

ブートストラップは、オーバーレイから少し自由度を奪う代わりに、アドオンをインストールしてすぐに(再起動せずに)使えるようにしたタイプです。このタイプは、私は開発したことがないので、あんまり知りません。


■WebExtensions

すべての元凶です。Firefoxがこれまでのレガシーアドオンを捨て、Google Chromeのアドオンと互換性の高いフレームワークを開発し、Firefox 57でこれに完全移行しました。これで、Firefoxではレガシーアドオンは動作しなくなりました。WebExtensionsにはレガシーアドオンのような自由度はないので、同じ機能が実現できないアドオンも出てきました。また、ほぼ作り直しになるので、多くのアドオン作者が脱落しました。で、阿鼻叫喚になりました。


■Legacy WebExtensions

このへんから、ややこしくなります。

Thunderbirdのベースは、Firefoxと同じなので、Firefoxの変更の影響を受けます。そのため、ThunderbirdもFirefoxのWebExtensions移行のあおりを受けることになります。しかし、Thunderbirdチームは、レガシーアドオンは捨てずに、WebExtensionsのフレームワークの中で、レガシーアドオンを動かせるようにしました。これがLegacy WebExtensions(Legacy option)で、Thunderbird独自のものです。

以下の投稿で説明したのも、このやり方です。WebExtensionsの設定ファイルであるmanifest.jsonを作って、"legacy": {...} で、XUL/Bootstrapを有効化しています。
https://hogi-ja.blogspot.com/2019/09/thunderbird-68.html

これが入ったのが、Thunderbird 68です。設定ファイルを作り直す必要があるものの、最小限の作業でレガシーアドオンを移植できるため、アドオン作者もなんとか追従できました。

Thunderbird 78で動かなくなったのは、この"legay" :{...}設定です。WebExtensions自体が動かなくなったわけではありません。


■MailExtensions

WebExtensionsは、Firefoxのためのものなので、メールクライアント向けには、いろいろ機能が足りません。そこで、Thunderbird用に追加のAPIを開発したのがMailExtensionsです。Firefoxと共通で使えるもの(設定の保存など)は、WebExtensionsのものを使います。なので、Thunderbird 78以降のアドオンは、WebExtensionsのAPIも、MailExtensionsのAPIも両方使っています。

なので、WebExtensionsはThunderbirdでも動きます。もちろん、ブックマークなどFirefoxにしかないものは、Thunderbirdでは動きません。


■WebExtension Experiments (MailExtension Experiments)

Thunderbird 68で、Legacy optionを導入したものの、Thunderbirdチームだけで維持していくのは厳しく(たぶん)、Thunderbird 78で、結局WebExtensions/MailExtensionsに完全移行することになりました。なので、すべてのアドオンはWebExtensions/MailExtensions APIを使用したものに書き換える必要があり、ほぼフルスクラッチでやり直すことになりました。これが今の状況です。

ただ、ThunderbirdはWebExtension Experiments (MailExtension Experimentsと呼ぶことも)という仕組みを使えるようにしました。これは、従来のオーバーレイタイプでやっていた自由度の高い拡張を可能にする仕組みで、Firefoxではベータ版以降で無効化されているものです。これは、本来、WebExtensionsのAPIを開発するためのものだからです。

このExperimentsを使えば、Thunderbird 78でも、Thunderbird 68と同じことが実現できる可能性があります。WebExtensionsはブラウザ向けのものなので機能不十分、MailExtensionsもまだAPIが全然足りていない状況なので、ちょっとでも凝ったことをしようと思うとこれが必要になります。問題は、これをするには、レガシーアドオン(XUL/XPCOM)の知識も、Web/MailExtensionsの知識も必要、かつ、なかなかの大仕事ということです。私のような小さいアドオンの作者ならいいですが、大規模なものはとんでもない時間がかかると思います。


■まとめ

最後にまとめると、こんな感じです。これからアドオンを作ってみよう、見捨てられたアドオンを動かしてやろうという方は参考にしてください。


Thunderbird 68
Thunderbird 78
Firefox 78
レガシー(Overlay/Bootstrapped)
×
×
×
WebExtensions
〇
〇
〇
Legacy WebExtensions
(Legacy option)
〇
×
×
MailExtensions
〇
〇
×
WebExtension Experiments
〇
〇
×(※)
※ベータ/リリース版で使用不可。

2020年7月20日月曜日

Thunderbird 78対応済みアドオン

Thunderbird 78対応済みのアドオンが、以下のページにまとめられています。(公式サイトに登録されているもの)

現状だと、13アドオンが対応しています。出たばかりとは言え、なかなか厳しい状況ですね。また、大部分に「WebExp」のマークがついており、WebExtension Experiments(APIを自作して旧来のコードを使用する仕組み)に依存しているのも、今後のバージョンアップの観点で心配要素です。

[2020/7/21]
7/21で一気に82アドオンまで増えました!アドオン作者もレビュアも頑張ってますね。なんとかこの調子で、自動アップデートが始まるまでにそろえば。


このリストの「家」のアイコンをクリックすると、ダウンロードサイトに飛べます。

飛んだ先で「Download Now」をクリックしてしまうと、Thunderbird 68版がダウンロードされてしまいます。ここは、「View other versions」をクリックして、古いバージョンのリストを表示してください。すると、Thunderbird 78対応のものもリストアップされると思います。本家サイトの更新が追い付いていないのか、Thunderbird 78はまだあんまり使ってほしくないのか…




2020年7月18日土曜日

Thunderbird 78.xの注意点

Thunderbird 78がリリースされました。新機能などは詳しいサイトがいっぱいあるのでそちらにお任せして、こちらでは、こまごま注意点をまとめておこうと思います。アップデートを検討している方のご参考になれば。


Thunderbird 78 64ビット版

公式サイトの「無料ダウンロード」からダウンロードすると、32bit版をダウンロードしてしまいます。64bit版は、「システムと言語」からダウンロードできます。久しぶりのダウンロードだったので、私も間違えました(笑)




アドオンの更新

Thunderbird 78に更新後、アドオンマネージャを見ると、全アドオンが有効になっているように見えますが、実際には動いていません。歯車ボタンから「今すぐ更新を確認」を実行して、手動で更新が必要です。アドオン作者がThunderbird 78対応版をリリースしていれば、更新されます。

更新されない場合は、アドオン作者が個人HPなどで公開していないか探すしかありませんが、あんまり期待できないかなと思います。


既知のバグ

Thunderbird 78.0のリリース前テストやリリース後に見つかったバグが、以下にまとめられています。英語ですが、事前にチェックすることをおすすめします。アドレス帳が消えてしまうなどの、致命的なものも挙がっています。(私はこのバグには当たりませんでした。)

あと、ダークテーマ回りもハマっていそうです。押しの改善点だったはずが。

このあとも、続々増えていくと思います。

[Bug 1644037] Bugs found during testing and initial release of TB78 [meta]


メッセージヘッダツールバーのカスタマイズ

メッセージヘッダにあるツールバーですが、カスタマイズができません。以下のようにアイコンの横にテキストがある形式でしか表示できず、並び替えや不要なボタンを削除することもできません。


Bugzillaにバグは登録されていますが、どう対処するか決まっていないみたいです。Thunderbird 68からデグレして、こんな状態で出すなよって感じですが…

[Bug 1556261] Implement message header button customisation

私のアドオン(New Tab Button, Tag Popup, Maximize Message Pane)は、ここにボタンを追加しますが、不要な方もいると思います。そういう人には邪魔でしかないので、暫定対応として、メッセージヘッダににボタンを追加しないバージョンを用意しようと思います。
 
[2020/9/8]
ツールバーをカスタマイズするアドオンを作ってみました。よければ試してみてください。また、New Tab Button, Tag Popup, Maximize Message Paneのボタンが不要な方は、こちらのアドオンで対応してください。アドオンごとに、ボタンがあるバージョンと、ないバージョンを作ろうかと思ったのですが、メンテがしんどいので。


Ctrl+マウススクロールでズームできない

[2020/8/27]
Thunderbird 78.2で修正されました。
 
これもオイっていうデグレですが、Ctrlを押しながらマウスのスクロールをグリグリしても、ズームができません。メッセージヘッダのカスタマイズと同じくバグは挙がっていますが、対応の計画はよくわかりません。 以下のバグは、ポップアップなど、アドオンでズームできないバグに置きかわってます。

[Bug 1634556] Ctrl+scroll wheel does not zoom in message reader, message pane or compose window


Thunderbird 68に戻したい場合
 
間違って自動更新でアップデートしてしまったなど、Thunderbird 68に戻したい場合は、少し注意が必要です。Thunderbird 68を再インストールした後、普通に立ち上げると「古いバージョンのThunderbirdを使っている」と怒られてしまい、起動できません。コマンドラインから「--allow-downgrade」オプションをつけてThunderbird 68を起動してください。
 
ショートカットを作って、リンク先のところに「--allow-downgrade」を追加してもいけます。(Windowsの場合)
 
例: "C:\Program Files\Mozilla Thunderbird\thunderbird.exe" --allow-downgrade
 
もちろん、データが壊れる可能性もあるので、プロファイルフォルダのバックアップをとったうえで試してください。データが壊れてしまうようであれば、もうThunderbird 78に移行するしかないかなと思います。Thunderbird 68を使い続けるのも、セキュリティ上の問題がありますし。


テーマが変になる

v78.4.3で修正されました。
 
これは私の環境なのかもしれないですが、Darkテーマから既定のテーマに戻せません。また、その状態だとダークテーマとも違う色付けになっています。こうなってしまった場合は、いったんLightテーマにしてから、既定のテーマにすると戻ります。Thunderbirdチームもテーマ回りは手こずっているようです。

2020年7月14日火曜日

Thunderbirdをタスクトレイ(通知領域)にしまう

Thunderbird 78から、最小化時にタスクトレイにしまって、常駐させることができるようになります。


デフォルトでは無効になっているので、オプションで設定が必要です。

アプリメニュー(三本線のアイコン)から、「オプション」を選んで、「一般」の「システム統合」にある、「最小化したThunderbirdをタスクトレイにしまう」をチェックしてください。



Thunderbird 60まではアドオン(MinimizeToTray)で対応していましたが、Thunderbird 68で方法がなくなり、Thunderbird 78で本体がようやく対応した形です。ただ、MinimizeToTrayでは閉じるボタン(×ボタン)でも最小化できていましたが、Thunderbird 78では終了してしまうので注意してください。この動作をアドオンで変更するなどはたぶん難しいので、慣れるしかないかなと思います。
Minimize on Closeを使えば、閉じるボタンで最小化もできます。

Thunderbird 78に乗り換えると、これまで使っていたアドオンが、作者が対応しない限り動作しなくなってしまうので、アドオンをとるかタスクトレイ最小化をとるか、悩ましいところもあります。いつかは、Thunderbird 78に移行しないといけないですが。

2020年7月10日金曜日

(拡張機能版) BracketsでIMEの予測変換がかぶる問題の直し方

先日、Adobe BracketsでIMEの予測変換がかぶってしまう問題を、スタイルシートの編集で対処する方法を投稿しました。

(CSS版) BracketsでIMEの予測変換がかぶる問題の直し方

ただ、このやり方だと、今後のBracketsのアップデートで上書きされたり、CSS編集に抵抗がある方もいるかもしれないので、拡張機能での対応もしてみました。

ダウンロード (Fix IME Overlap):

Fix IME Overlapという拡張機能をダウンロードして、インストールしてください。

インストールは、ファイル→拡張機能マネージャから拡張機能マネージャを開いて、下の図のように「.zipをここにドラッグするか、…」と書いているところに、ダウンロードしたzipファイルをドラッグ&ドロップしてください。インストールしたら、すぐに有効になります。再起動はいりません。



CSS版では、0.25ex分下に下げていますが、拡張機能では、デフォルトのフォントサイズ(12px/1em)と今のフォントサイズの差分だけ下げるようにしています。

拡張機能だとインストールするだけですんで手軽ですが、細かい調整ができません。もし、お使いの環境でうまくいかない場合は、CSSを編集するやり方で微調整してみてください。

2020年7月8日水曜日

(CSS版) BracketsでIMEの予測変換がかぶる問題の直し方

[2020/7/10] 追記
この記事はBracketsのスタイルシートを自分で編集して、予測変換の位置を調整する方法を紹介しています。手軽にできるように拡張機能も作ってみましたので、よければ以下もお試しください。

(拡張機能版) BracketsでIMEの予測変換がかぶる問題の直し方


Thunderbirdのアドオン開発に使用しているAdobe Bracketsですが、日本語入力するとMicrosoft IMEの予測変換が入力文字にかぶってしまい、めちゃめちゃ使いにくいことに気づきました。これまで問題にならなかったのは、最近ノートPCを新調して、解像度の高さから、フォントサイズをデフォルトから変更したためで、デフォルトのサイズで使っていた古いPCでは起きてなかったからと思います。

こんな感じで入力文字が読めない。



この問題は古くからあるようで、「予測変換を切ること」をすすめているサイトが多いのですが、これはちょっとイヤだなぁということで…。もうちょっと調べてみると、Bracketsがエディタ部分に使用しているCodeMirrorというコンポーネントの問題っぽいことがわかりました。

で、Bracketsのスタイルシートをいじることで、なんとか回避ができたので、ご紹介します。よろしければご参考までに。


IMEの予測変換がかぶる問題の直し方

①スタイルシート(brackets.min.css)をコピー
<Brakcetsのインストールフォルダ>/www/styles/brackets.min.css をデスクトップなど、適当な場所にコピーしてください。

インストール時に特に何もしていなければ、Windowsの場合、
 C:\Program Files (x86)\Brackets\www\styles
にあります。

(インストールフォルダで直接ファイルを編集すると、権限の問題で保存できない場合があるので、この手順を入れています)

②コピーしたスタイルシートを編集
以下を、スタイルシートの末尾に追加してください。

.CodeMirror-wrap > div > textarea{top:0.25ex !important}

③編集したスタイルシートをもとの場所に上書き
元のbrackets.min.cssのバックアップを取って、新しく作ったものに置き換えてください。アクセス権の警告が出る場合は、OKしてください。

④Bracketsを立ち上げ、確認する
予測変換のウィンドウが出る位置は、フォントサイズによって変わるので、オーバーラップする問題が解消されたか確認してください。

なおっていない場合は、スタイルシートの「0.25」の部分を変更して、位置を調整してください。数字を小さくすると上に、大きくすると下に移動します。あまり下に下げすぎると、予測変換が上側に出る場合が問題になってしまうので、要注意です。下に出る場合も上に出る場合もかぶらない、絶妙な位置を探ってください。

たぶん、ほとんどの方は「0.25ex」のままでいけると思います。こんな感じで、邪魔にならない位置に出るようになります。

下に出る場合:

上に出る場合:


この問題は、BracketsのGitにはあがっていますが、開発は停滞気味のようですし、文字変換をしない言語の人が多いでしょうから、根本解決はあまり望めない気がします。

2020年7月6日月曜日

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

アドオンの開発は、Adobe Bracketsを使用するようになりましたが、ちょっとしたメモなどには、サクッと起動できるMeryを使用しています。

Bracketsは、先日、Emacsキーバインドを導入+改造しましたが、Meryもマクロを作ればできるようなのでやってみました。最低限これだけあればというものは用意できて、なかなかいい感じになったかなと思います。

ここに公開しますので、もし必要な方がいましたら、ご自由にお使いください。

動作確認は、Mery Ver 3.0.4でしています。

マークを実現するために、「Document.Tag」プロパティを使用しています。これは、Ver 3.0.0で追加されたものなので、リリース版(Ver 2.6.7)では動作しないのでご注意ください。Ver 3.0.4以降での使用をおすすめします。

■ダウンロード:
Mery 3.0.4

Emacsキーバインド用マクロ


Emacsキーバインド用マクロ

作成したマクロは以下です。マクロをMeryに読み込んで、キーを割り当ててください。キーアサイン例には、私がしたキーアサインを書いています。C-x C-sなどの2ストロークのキーバインドは、Meryの仕組み上、難しそうなので見送りました。
v1.1で一部の2ストロークキーに対応しました。「テキストエディタMeryでEmacsキーバインド (2)」もご確認ください。

マクロ
動作
キーアサイン例
beginning-of-line.js
行頭にカーソルを移動
C-a
end-of-line.js
行末にカーソルを移動
C-e
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
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-/

yank.jsやundo.jsなどは、Meryの既存のコマンド(C-v, C-z)のキーアサインを置き換えてもいいのですが、それだともとのアサインがつぶされてしまうので、もとのアサインも使えるようにマクロを用意しました。(C-vでもC-yでもペーストできる)


設定の仕方

まず、ダウンロードしたmery-emacs.zipを解凍して、適当なディレクトリに置いてください。私はMeryのインストールフォルダにある「Macros」フォルダに置きました。

次に、Meryを立ち上げ、マクロ→カスタマイズを選択します。すると、以下のダイアログが表示されます。
(すでにマクロが読み込まれている表示になっていますが、実際には、この段階ではデフォルトのマクロしか表示されません)


ダイアログが開いたら、追加ボタンを押し、必要なマクロファイルをすべて追加してください。上記のように、マクロが表示されたら、OKを押してダイアログを閉じます。

なお、各マクロのチェックボックスをチェックすると、マクロメニューに追加され、メニューから呼び出せるようになります。今回は、ショートカットキーで使うので、ここはチェックしなくてもよいです。「イベントで実行」も同様に、チェック不要です。

マクロが登録できたら、各マクロにショートカットキーを割り当てていきます。ツール→オプションを選択してください。オプションダイアログが表示されるので、左側で「キーボード」を選択し、カテゴリで「マクロ」を選択します。すると、以下のように、先ほど追加したマクロが表示されると思います。


コマンド欄でキーアサインを設定したマクロを選択した後、新しいキー欄にカーソルを持っていきます。ここで、C-pなどの割り当てたいキーを押してください。すると、押したキーが表示されるので、問題がなければ、割り当てを押してください。

これで、キーアサインがされたことになるので、ほかのマクロも同様にキーを割り当ててください。

現在の割り当て欄に何か表示された場合は、すでにこのキーアサインが使用されています。マクロに割り当てると、元のキーアサインは使えなくなります。必要に応じて、別のキーを割り当てるなどしてください。私は、それほど使用頻度の高いものではなかったので、全部つぶしてしまいました。


注意事項

お約束ですが、このマクロを使用して何か問題が起きても責任はとれないので、ご理解ください。また、私が使用するのに必要な機能を実装したので、厳密にはEmacsの動作と異なる部分があるかもしれません。

2020年7月2日木曜日

Check and Send 2.x の設定方法

Thunderbird 78対応に際し、Check and Sendを完全新規で書き直しました。

これまで旧版を使っていた方も、再設定が必要になりますので、新しくなった設定方法をまとめておきます。

※まず、メール作成ウィンドウのツールバーに「チェック」ボタンを配置してください。置かない場合は、メール送信自体できなくなってしまいます。

設定画面の開き方

  1. アドオンマネージャを開く(アプリメニュー(三本線のアイコン)→ アドオン を実行)
  2. 左側の項目で「拡張機能」をクリック
  3. インストール済みのアドオンが表示されるので、「Check and Send」をクリック
  4. 「オプション」をクリック

以下のような画面が表示されます。



設定する差出人

Check and Send は差出人情報(From アドレス)ごとに、設定ができます。ここで、設定する差出人を選択します。

リストには、「共通」とセットアップされている差出人が表示されます。

「共通」は、差出人によらず、共通的に使用する設定です。デフォルトでは、全差出人で共通設定を使うようになっています。

■共通設定
共通設定では、以下のように、
  • 差出人ごとに設定する
  • すべてのチェックを無効にする
を選択するようになっています。


「差出人ごとに設定する」を選択すると、その下に各種設定が現れ、チェック内容を設定できるようになります。

「すべてのチェックを無効にする」を選択した場合は、Check and Send自体が無効になり、何もチェックせずにメール送信するようになります。

■差出人ごとの設定
各差出人ごとに設定を変えたい場合に、この設定をします。

共通以外を選択すると、以下のように、
  • 共通設定を使う
  • 差出人ごとに設定する
  • すべてのチェックを無効にする
を選択するようになります。

デフォルトでは、「共通設定を使う」が選択されています。この場合、「共通」で設定した内容でチェックをします。

「差出人ごとに設定する」を選択した場合、ここでした設定は、この差出人のみに適用されます。

「すべてのチェックを無効にする」を選択した場合は、この差出人の場合のみ、何もチェックせずにメール送信するようになります。


宛先の種類

これ以降、上記で「差出人ごとに設定する」を選んだ場合の設定項目を説明します。

宛先の種類では、To/Cc/Bcc/Reply-Toの有無をチェックします。

設定
説明
以下が空欄だった場合に確認する
選択したフィールドが空欄だった場合に警告します。
宛先/Ccが XX を超え、Bccがなかったら確認する
宛先、Ccの数の合計が指定した数を超え、かつ、Bccが空欄だった場合に警告します。多数の宛先に送る場合は、Bccにしないといけないなどのルールがある場合のチェックを想定しています。
0を設定すると、この機能が無効になります。


宛先のアドレス

To/Cc/Bcc/Reply-Toのメールアドレスをチェックします。

設定
説明
すべてのアドレスをポップアップする
全アドレスを無条件にポップアップします。
リストに基づいてポップアップする
アドレス帳、アドレスのリストを使用してポップアップします。以下で詳細を設定します。
アドレスがアドレス帳にあったら/なかったら確認する
アドレスがアドレス帳にあったら or なかったらポップアップします。アドレス帳がこの設定の下に列挙されるので、使用するアドレス帳を選択してください。
アドレスがリストにあったら/なかったら確認する
アドレスがリストにあったら or なかったらポップアップします。リストはその下にあるリストボックスで指定します。リストには個別のメールアドレス(xxx@yyy.comの形式)とドメイン(yyy.comの形式)が指定できます。ドメインを指定すると、社外のメールアドレスのみポップアップするなどができます。
Bccを上記チェックから除外する
アドレス帳、リストによるチェック対象からBccを除外します。
上記チェックの両方にマッチしたアドレスのみポップアップする
アドレス帳によるチェック、リストによるチェック両方にマッチしたアドレスのみポップアップします。アドレス帳にない社外あてメールをポップアップするなどができます。
ポップアップしない
メールアドレスチェックを無効にします。
重複したアドレスを削除する
To/Cc/Bcc/Reply-Toそれぞれで、重複アドレスを削除します。ToとCc両方に同じアドレスがあるなどの、フィールドをまたがった重複は削除しません。
削除前に確認しない
重複アドレスがあった場合に、ポップアップには表示せず、強制的に重複を解消します。


宛名

「名前 <xxx@yyy.com>」の名前の部分をチェックします。

設定
説明
宛名をアドレス帳の宛名に修正する
アドレス帳に登録されている名前と異なる場合にアドレス帳の名前に修正します。
アドレス帳にない場合は宛名を削除する
アドレス帳に登録されていないアドレスの場合に、宛名を削除します。
アドレス帳
チェックに使用するアドレス帳を選択します。
宛名を削除する
アドレス帳のチェックはせずに、すべてのアドレスの宛名を削除します。
なにもしない
宛名チェックを無効にします。
修正前に確認しない
宛名を修正/削除する場合に、ポップアップで確認せずに、強制的に変更します。


差出人

単に差出人をポップアップするだけの設定です。複数の差出人を使い分けている場合の確認に使用してください。



添付ファイル

添付ファイルをチェックします。

旧版には、「添付」などの文字があるが添付ファイルがない場合の警告がありましたが、Thunderbird本体に類似の機能があるため削除しました。

設定
説明
添付ファイルのサイズが XX MBを超えたら確認する
添付ファイルの合計サイズが、指定されたものを超えたらポップアップします。
 0 MBを設定すると、このチェックは無効になります。
添付ファイルの拡張子が以下だったら/でなかったら確認する
拡張子が指定したものだったら or でなかったらポップアップします。
拡張子はその下にあるリストで指定します。
「exe」のように、単に拡張子を入れればOKです。「*.exe」のように入れてもよいですが、「*.」の部分は無視されます。


単語

メールの件名、本文をチェックする設定です。


設定
説明
以下の単語がメール中にあったら確認する
リストで指定した単語がメール中にあったらポップアップします。
以下の単語がメール中になかったら確認する
リストで指定した単語がメール中になかったらポップアップします。
正規表現として解釈する
リストで指定した単語を正規表現のパターンとして扱います。
大文字と小文字を区別する
リストで指定した単語を検索する際、大文字と小文字を区別して扱います。
引用と署名を検索対象から除外する
引用部と署名部をチェック対象から除外します。
引用部は「>」または「|」の部分、署名部は「-- 」以降の部分です。
以下を検索する
チェック対象を指定します。


曜日/日付

メール中の曜日間違いなどをチェックします。この設定は、以下のブログ記事でまとめているので、そちらを確認してください。


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