フォルダを検索したいNo.08984
ぱと さん 05/02/23 13:35
 
複数アカウントで、適当にフォルダを掘っていることもあって、たまに、フォルダ
自体がどこにあるか判らなくなることがあります。仕方が無いので、そのフォルダ
に含まれるだろうメールを適当な条件で検索することで、フォルダを検索すること
の代用にしたりすることがあります。

というわけで、フォルダの検索機能を搭載していただけないだろうかと要望します。
できれば全アカウントにまたがってフォルダ名の一部をキーとして検索できて、検
索結果一覧から、該当フォルダにジャンプしたいです。

----
ぱと

[ ]
RE:08984 フォルダを検索したいNo.08985
CXYZ さん 05/02/23 14:52
 
 ぱとさん今日は、CXYZです。
 ご質問の件ですが、とりあえず「該当フォルダにジャンプ」については今直ぐ
にでも解決できるのではないかと思い、投稿いたします。
 検索して一覧作成でメールが見つかったら、そのメールのコンテキストメ
ニューから「このメールを鶴亀本体側で選択する」を実行すればいいと思います。
「前アカウントを対象にしたい」場合は、検索して一覧作成のダイアログ上でそ
う支持すればいいと思います。
 また、ご存じかと思いますが、鶴亀メールはフォルダのd&dでフォルダの位置
が移動できます。上記の方法で対象フォルダにジャンプした際、一緒に(フォル
ダ位置を)整理されてはいかがでしょう。総合的に、そちらの方が作業の効率化
が図れるように感じます。
 これらを全て考慮してのご意見でしたらお許しください。

[ ]
RE:08985 フォルダを検索したいNo.08986
ぱと さん 05/02/23 15:18
 
CXYZ さん

鶴亀ユーザーのぱとと申します。

> ご質問の件ですが、とりあえず「該当フォルダにジャンプ」については今直ぐ
>にでも解決できるのではないかと思い、投稿いたします。
> 検索して一覧作成でメールが見つかったら、そのメールのコンテキストメ
>ニューから「このメールを鶴亀本体側で選択する」を実行すればいいと思います。

えっと、ですから現在は、そのようにやってしのいでいるわけです。ですが、メー
ルの数はフォルダの数に比べてはるかに多いので、時間がかかってしまいます。フ
ォルダ検索が実装されればその時間が短縮できるはずです。

> また、ご存じかと思いますが、鶴亀メールはフォルダのd&dでフォルダの位置
>が移動できます。上記の方法で対象フォルダにジャンプした際、一緒に(フォル
>ダ位置を)整理されてはいかがでしょう。総合的に、そちらの方が作業の効率化
>が図れるように感じます。

例えば、DM系のメールについては、私はほぼそれぞれに対して一つのフォルダを掘
ってしまい、それがフラットにずっと並んでいるんです。そうなると後は並べ順だ
けで工夫するしかないことになります。また内容別に分類してサブフォルダを掘っ
たところで、結局は、どのフォルダにおいたかは、時間の経過につれて忘れされら
れしまうような気がします。

一月、あるいは、それ以上に一度ぐらいしか参照しないフォルダの位置って、皆さ
んもどこにあるか判らなくなりませんか?

----
ぱと

[ ]
RE:08984 フォルダを検索したいNo.08987
秀まるお さん 05/02/23 15:33
 
 田楽DLLを使ったマクロを作ればなんとか実現できますが、どうしましょ?

 僕が作ろうかなぁと…

[ ]
RE:08987 フォルダを検索したいNo.08988
ぱと さん 05/02/23 15:41
 
秀まるお さん

鶴亀ユーザーのぱとと申します。

> 田楽DLLを使ったマクロを作ればなんとか実現できますが、どうしましょ?
>
> 僕が作ろうかなぁと…

はい、もちろん、マクロでもかまわないです。マクロでできることを秀まるおさん
直々に作っていただくのは心苦しいのですが、ありがたいです。

----
ぱと

[ ]
RE:08986 フォルダを検索したいNo.08989
CXYZ さん 05/02/23 15:44
 
 ぱとさん今日は、CXYZです。

> えっと、ですから現在は、そのようにやってしのいでいるわけです。ですが、メー
> ルの数はフォルダの数に比べてはるかに多いので、時間がかかってしまいます。フ
> ォルダ検索が実装されればその時間が短縮できるはずです。
 やはりそういうことでしたか。

> 例えば、DM系のメールについては、私はほぼそれぞれに対して一つのフォルダを掘
> ってしまい、それがフラットにずっと並んでいるんです。そうなると後は並べ順だ
> けで工夫するしかないことになります。また内容別に分類してサブフォルダを掘っ
> たところで、結局は、どのフォルダにおいたかは、時間の経過につれて忘れされら
> れしまうような気がします。
>
> 一月、あるいは、それ以上に一度ぐらいしか参照しないフォルダの位置って、皆さ
> んもどこにあるか判らなくなりませんか?
 私の場合はメールマガジンに同じ状況が当てはまるんですが(苦笑)、一応カ
テゴリー分類(メールマガジン用のフォルダがあり、その配下に現在10個)・サ
ブフォルダだらけ(それはもうたくさん。最長フラット記録24フォルダ)ながら
もなんとか見失わないでいます。
 ただ、これ以上進んだお話はもう個人個人の使い方・考え方の域に達するよう
な気がしますので、実装の是非については秀まるおさんにお任せします。
 お役に立てずすみませんでした。
 それでは。

[ ]
RE:08984 フォルダを検索したいNo.08990
セイ さん 05/02/23 15:58
 
In <xxxxxxxxxxxxxx@maruo.co.jp>,
At 2005/02/23 13:35,
ぱと <8755xxxxxxxxxxxxxx@maruo.co.jp> wrote:
> というわけで、フォルダの検索機能を搭載していただけないだろうかと要望します。
> できれば全アカウントにまたがってフォルダ名の一部をキーとして検索できて、検
> 索結果一覧から、該当フォルダにジャンプしたいです。

その機能に1票です。

フォルダー名はアルファベットでつけているので、フォーカスを
フォルダー一覧ペインにあわせた状態で「a」をタイプすれば
「a...」のフォルダーに順にに移動しますが、アカウントをまた
がってくれません。

あると、(私は) 非常に重宝します。

-- セイ

[ ]
RE:08988 フォルダを検索したいNo.08991
山紫水明 さん 05/02/23 19:57
 
 ぱとさん,こんばんは。

>はい、もちろん、マクロでもかまわないです。

 とりあえず,次のようなものでしょうか。もっとスマートにできる方法がある
かも知れませんが。

//--------- SearchFolder.mac ----------------------------------------//
$search = input("フォルダ名は?(名前の一部でも可)");
if( $search == "" ) endmacro;
loaddll "tkinfo.dll";
$home = dllfuncstr("HomeDir");
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
#tmplnew = getregnum ("TmplNewMail");
if( #tmplnew ) writeregnum "TmplNewMail", 0;
#n = dllfunc("EnvChanged");
#n = dllfunc("SetQuietMode", 1 );
#n = dllfunc( "NewMail" );
#n = dllfunc("SwitchHeaderView", 0);
disabledraw;
grep ".", "subdir.bin", $home, subdir, regular;
replaceallfast "subdir\\.bin\\([0-9]+\\): ", "", regular;
#grephandle = hidemaruhandle(0);
closereg;
gofiletop;
while( 1 ) {
    searchdown $search;
    if( !result ) break;
    else {
    #by = y;
    golineend2;
    $folder[#i] = gettext( 0, #by, x, y );
    #i = #i + 1;
    }
}
menuarray $folder, #i;
$b = $folder[ result - 1 ];
$account = leftstr($b,strstr($b,"\\"));
$fol = midstr( $b, strstr($b,"\\") + 1, 999 );
#n = dllfunc( "SetMainWndTop" );
#n = dllfunc( "SelectFolder", $account, $fol );
closehidemaruforced #grephandle;
if( #tmplnew ) {
    writeregnum "TmplNewMail", 1;
    #n = dllfunc("EnvChanged");
}
#n = dllfunc("SetQuietMode", 0 );
endmacro;
//---------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:08991 フォルダを検索したいNo.08992
山紫水明 さん 05/02/23 20:58
 
 追伸です。少しレジストリ関係で具合が悪い部分がありましたので修正しま
した。

//--------- TKSearchFolder.mac ----------------------------------------//
////// オプション //////////////////////
#ime = 1;   //かな漢字変換 1:ON, 0:OFF
////////////////////////////////////////
#imestate = imestate;
if( #ime != imestate ) imeswitch;
$search = input("フォルダ名は?(名前の一部でも可)");
if( $search == "" ) endmacro;
loaddll "tkinfo.dll";
$home = dllfuncstr("HomeDir");
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
#tmplnew = getregnum ("TmplNewMail");
if( #tmplnew ) writeregnum "TmplNewMail", 0;
#n = dllfunc("EnvChanged");
#n = dllfunc("SetQuietMode", 1 );
#n = dllfunc( "NewMail" );
#n = dllfunc("SwitchHeaderView", 0);
disabledraw;
grep ".", "subdir.bin", $home, subdir, regular;
replaceallfast "subdir\\.bin\\([0-9]+\\): ", "", regular;
#grephandle = hidemaruhandle(0);
gofiletop;
while( 1 ) {
    searchdown $search;
    if( !result ) break;
    else {
        #by = y;
        golineend2;
        $folder[#i] = gettext( 0, #by, x, y );
        #i = #i + 1;
    }
}
menuarray $folder, #i;
$name = $folder[ result - 1 ];
$account = leftstr($name,strstr($name,"\\"));
$folder = midstr( $name, strstr($name,"\\") + 1, 999 );
#n = dllfunc( "SetMainWndTop" );
#n = dllfunc( "SelectFolder", $account, $folder );
closehidemaruforced #grephandle;
if( #tmplnew ) {
    writeregnum "TmplNewMail", 1;
    #n = dllfunc("EnvChanged");
}
closereg;
#n = dllfunc("SetQuietMode", 0 );
if( imestate != #imestate ) imeswitch;
endmacro;
//---------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:08991 フォルダを検索したいNo.08993
秀まるお さん 05/02/23 21:02
 
 これだと添付ファイル用のフォルダ全部からsubdir.binを探すので、だいぶ遅
いです。また、subdir.binファイルは将来的に内容が今のままって保障も無いで
す。

 田楽DLLのENUMDIR関数を使った方が高速になると思うんですが…。今作ろうか
なぁと。

[ ]
RE:08993 フォルダを検索したいNo.08994
山紫水明 さん 05/02/23 21:27
 
 秀まるおさん,こんばんは。

> これだと添付ファイル用のフォルダ全部からsubdir.binを探すので、だいぶ遅
>いです。

 なるほど,遅いときがあると思ったらそういうことでしたか。

     では, (^^)/~
                                        山紫水明
                                       

[ ]
RE:08994 フォルダを検索したいNo.08995
秀まるお さん 05/02/23 21:42
 
 山紫水明さんのマクロを参考にして田楽DLL版を作ってみたんですけど、あん
まり速くないです。

 まぁ仕方がないのかなぁと…。

 大文字/小文字の区別がされてしまうのですが、それは田楽DLLにTOLOWER等の
関数があるので直せます。

--------------------------------------------------------------
    $search = input("フォルダ名は?(名前の一部でも可)");
    if( $search == "" ) endmacro;
    loaddll "tkinfo.dll";
    $home = dllfuncstr("HomeDir");
    loaddll "DengakuDLL.dll";
    #homelen = strlen($home);
    #n = dllfunc("ENUMDIR", $home + "*.*");
    #accountCount = 0;
    while( 1 ) {
        $s = dllfuncstr("FINDNEXT");
        if( $s == "" ) {
            break;
        }
        if( $s != "." && $s != ".." && $s != "TempMail" ) {
            $account[#accountCount] = $s;
            #accountCount = #accountCount + 1;
        }
    }
    #i = 0;
    title "検索中...";
    while( #i < #accountCount ) {
        call EnumAndFindFolder $home + $account[#i] + "\\受信";
        call EnumAndFindFolder $home + $account[#i] + "\\User";
        call EnumAndFindFolder $home + $account[#i] + "\\送信済み";
        call EnumAndFindFolder $home + $account[#i] + "\\草稿";
        #i = #i + 1;
    }
    title 0;
    if( #candidateCount == 0 ) {
        message "見つかりませんでした。";
    }
    if( #candidateCount == 1 ) {
        #result = 1;
    } else {
        menuarray $candidate, #candidateCount;
        if( result <= 0 ) {
            endmacro;
        }
        #result = result;
    }
    $result = $candidate[#result-1];
    $account = leftstr($result,strstr($result,"\\"));
    $fol = midstr( $result, strstr($result,"\\") + 1, 999 );
    loaddll "tkinfo.dll";
    #n = dllfunc( "SelectFolder", $account, $fol );
    endmacro;

EnumAndFindFolder:
    #n = dllfunc("ENUMDIR", $$1 + "\\*.*");
    ##count = 0;
    while( 1 ) {
        $s = dllfuncstr("FINDNEXT");
        if( $s == "" ) {
            break;
        }
        if( $s != "." && $s != ".." ) {
            $$dir[##count] = $s;
            ##count = ##count + 1;
            if( strstr( $s, $search ) >= 0 ) {
                $candidate[#candidateCount] =
                      midstr( $$1, #homelen, 256 ) + "\\" + $s;
                #candidateCount = #candidateCount + 1;
            }
            $account[#accountCount] = $s;
            #accountCount = #accountCount + 1;
        }
    }
    ##i = 0;
    while( ##i < ##count ) {
        call EnumAndFindFolder $$1 + "\\" + $$dir[##i];
        ##i = ##i + 1;
    }
    return;

[ ]
RE:08992 フォルダを検索したいNo.08996
ぱと さん 05/02/23 22:17
 
山紫水明 さん

フォルダ検索マクロ作成していただいてありがとうございました。やりたいことは
まさにこういうことです。ただ、やはり、秀まるおさんがおっしゃるように、思い
の他、検索に時間がかかりますね。

マクロでやるとしても、鶴亀の側で、フォルダ構造情報を保持していない以上、こ
うやって、検索かけていくしかないわけで、やはり一定の時間はかかるわけですね。

動作イメージ的には、例えば、フォルダ検索操作をすると、インクリメンタルサー
チで、該当するフォルダが次々とヒットして絞り込まれていくみたいな感じになれ
ばいいなあと虫のいいことを考えてました。そういう感じの動作を期待するには、
やはり鶴亀側でフォルダ構造に関する一定の情報を持っていただいて、それを利用
するというようなことにならないと無理なわけでしょうね。

----
ぱと

[ ]
RE:08995 フォルダを検索したいNo.08997
ぱと さん 05/02/23 22:22
 
秀まるお さん

> 山紫水明さんのマクロを参考にして田楽DLL版を作ってみたんですけど、あん
>まり速くないです。

秀まるおさんにも作っていただいてありがとうございました。

んで、
    title "検索中...";
のところで、返ってこなくなっちゃうようなのですが・・・

田楽は、最新の安定版 2.66 を入れてあります。
ただ、私の環境の特殊なところは、鶴亀の実行ファイルが、ネットワークフォルダ
においてあって、田楽DLLもそのフォルダにおいてあるということがあるのですけれ
ど。

待ちきれなくてキャンセルしちゃってるんで、ただ単に遅くなってるのか、どこか
で返ってこなくなってるのかちょっと判らないのでですが。

----
ぱと

[ ]
RE:08997 フォルダを検索したいNo.09000
秀まるお さん 05/02/24 12:37
 
 どこかで無限ループしてるのかもしれませんが…。僕の所ではちょっと再現で
きないです。

 あと、どっちにしても山紫水明さんの作成されたマクロよりもむしろ遅いみた
いだし、使わない方がいいかもしれないです。あとその「インクリメンタルサー
チみたいに」ってのもマクロでは難しいです。

 外部DLLを使って鶴亀メールのフォルダ枠のツリービューコントロールから検
索する手もありますけど、やはり、しいてやるなら鶴亀メールで対応した方が手
っ取り早いです。

 といいつつ、今のところ今回のご要望の件は保留します。

[ ]
RE:08996 フォルダを検索したいNo.09009
山紫水明 さん 05/02/24 18:23
 
 ぱとさん,こんにちは。

>マクロでやるとしても、鶴亀の側で、フォルダ構造情報を保持していない以上、
>こうやって、検索かけていくしかないわけで、やはり一定の時間はかかるわけ
>ですね。

 考えてみれば毎回フォルダ情報を検索する必要もないわけで,いったん取得し
た情報を保存して使えば時間の節約になりそうです。新たにフォルダを作るとき
に情報の取得をやり直せばいいので,通常はかなり時間的に早くなります。

>動作イメージ的には、例えば、フォルダ検索操作をすると、インクリメンタル
>サーチで、該当するフォルダが次々とヒットして絞り込まれていくみたいな感
>じになればいいなあと虫のいいことを考えてました。

 こちらはマクロではまず無理でしょう。本体で実装していたく意外にないよう
な気がしますが,果たしてどれだけの需要があるんでしょうね。

//--------- TKSearchFolder.mac ----------------------------------------//
////// オプション //////////////////////
#ime = 1;   //かな漢字変換 1:ON, 0:OFF
////////////////////////////////////////
Begin:
menu "&S フォルダを検索して選択",
     "&N フォルダ情報を新しく作成";
#r = result;
if( #r == 0 ) endmacro;
$FolderInfoFile = currentmacrodirectory + "\\TKFolderInfo.txt";
loaddll "tkinfo.dll";
$home = dllfuncstr("HomeDir");
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
#tmplnew = getregnum ("TmplNewMail");
if( #tmplnew ) writeregnum "TmplNewMail", 0;
#n = dllfunc("EnvChanged");
#n = dllfunc( "NewMail" );
#grephandle = hidemaruhandle(0);
#n = dllfunc("SwitchHeaderView", 0);
disabledraw;
gofiletop;
beginsel;
gofileend;
delete;
if( #r == 1 ) call SearchFolder;
else if( #r == 2 ) call MakeNewGFolderInfo;
if( #r == 2 ) goto Begin;
endmacro;

SearchFolder:
if( !existfile( $FolderInfoFile ) ) {
    message "まずフォルダ情報を作成してください。";
    closereg;
    quit;
}
#imestate = imestate;
if( #ime != imestate ) imeswitch;
$search = input("フォルダ名は?(名前の一部でも可)");
if( imestate != #imestate ) imeswitch;
if( $search == "" ) quit;
insertfile $FolderInfoFile;
disabledraw;
gofiletop;
while( 1 ) {
    searchdown $search;
    if( !result ) break;
    else {
        #by = y;
        golineend2;
        $folder[#i] = gettext( 0, #by, x, y );
        #i = #i + 1;
    }
}
if( #i == 0 ) {
    message "ありません。";
    endmacro;
}
#n = dllfunc( "SetMainWndTop" );
closehidemaruforced #grephandle;
menuarray $folder, #i;
##r = result;
if( ##r <= 0 ) endmacro;
$name = $folder[ ##r - 1 ];
#accountlen = strstr($name,"\\");
$account = leftstr( $name, #accountlen );
$folder = midstr( $name, #accountlen + 1, 256 );
if( #accountlen < 0) {
    $account = $name;
    $folder = "";
}
#n = dllfunc( "SelectFolder", $account, $folder );
return;

MakeNewGFolderInfo:
grep ".", "subdir.bin", $home, subdir, regular;
replaceallfast "subdir\\.bin\\([0-9]+\\): ", "", regular;
replaceallfast "^[^\\\\]+\\n", "", regular;//アカウント名のみは削除
saveas $FolderInfoFile;
if( #tmplnew ) {
    writeregnum "TmplNewMail", 1;
    #n = dllfunc("EnvChanged");
}
closereg;
#n = dllfunc( "SetMainWndTop" );
closehidemaruforced #grephandle;
#n = dllfunc("SetAutoPushTimer", 2, "ok");
message "フォルダ情報ファイルを作成しました。";
return;
//---------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:09009 フォルダを検索したいNo.09011
ぱと さん 05/02/24 18:57
 
山紫水明 さん

鶴亀ユーザーのぱとと申します。

> 考えてみれば毎回フォルダ情報を検索する必要もないわけで,いったん取得し
>た情報を保存して使えば時間の節約になりそうです。新たにフォルダを作るとき
>に情報の取得をやり直せばいいので,通常はかなり時間的に早くなります。

あっ、なるほどその通りですね。で、早速新版のマクロを使わせていただきました、
動作速度的にも、操作的にも、大満足です。どうもありがとうございました。

>>動作イメージ的には、例えば、フォルダ検索操作をすると、インクリメンタル
>>サーチで、該当するフォルダが次々とヒットして絞り込まれていくみたいな感
>>じになればいいなあと虫のいいことを考えてました。
>
> こちらはマクロではまず無理でしょう。本体で実装していたく意外にないよう
>な気がしますが,果たしてどれだけの需要があるんでしょうね。

ですね。インクリメンタルサーチ云々は、自分でも贅沢だなと思います。もちろん、
自分で要望だしているわけですので、自分的には欲しいなと思う機能であったわけ
ですが、多くのユーザーが求めているものかどうか、鶴亀本体で実装することがふ
さわしいかどうかということは、秀まるおさんに判断していただけば良いことだと
思います。

山紫水明 さんのおかげで、自分でも見失っているフォルダへのアクセスが非常に快
適になりました。再度感謝の気持ちを伝えさせてください。どうもありがとうござ
いました。

----
ぱと

[ ]
RE:09000 フォルダを検索したいNo.09012
ぱと さん 05/02/24 18:59
 
秀まるお さん

鶴亀ユーザーのぱとと申します。

> 外部DLLを使って鶴亀メールのフォルダ枠のツリービューコントロールから検
>索する手もありますけど、やはり、しいてやるなら鶴亀メールで対応した方が手
>っ取り早いです。

あっ、そうか、ツリービューコントロールが持ってる情報そのものに対して検索か
けるという手もあるわけですね。

今回は、山紫水明 さんに作っていただいたマクロで、所期の目的は達成できていま
す。お手間を取らせて申し訳ございませんでした。どうもありがとうございました。

----
ぱと

[ ]