Macro Template
薄雲ではあったけれど、しっかりと太陽が出ていた晴れ。
少し前に、Thunderbirdの
Macro Template :: Thunderbird向けアドオン
が、
再復活したので、使ってみると、
という感じだった。
興味を持ったので、中を見て動作確認。
今回、僕が問題だと思ったものは2つ。
・ToやCCに設定したメールアドレスが読み込まれない
・メールの返信ボタンを押し、メール作成ウインドウが現れると、カーソルが引用文の下になってしまう。設定では、引用文の上にしている
まず、メールアドレスの方は、どうも読み込むタイミングが合っていないようだった。
そこで、遅延処理を入れると、きちんとメールアドレスも読み込むようになった!
次に、カーソルが引用文の下になる件。
このプログラム、メール作成画面で表示するもの全て、読み込んでいるようだ。
それが原因で、今回のようなことになっている。
理想は、テンプレート・フォルダのものだけを対象にして処理をすることなんだけれど、どうも、そういうのは出来なさそう、もしくは、面倒くさそう。
このMacro Templateは、「{{{文字列}}}」を対象に、しかるべき日時に置き換えている。
メール文で、「{{{文字列}}}」というような書き方なんて、基本的にはしないと思う。
よって、題名やメール本文に、これがあれば、Macro Template対象として処理し、そうでなければ何もしないにすればいいのでは?と思って、やってみたら、ビンゴー!
返信ボタンを押して、メール作成画面が立ち上がると、きちんと引用文の上にカーソルが行くようになった。
このアドオンの使用者数は少ないようだけれど、僕はどうやったかを残しておく。
また、その後に、このMacro TemplateのuserChrome.jsバージョンを書いておく。
ソースは、
macrotemplate/bootstrap.js at master · nattoheaven/macrotemplate · GitHub
にあるので、ここを参照してね。
まず、1つ目。
await browser.compose.getComposeDetails(tab.id);
とあるのを削除。
どうも、裏技的に追記しているようだ。
それを、
await new Promise(resolve => setTimeout(resolve, 500));
に置き換え。
非同期のスリープだ。
こうすることにより、メールアドレスの読み込むタイミングを合わせてあげる。
2つ目。
題名(Subject)や本文(Body)を書き換えしているものを、それぞれに分離。
そして、それぞれのところに、if分を追加。
if(/\{\{\{.*\}\}\}/.test(変数)){
これは、正規表現で、「{{{」と「}}}」の間に、何らかの文字「.*」があるものを対象にしている。
この書き方だと、最長一致になるけれど、今回は、それが1つでもあれば対象にするので、それで問題ない。
このif分の中に、マクロ変換処理と題名や本文の書き換え処理を入れておけばいい。
次は、userChrome.js版のMacro Templateの基本形。
(function() {
'use strict';
window.MacroTemplate = {
init: async function () {
if (location != 'chrome://messenger/content/messengercompose/messengercompose.xhtml') return;
await new Promise(resolve => setTimeout(resolve, 500));
let date = new Date();
//題名
let oldSubject = msgSubject.value;
if(/\{\{\{.*\}\}\}/.test(oldSubject)){
msgSubject.value = this.replaceMacros(oldSubject, date);
}
//本文
let oldBody = document.getElementById('content-frame').contentDocument.getElementsByTagName("body")[0].innerText;
if(/\{\{\{.*\}\}\}/.test(oldBody)){
document.getElementById('content-frame').contentDocument.getElementsByTagName("body")[0].innerText = this.replaceMacros(oldBody, date);
}
},
replaceMacros: function(s, date) {
//macrotemplate/bootstrap.js at master · nattoheaven/macrotemplate · GitHub
//のソースの「var padZero = function(x, n) {」以降を参照。「return s;」まで
}
};
window.MacroTemplate.init();
})();
マクロ変換部分は、ソースの方を参照し、コピーすればいいだけ。
上記を「userChrome_MacroTemplate.uc.js」という名前にでもして、保存。
そして、Thunderbirdの「chrome」フォルダに置いておけばいい。
僕は、マクロ変換処理のところに、「午前/午後」「a.m./p.m.」「和暦」「英語の日付(1st, 2nd, 3rd・・・)」なんかを追加した。
例えば、次のようなマクロを、テンプレートとして保存し、
{{{yyy}}}年{{{M}}}月{{{d}}}日 {{{JE}}} {{{PH}}}時{{{m}}}分{{{s}}}秒
{{{yyyy}}}/{{{MM}}}/{{{dd}}}({{{JEEE}}}) {{{HH}}}:{{{mm}}}:{{{ss}}}
{{{EPT}}} {{{E}}} {{{d}}} {{{MMMM}}} {{{yyyy}}}
そのメールを起動すると、こんな感じになる。
令和3年2月5日 金曜日 午後9時18分49秒
2021/02/05(金) 21:18:49
9:18 p.m. Thursday 5th February 2021
日時は、そのメールを新規作成した時のものになる。
メール送信時に、その日時がほしい時、いちいち手で打ち込まなくてもいいので、とても便利!
これで、問題点は解決したので、以前のように使うことが出来るようになった。
結局、userChrome.jsで出来るようになったので、アドオンの方は、寝かせている。
ちなみに、新規メール画面で何か処理をしたいなら、このuserChrome.jsを応用すれば、それが可能となる。
ツールバーを作成し、そこにボタンを並べ、それぞれのボタンに定型文を埋め込めば、「Quicktext」
Quicktext :: Thunderbird向けアドオン
のようなものを作ることも可能。
結構面倒だけれど。(苦笑)
メニューバーを作るなら、
var hb = document.getElementById('headers-box');
var mb = document.createXULElement('menubar');
mb.setAttribute('id', 'mymenubar');
mb.setAttribute('class', 'menubar');
hb.appendChild(mb);
で出来る。
これに、ボタンなりメニューなりを登録し、それぞれに対して処理を書いていけばいい。
| 固定リンク
« 雪 | トップページ | こんなことってあるんだ »
「パソコン・インターネット」カテゴリの記事
- 定例のアップデート(2024.11.28)
- 今日はどうだったか(2024.11.22)
- 何かが降ってきた(2024.11.21)
- 画面内の文字をテキスト化(2024.11.19)
- 使われないデータ(2024.11.16)
コメント