Thunderbirdでアドレス帳から入力するときに名前を付けないようにする

Thunderbirdでメールの宛先を入力するとき、アドレス帳から選択すると「名前 <メールアドレス>」という形式で挿入される。
この「名前」の部分はアドレス帳でいう「表示名」に該当する項目で、ここが空欄の場合は単純にメールアドレスだけが挿入される。「姓」「名」や「ニックネーム」は使用されない。


個人的にこの名前の部分は挿入したくないんだが、どうやらそういう設定はないらしい。
名前を出さないためにはアドレス帳の表示名を空欄にすればいいんだが、そうすると今度はアドレス帳の表示がメールアドレスのユーザ部分になってしまい、視認性が著しく下がる。


どうにかならないものかと調べてみたら、messenger.jarの中のcontent/messenger/addressbook/abCommon.jsを改造すればよいことがわかった。

改造してみる

Thunderbirdのインストールディレクトリ下のchrome/messenger.jarが目的のブツを含んだアーカイブ。実体は無圧縮のzipファイルなので適当なアーカイバで展開してやる。
展開されたファイルのうちcontent/messenger/addressbook/abCommon.jsというファイルが目的のブツ。こいつを書き換えてやるぜ。


バージョンによって違ってくるのかもしれないが、2.0.0.19では857行目から始まるGenerateAddressFromCard関数が問題の処理を行っている関数、アドレス帳のカードからメールアドレスを返す関数だ。

function GenerateAddressFromCard(card)
{
  if (!card)
    return "";

  var email;

  if (card.isMailList) 
  {
    var directory = GetDirectoryFromURI(card.mailListURI);
    if(directory.description)
      email = directory.description;
    else
      email = card.displayName;
  }
  else 
    email = card.primaryEmail;

  return gHeaderParser.makeFullAddressWString(card.displayName, email);
}

途中でアドレス帳でいう「アドレスリスト」らしき分岐があるが、最終的にはgHeaderParserなるもののmakeFullAddressWStringメソッドの結果を返している。
詳しいことはわからないが、こいつが表示名の有無でアドレスを整えたりしてるんだと思われるので、ここでおもむろにemailを返してみる。

function GenerateAddressFromCard(card)
{
  if (!card)
    return "";

  var email;

  if (card.isMailList) 
  {
    var directory = GetDirectoryFromURI(card.mailListURI);
    if(directory.description)
      email = directory.description;
    else
      email = card.displayName;

    // ここ追加
    return gHeaderParser.makeFullAddressWString(card.displayName, email);
  }
  else 
    email = card.primaryEmail;

// ここ変更
//  return gHeaderParser.makeFullAddressWString(card.displayName, email);
  return email;
}

アドレスリストは実際に登録されているメールアドレスが挿入されるわけではなくアドレスリスト名(?)が挿入され、送信時にそれを展開して送ってるような気がするので、変な影響が出ないようにmakeFullAddressWStringの結果を返すように残しつつ、普通のアドレスの時だけemailを返すように変更。


書き換え終わったら無圧縮zip*1でmessenger.jarに固めなおしてThunderbirdを再起動。
早速アドレス帳から挿入してみると……メールアドレスしか挿入されない! 成功!
ここをいじれば「表示名がない場合は姓名を組み合わせる」とか「ニックネームを優先させる」とか色々できるね。


しかしこれ、バージョンアップとかで上書きされると元に戻っちゃうからプラグイン的な手法でなんとかできないかなぁ。

*1:圧縮でも大丈夫そうだけど念のため。