キー入力による未読フォルダへの移動No.12969
ちびくま さん 24/11/03 10:29
 
長年、秀丸メールにはお世話になっています。ありがとうございます。
さて表題の件です。

受信したメールを振り分け機能を使ってフォルダ分けしています。
未読メールがあるフォルダは強調文字で表示されますが、そのフォルダをキー操作で
選択することはできるでしょうか。

「設定>キー割り当て」で「上のフォルダ」に「PageUp」、「下のフォルダ」に「Pa
geDown」を割り当てて上下のフォルダに移ることはできています。

これを、キー操作で現在位置から上方向、または下方向の未読のあるフォルダに移り
たいのです。

これが出来ると、未読処理の能率が格段に上がりますので、方法がありましたらお教
えください。よろしくお願いします。

[ ]
RE:12969 キー入力による未読フォルダへのNo.12979
秀まるお2 さん 24/11/04 17:06
 
未読フォルダへ移動する機能は無いんですが、マクロを使えば一応実現可能です。な
のでとりあえずマクロでやってほしいです。

「設定 - 秀丸エディタの動作環境...」の「環境」ページでマクロ用フォルダを適当
に指定して、そこにメモ帳を使うなどして2つのマクロを作成します。マクロの文字
コード(エンコード)は、メモ帳で作成するなら「UTF-16BE」を選択します。

秀丸エディタで作成するなら「名前を付けて保存」の「エンコードの種類」の所に
「Unicode(UTF-16)」を選択し「BOMを付ける」をONにします。

上検索と下検索の2つのマクロを作成して保存して、「マクロ」メニューの「マクロ
登録...」を実行し、「秀丸メール本体側」のマクロ1〜のどこかに適当にマクロ登録
します。あとは「マクロ」メニューからマクロを選択すれば実行できますが、さらに
「設定 - キー割り当て」からどこかのキーにそのマクロを割り当てておけば、キー
一発で実行できます。


-------------「上方向の未読フォルダ選択マクロ.mac」-------------------------
-------------
    loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $folder = dllfuncstr("CurrentFolder");
    //上方向に未読フォルダを探す。
    while(1) {
        $s = dllfuncstr("GetPrevFolder", $account, $folder);
        if( $s == "" || $s == $prev ) {
Label_NotFound: ;
            message "現在アカウント内の上方向に未読フォルダはありません。";
            endmacro;
        }
        $prevAccount = $account;
        $prev = $s;
        #x = strstr( $s, "\\");
        if( #x >= 0 ) {
            $account = leftstr( $s, #x);
            $folder = midstr( $s, #x + 1, 256 );
        } else {
            $account = $s;
            $folder = "";
        }
        if( $account != $prevAccount ) {
            goto Label_NotFound;
        }
        if( $folder != ""
         && $folder != "ゴミ箱"
         && dllfunc("GetFolderMailCount", $account, $folder, "unread") != 0 ) {
            //見つけた
            #n = dllfunc("SelectFolder", $account, $folder);
            endmacro;
        }
    }


-------------「下s方向の未読フォルダ選択マクロ.mac」------------------------
--------------
    loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $folder = dllfuncstr("CurrentFolder");
    //下方向に未読フォルダを探す。
    while(1) {
        $s = dllfuncstr("GetNextFolder", $account, $folder);
        //message $account + "/" + $folder + "\nnext= " + $s;
        if( $s == "" || $s == $prev ) {
Label_NotFound: ;
            message "現在アカウント内の下方向に未読フォルダはありません。";
            endmacro;
        }
        $prevAccount = $account;
        $prev = $s;
        #x = strstr( $s, "\\");
        if( #x >= 0 ) {
            $account = leftstr( $s, #x);
            $folder = midstr( $s, #x + 1, 256 );
        } else {
            $account = $s;
            $folder = "";
        }
        if( $account != $prevAccount ) {
            goto Label_NotFound;
        }
        if( $folder != ""
         && $folder != "ゴミ箱"
         && dllfunc("GetFolderMailCount", $account, $folder, "unread") != 0 ) {
            //見つけた
            #n = dllfunc("SelectFolder", $account, $folder);
            endmacro;
        }
    }

[ ]
RE:12979 キー入力による未読フォルダへのNo.12992
ちびくま さん 24/11/06 12:10
 
秀まるお2様 ご回答ありがとうございます。
表題に対応するコマンドがないこと、マクロで対応とのこと、了解しました。

マクロでの実例まで提示いただき大変助かります。

「上方向の未読フォルダ選択マクロ.mac」ですが、アカウントの上端まで来ると、開
始地点の一つ上に戻ってしまいループが終わりませんので、以下のように改変しまし
た。

この改変で、その下の「$folder != ""&& 」もいらない条件になりますがそのままに
しています。
-----------------------------------------------------
//「上方向の未読フォルダ選択マクロ.mac」
loaddll "tkinfo.dll";
$account = dllfuncstr("CurrentAccount");
$folder = dllfuncstr("CurrentFolder");
//上方向に未読フォルダを探す。
while(1) {
    $s = dllfuncstr("GetPrevFolder", $account, $folder);
    if( $s == "" || $s == $prev ) {
Label_NotFound: ;
        message "現在アカウント内の上方向に未読フォルダはありません。";
        endmacro;
    }
    $prev = $s;
    #x = strstr( $s, "\\");
    if( #x >= 0 ) {
        $account = leftstr( $s, #x);
        $folder = midstr( $s, #x + 1, 256 );
    } else {
        $account = $s;
        $folder = "";
    }
    if( $folder == "" ) {    //ここの停止条件を改変
        goto Label_NotFound;
    }
    if( $folder != ""
     && $folder != "ゴミ箱"
     && dllfunc("GetFolderMailCount", $account, $folder, "unread") != 0 ) {
        //見つけた
        #n = dllfunc("SelectFolder", $account, $folder);
        endmacro;
    }
}

[ ]
RE:12992 キー入力による未読フォルダへのNo.12993
秀まるお2 さん 24/11/06 14:02
 
マクロに問題があって、直していただいてありがとうございます。

実はこのマクロを作っていて、1つバグと思わしきことに気づきました。GetPrevFol
der関数でアカウントをまたがった時に、取得されるフォルダして、パラメータで指
定したのと同じフォルダが返ってきてしまうことがあるみたいで、その辺調べないと
いけない所でした。それでとりあえずアカウントをまたがらないケースだけにしたつ
もりが、その辺バグってしまったんだと思います。

とりあえず秀丸メール側のGetPrevFolder関数がおかしいのを調べて、おかしければ
また修正させていただきます。

[ ]
RE:12993 キー入力による未読フォルダへのNo.12994
ちびくま さん 24/11/06 14:26
 
>GetPrevFolder関数でアカウントをまたがった時に、取得されるフォルダして、パラ
>メータで指定したのと同じフォルダが返ってきてしまうことがあるみたいで

なるほど。それで直前のフォルダ名と比べていたのですね。


おかげさまでやりたいことが実現できました。

企業メールなどはタイトルだけで中身を見ないことがほとんどなので、自動仕分けで
フォルダ分けされた未読の山を、「強調文字フォルダを見つけては全て既読」を繰り
返してますが、もっと効率よく片付けたい、という動機でした。

Amazonで安売りしていた左手デバイス「TourBox」を利用して、それぞれのボタンや
ノブに

上方向の未読フォルダ選択マクロ.mac
下方向の未読フォルダ選択マクロ.mac
アカウントの折りたたみ.mac
アカウントの展開.mac
フォルダ枠をアクティブ.mac
メール内容枠をアクティブ.mac
[/] (直前に未読だったメール)
[Ctrl+Shift+Q](全て既読にする)

を割り当てて、左手だけで未読処理が出来るようにできました。


[ ]
RE:12994 キー入力による未読フォルダへのNo.12995
秀まるお2 さん 24/11/06 16:57
 
既にいろいろマクロを活用いただいてるということで・・・。

GetPrevFolder関数でアカウントをまたがる時、というか、アカウントそのものを選
択して呼び出した時に動作がおかしかったようで、そのバグ修正をしました。そうし
たら、ちびくま様に修正していただいたマクロで上隣りのアカウントに移動してしま
うケースが発生してしまいました。

それを防ぐ用の修正も入れたらこうなりました。一応先に連絡させいただきます。
(次のβ版以降用になりますが)

-----------------------------------------------------------------------
loaddll "tkinfo.dll";
$account = dllfuncstr("CurrentAccount");
$folder = dllfuncstr("CurrentFolder");
//上方向に未読フォルダを探す。
$accountOrigin = $account;
while(1) {
    $s = dllfuncstr("GetPrevFolder", $account, $folder);
    if( $s == "" || $s == $prev ) {
Label_NotFound: ;
        message "現在アカウント内の上方向に未読フォルダはありません。";
        endmacro;
    }
    $prev = $s;
    #x = strstr( $s, "\\");
    if( #x >= 0 ) {
        $account = leftstr( $s, #x);
        $folder = midstr( $s, #x + 1, 256 );
    } else {
        $account = $s;
        $folder = "";
    }
    if( $folder == "" ) {    //ここの停止条件を改変
        goto Label_NotFound;
    }
    if( $account != $accountOrigin ) {
        goto Label_NotFound;
    }
    if( $folder != ""
     && $folder != "ゴミ箱"
     && dllfunc("GetFolderMailCount", $account, $folder, "unread") != 0 ) {
        //見つけた
        #n = dllfunc("SelectFolder", $account, $folder);
        endmacro;
    }
}


[ ]
RE:12995 キー入力による未読フォルダへのNo.13007
ちびくま さん 24/11/11 15:37
 
コロナで伏せっていて反応が遅れました。

>既にいろいろマクロを活用いただいてるということで・・・。
秀丸エディタではマクロをちょくちょく使わさせていただいています。エディタ内蔵
だと小回りが効くので繰り返し操作になりそうだな、と思ったらぱぱっとマクロ組ん
だほうが早いのでとても助かります。
秀丸メールの方ではマクロは初めてだったのでヘルプを頼りに"tkinfo.dll"など勉強
させていただきました。

>GetPrevFolder関数でアカウントをまたがる時、

>それを防ぐ用の修正も入れたらこうなりました。一応先に連絡させいただきます。
>(次のβ版以降用になりますが)

今後のアップデートでGetPrevFolder関数の挙動が変わるのですね。
了解しました。

対応、どうもありがとうございました。

[ ]