SetFindPack, YenEncode関数(TKInfo.dll)(Ver7.30対応版)
 SetFindPack関数は、パラメータで指定した検索パック文字列を、秀丸メールの「現在の検索パック」として設定します。

 YenEncode関数は、秀丸エディタのinput関数などで入力された文字列をSetFindPack用に変換する関数です。使い方については最後に説明します。
パラメータ1(文字列型)
 検索パック文字列です。形式については備考を参照ください。


返り値(数値型)
 検索パック文字列の解析に成功した場合は1、失敗した場合はエラーメッセージを出すと同時に0を返します。


備考
 検索パック文字列は、複数の検索条件の組み合わせに、さらにフラグなどが組合わさった物です。例えば、
 "abc"が「Subject:」ヘッダにあって、さらに"xyz"が本文にある
 のような条件は、
("abc", target=subject) and ("xyz", target=body)
 のように、複数の検索条件のセットをandまたはorで連結させた物が基本となります。さらに、フラグによる検索条件などを指定する時は、
("abc", target=subject) and ("xyz", target=body), flag=mark
 のように、後ろにコンマ区切りで条件を指定します。


1つの検索条件
 かっこ内に指定する検索条件は、以下のような形式となります。
( 検索文字列, target=XXXX, casesense, nocasesense, regular, noregular, fuzzy, word, not, noreturn )
 検索文字列はダブルクォーテーションで囲んだ検索対象文字列です。

 target=XXXXは、検索対象を指定します。XXXXの部分には、以下のパラメータが指定できます。
subject 件名
from+to 宛先/差出人(To/From/Reply-To/Cc/Bccヘッダ中)
from 差出人(From/Reply-Toヘッダ中)
to 宛先(To/Cc/Bccヘッダ中)
body 本文
header ヘッダ
all ヘッダ+本文
smallheader 簡略ヘッダ
smallheaderbody 簡略ヘッダ+本文
country 発信元の国識別
memo メモ
tofromcache From/To列表示用のキャッシュ
subjecttofromcache 件名+From/To列表示用のキャッシュ
body_noteachline 本文(「^」は本文の先頭にのみヒット)
person メールアドレス検索用の指定、またはMessage-Id検索の指定。
その他、任意のヘッダ

 任意のヘッダを指定するときは、ヘッダ名をコロン付きで、さらにダブルクォーテーションで囲んで指定する必要があります。
 personは「メールアドレス検索」用の指定です。詳しくは後で説明します。
 target=を特に指定しなかった場合はtarget=subjectと同じ扱いとなります。

 casesense, nocasesense, regular, noregular, fuzzy, wordの指定は以下のような組み合わせとなります。途中のバージョンから「正規表現ありで、しかも大文字/小文字を区別しない検索」をサポートした関係で、オプション指定の組み合わせが少々ややこしくなっています。
大文字/小文字を区別しない普通の検索: なし
大文字/小文字を区別する普通の検索: casesense
大文字/小文字を区別しない単語検索: word
大文字/小文字を区別する単語検索: casesense, word
大文字/小文字を区別しない正規表現の検索: regular, nocasesense
大文字/小文字を区別する正規表現の検索: regular
大文字/小文字を区別しないあいまい検索: fuzzy, nocasesense, noregular
大文字/小文字を区別するあいまい検索: fuzzy, noregular
大文字/小文字を区別しないあいまいで正規表現検索: fuzzy, nocasesense
大文字/小文字を区別するあいまいで正規表現検索: fuzzy
 notは、「見つからなかった方を対象とする」の意味です。
 noreturnは、「改行/空白を無視」の意味です。
 fuzzyを指定する場合、正規表現のON/OFF、大文字/小文字区別のON/OFFがどっちなのか非常にわかりにくいです。なので、fuzzyを指定する場合は、「regular/noregular」をセットで付けることを強くお勧めします。(ついでにcasesense/nocasesenseも)
大文字/小文字を区別しないあいまい検索: fuzzy, nocasesense, noregular
大文字/小文字を区別するあいまい検索: fuzzy, casesense, noregular
大文字/小文字を区別しないあいまいで正規表現検索: fuzzy, nocasesense, regular
大文字/小文字を区別するあいまいで正規表現検索: fuzzy, casesense, regular


オプション
 検索条件の後ろに指定するオプションには以下の種類があります。

flag=
 flag=は、「追加の条件」としてメールのフラグによる指定をするのに使います。単独のフラグを指定する場合は、「flag=mark」のように指定します。「でない」を指定するには、「flag=!mark」のように「!」記号を使います。
 複数のフラグを指定する場合は、ANDとORの2種類の指定があります。AND指定する場合は、「&」記号を使って複数のフラグを連結します。ORの場合は「|」です。例えば「flag=mark|unread」や「flag=unread&!mark」のように指定します。
 フラグには以下の種類があります。
mark マーク
orikaeshi 折り返し
cc 複数宛先
attach 添付ファイル付き
messageid 「Message-Id:」ヘッダを含む
inreplyid 「In-Reply-To:」ヘッダまたは「References:」ヘッダを含む
priority1 優先順位:高のメール
unread 未読
reply 返信メール、または返信されたメール
forward 転送メール、または転送されたメール
altered 改変されたメール
hot 新着メール
html HTMLメール
memo メモ付きメール
send 送信メール(!sendの場合は受信メール)
sent 送信済みメール(!sentは未送信メール)
color 色つきメール
spam 迷惑メール
 ちなみに、受信メールでは送信済みかどうかのフラグは不定なので、受信メールを対象としたsent指定または!sent指定は結果が不定となります。
「send&sent」 送信済みメールのみ
「send&!sent」 未送信メールのみ
「!send|sent」 受信メールまたは送信済みメール
「!send|!sent」 受信メールまたは未送信メール
 といった使い方をしてください。

さらに、期間を指定するdate=とtransmit=、サイズ範囲を指定するsize=、色を指定するcolortarget=またはcoloortargetmask=が指定できます。これらについては「!」を付けることはできません。

transmit=
 transmit=は、送受信時刻の範囲指定のために使います。指定する文字列は、ダイアログボックスで指定する範囲を「-」で区切って使います。例えば、
transmit=メーラー起動時-指定なし
 のように指定します。
 日時指定の形式は、「検索して一覧作成」のダイアログボックスから追加の条件を指定するダイアログボックスを表示した先にある「送受信日時が」の右側にある形式になります。詳しくはそちらのヘルプを参照ください。


date=
 date=は、メール中のDate:ヘッダの示す日時の範囲指定のために使います。指定する文字列の形式は、transmit=の場合と同じです。


size=
 size=は、メールのサイズの範囲を指定します。size=1000-2000や、size=1K-2Kのように指定します。指定できる範囲文字列はダイアログボックスを参照ください。


colortarget=
 colortarget=は、色つきメールを検索する時に、具体的な対象の色を指定するのに使います。色は番号で1〜15まで指定できます。番号と色の対応関係は、ダイアログボックス中での色の並び順と同じです。
 colortarget=を省略したり、「colortarget=0」を指定したりすると、すべての色つきメールが対象となります。
 colortarget=は「color」を指定した時でないと意味がありません。「!color」の指定も意味がありません。また、colortarget=自体には「&」、「|」の区別は関係ありません。さらには、「赤以外」のような指定はできません。
colortargetmask=
 colortargetmask=は、色つきメールを検索する時の色を複数指定するのに使います。ここで指定する値の意味は、
  • なし = 1
  • 赤 = 1
  • 緑 = 2
  • 紫 = 4
  • 青 = 8
  • 水色 = 16
  • 黄色 = 32
  • 灰色 = 64
  • 赤い背景 = 128
  • 緑の背景 = 256
  • 紫の背景 = 512
  • 青い背景 = 1024
  • 水色の背景 = 2048
  • 黄色の背景 = 4096
  • 灰色の背景 = 8192
  • 反転 = 16384
を足した値となります。
colortarget=とcolortargetmask=の両方を指定することは普通ありません。



subfolder=
 「検索して一覧作成」の時に、サブフォルダも含んで検索するかどうかのフラグ。0または1が指定できます。
 サブフォルダを含めて、さらに「検索フォルダ含む」もONにしたい場合は、2を指定します。(Version 7.20から)


inmail=
 検索の時にメール内かフォルダ内検索か、あるいはアカウント内か全アカウントかを指定します。0はフォルダ内、1はメール内、2はアカウント内、3は全アカウント、4はアカウントグループ内となります(歴史的な理由により、 「inmail」という名前になっています)。


persontarget=
 target=personとしてさらにpersontarget=を指定すると、メールアドレス検索という意味になります。
 メールアドレス検索の時の、対象ヘッダを指定します。指定できるのは、
From
Reply-To
To
Cc
Bcc
の5種類があります。これらのヘッダ名を小文字にし、「|」記号でくっつけて複数指定してください。
all
 と指定すると上記の5種類すべてを指定したのと同じ意味になります。
さらに、メールアドレス検索の所で指定出来る「おおざっぱ検索」を指定する
rough
と、さらに「From/To列表示用キャッシュから検索」用の、
cache
と、さらに「正規表現で文字列検索」用の、
regular
があります。  persontarget=の指定自体を省略した場合は「persontarget=from|reply-to|to|cc|bcc」と同じ扱いとなります。(互換性確保のため)
 「cache」と他のヘッダ名と両方を「|」で指定することも出来ますが、「cache」の指定があれば、他のフラグはすべて無視されて、あくまでFrom/To列表示用キャッシュから検索する動作となります。
persontarget=from|reply-to


messageidtarget=
 target=personとしてさらにmessageidtarget=を指定すると、Message-Id検索という意味になります。
 指定できるのは、
messageid
inreplyid
 の2種類および、すべてを意味する
all
 です。それぞれMessage-Id検索ダイアログボックス上のチェックボックスに対応しています。具体的な対象についてはダイアログボックス側のヘルプを参照ください(制限がありますので)。
messageidtarget=messageid|inreplyid


hilight=
 「検索文字列を強調」のオプションON/OFFを指定します。0を指定するとOFF、1を指定するとONの意味になります。ちなみにGetFindPack関数ではこのhilight=の値は取得できません。
skipquot
 「, skipquot」があると、メール本文を検索対象に加える設定の時(検索対象が「本文」、「簡略表示ヘッダ+本文」等の場合)、メール本文の中の引用行を検索対象から除外します。
addthread
 「, addthread」があると、「検索して一覧作成」を一通り実行した後で、検索結果のメール1通ずつについて、スレッド的につながるメールをアカウント内から検索し、それを検索結果に追加します。


「メールアドレス検索」をするときの指定
 メールアドレス検索も、DoGrep関数で実行します。そのときの検索条件は以下のようにしてください。
検索対象が「すべてのアカウント」、または「現在アカウント」の場合:
("メールアドレス", target=person), subfolder=1, persontarget=all
検索対象が「現在フォルダ」の場合:
("メールアドレス", target=person), subfolder=0, persontarget=all


追加の条件のみの指定方法
 検索対象文字列は何も指定せず、フラグによる検索だけを指定したい場合には、
"flag=mark+!unread"
 のように、検索文字列無しでいきなりflag=を指定してください。


「新着リスト」をするときの指定
 新着リストコマンドに相当する検索は、
flag=!send&transmit=メーラー起動時-指定なし, subfolder=1
 として、DoGrep関数で検索対象フォルダを"受信+送信済み+ユーザー"として検索してください。


ヒント
 検索パック文字列の具体的な例については、特定の検索を実行した後で、tkinfo.dllのGetFindPack関数を使って検索パック文字列を取得するテストマクロなどを作って各自で調べていただくのが手っ取り早いです。


#n = dllfunc("SetFindPack", "(\"abc\", target=all), inmail=0" );
注意事項
 検索対象文字列の中に「"」を含めたい場合には、「\"」と記述してください。さらには、マクロで「\"」を指定するためには、「\\\"」と書く必要があります。間違いないようご注意ください。
 subfolder=およびinmail=の指定を省略した場合、これらの設定は前回の検索時の設定をそのまま引き継ぎます。


YenEncode関数
 YenEncode関数は、秀丸マクロのinput関数などで入力された普通の文字列を、SetFindPack用の検索対象文字列に変換する関数です。
 具体的には、ダブルクォーテーション記号および「\」記号の前に、「\」を挿入する処理をします。
$s = input( "検索対象文字列は?" );
$s = dllfuncstr( "YenEncode", $s );
#n = dllfunc( "SetFindPack", "(\"" + $s + "\", target=all)" );
 のように使います。