選択した複数メール本文の文字列を取得すNo.37132
hajimet さん 09/10/18 13:53
 
山紫水明さま ほか みなさま

以前 山紫水明さまにご教示いただいた末尾マクロですが、
なぜか動作しなくなってしまいました。
hmm v5.21

選択メールが1つの場合は期待通り動作しますが、
2つ以上メールが選択されているときには、
appendcopy;
が動作しなくなるようです。
ご助言いただけると幸いです。

#山紫水明さまの元発言は
 Date:     Mon, 07 Jul 2008 20:52:58 +0900
 ころのものですがすでに削除されてなくなっております。

また、このマクロは大変便利に使わせていただいておりましたが、
クリップボード履歴がマクロの動作で埋め尽くされてしまうという
点が難点でした。
何か工夫の余地がございましたら、この点も、
ご教示いただけると幸いです。

>//---------------------------------------------------------//
>loaddll "TKInfo.dll";
>#i = 0;
>#n = dllfunc("DisableDraw",0);
>setclipboard "";
>#n = dllfunc("LockSelection");
>while( 1 ) {
>    #n = dllfunc("EnumSelection", 1);
>    if( #n == 0 ) break;
>    #i = #i + 1;
>    #n = dllfunc( "SelectPane", 2);
>    gofiletop;
>    beginsel;
>    gofileend;
>    appendcopy;
>    addclipboard "━━━━━━━━━━━━━━━━━━━━\n";//区切り線
>    #n = dllfunc( "SetMainWndTop" );
>    #n = dllfunc( "SelectPane", 1);
>}
>#n = dllfunc("UnlockSelection", 0);
>#n = dllfunc("EnableDraw");
>newfile;
>#n = dllfunc("SwitchHeaderView", 0);
>selectall;
>delete;
>paste;
>replaceallfast "^>.*\\n", "", regular;
>endmacro;
>//---------------------------------------------------------//

[ ]
RE:37132 選択した複数メール本文の文字列No.37133
秀まるお2 さん 09/10/19 08:51
 
 マクロの先頭付近に、

if( browsemode ) browsemodeswitch;

 という1行を入れればうまく動くようになると思います。

 「表示・文字カーソルの表示」がOFFになっているとマクロがうまく動かない
ようです。

[ ]
RE:37133 選択した複数メール本文の文字列No.37134
hajimet さん 09/10/19 16:01
 
> 「表示・文字カーソルの表示」がOFFになっているとマクロがうまく動かない
>ようです。
迅速なコメント大変あり難く存じます。

ところで、この設定は以前のバージョンからありましたでしょうか。
もし最近(ここ数年内)に導入されたオプションでしたら、
デフォルトをONにされることをご提案させていただきたく思います。
#もちろん、何か他に不都合がなければ、ですが。
私のように、最近のPC操作に慣れていない人は、
キーボードでいろいろとしたがると思うので。如何でしょう。
#全く以て私の勘違いでしたら余計なコメントですので、
 御寛恕頂ければ幸いです。

何れにしても、今回、設定を変えましたところ、
普段の使用でも利便性が向上しまして、
受け取ったメールの文字列の一部をキー操作でコピーする
操作が格段に容易になりました。
大変嬉しい副作用でした。
質問して良かったです。

[ ]
RE:37134 選択した複数メール本文の文字列No.37135
秀まるお2 さん 09/10/19 16:37
 
 文字カーソル表示はデフォルトOFFでした。

 ONにしても別にいいといえばいいんですが、Outlook Expressその他多数のソ
フトは、そもそも文字カーソル表示なんて機能すら無いことが多いので、デフォ
ルトONというのはちょっと気が引けます。

 他のソフトから乗り換えを検討されるユーザーさんは、とりあえず以前使って
おられたソフトと同じでないといやだという方が多いしということで。

[ ]
RE:37132 選択した複数メール本文の文字列No.37136
山紫水明 さん 09/10/19 21:09
 

 秀まるおさん,フォローいただきありがとうございます。

 hajimetさん,
>クリップボード履歴がマクロの動作で埋め尽くされてしまうという
>点が難点でした。

最後に次の1行を追加したらいかがでしょう。
setclipboard "";

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

[ ]
RE:37135 選択した複数メール本文の文字列No.37140
hajimet さん 09/10/20 02:33
 
> ONにしても別にいいといえばいいんですが、Outlook Expressその他多数のソ
>フトは、そもそも文字カーソル表示なんて機能すら無いことが多いので、デフォ
>ルトONというのはちょっと気が引けます。
承知いたしました。

[ ]
RE:37136 選択した複数メール本文の文字列No.37141
hajimet さん 09/10/20 02:42
 
コメントありがとうございます。さて、
>最後に次の1行を追加したらいかがでしょう。
>setclipboard "";
ですが、
クリップボードにマクロの内容が残ることではなく、
常駐秀丸エディタで取得されている「クリップボードの履歴」が、
選択したメール数の文だけマクロの動作で使った「履歴」になること、
が困っている点です。
そのため、せっかく履歴に残っていたデータが
履歴バッファのサイズを越えて消えてしまいます。

クリップボードを使わないか、あるいは、
常駐秀丸の「クリップボードの履歴をとる」機能を
一時停止してから文字列取得作業をするように出来たら
良いのかも知れないと(素人なりに)思ったのですが、
何か対策はありますでしょうか?

[ ]
RE:37141 選択した複数メール本文の文字列No.37143
秀まるお2 さん 09/10/20 10:08
 
 秀丸エディタのV8.00から、マクロにdisablehistoryという命令が追加されて
まして、それを使えばクリップボード履歴を書き換えないでマクロ動作させるこ
とは可能になります。

 ただし、現状の秀丸メールではまだ秀丸エディタV7.xx相当のことしか出来な
いので、disablehistory命令も使えないです。将来は使えるようになる予定です
けども。

[ ]
RE:37141 選択した複数メール本文の文字列No.37149
山紫水明 さん 09/10/20 20:23
 
 hajimetさん,

>常駐秀丸の「クリップボードの履歴をとる」機能を
>一時停止してから文字列取得作業をするように出来たら
>良いのかも知れないと(素人なりに)思ったのですが、
>何か対策はありますでしょうか?

 現状でやるとしたら,次のように修正すればできるかも知れません。

//---------------------------------------------------------//
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#cliphistflag = getregnum( "ClipHistFlag" );
if( #cliphistflag ) {  //クリップボードの履歴をとる
    writeregnum "ClipHistFlag", 0;
    envchanged;
}
loaddll "TKInfo.dll";
#browsemode = browsemode;
if( #browsemode ) browsemodeswitch;
#i = 0;
#n = dllfunc("DisableDraw",0);
setclipboard "";
#n = dllfunc("LockSelection");
while( 1 ) {
    #n = dllfunc("EnumSelection", 1);
    if( #n == 0 ) break;
    #n = dllfunc( "SelectPane", 2);
    gofiletop;
    beginsel;
    gofileend;
    appendcopy;
    //区切り線
    addclipboard "━━━━━━━━━━━━━━━━━━━━\n";
    #n = dllfunc( "SetMainWndTop" );
    #n = dllfunc( "SelectPane", 1);
}
#n = dllfunc("UnlockSelection", 0);
#n = dllfunc("EnableDraw");
newfile;
#n = dllfunc("SwitchHeaderView", 0);
selectall;
delete;
replaceallfast "^>.*\\n", "", regular;
if( #cliphistflag ) {
    writeregnum "ClipHistFlag", 1;
    envchanged;
}
closereg;
poppaste;
endmacro;
//---------------------------------------------------------//

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

[ ]
RE:37149 選択した複数メール本文の文字列No.37196
hajimet さん 09/10/25 10:01
 
山紫水明さま
> 現状でやるとしたら,次のように修正すればできるかも知れません。
出来ました!ありがとうございます。

>openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
>#cliphistflag = getregnum( "ClipHistFlag" );
>if( #cliphistflag ) {  //クリップボードの履歴をとる
>    writeregnum "ClipHistFlag", 0;
>    envchanged;
>}
・・・・
>if( #cliphistflag ) {
>    writeregnum "ClipHistFlag", 1;
>    envchanged;
>}
>closereg;
>poppaste;
>replaceallfast "^>.*\\n", "", regular;

poppaste;を使うことと、レジストリを戻してから
ペーストするのがコツなんですね。
#素人感覚からすると逆なんですが。不思議です。
これでほぼ完全にクリップボード履歴に影響あたえません。

なお、
>replaceallfast "^>.*\\n", "", regular;
の行はペーストの後に入れる必要があると思いました。
一瞬、上記と同じように、素人感覚と逆かと思ったのですが・・・

レジストリをいじるのでちょっと怖いところもありますが。
実際、最初記述を誤り常駐秀丸の「クリップボード履歴(H)...」の
メニュー自体が消えました。
「履歴をとる」をチェックアウトしていても、
このメニュー自体が消えないのが通常の動作ですが、
レジストリをいじるとメニュー自体が消えたり出たりすることに・・・

ところで、クリップボード履歴の「自動保存(S)」の
チェックの情報が消えてしまうようです。
もし簡単に分かるようでしたら、情報頂けましたら幸いです。

[ ]
RE:37196 選択した複数メール本文の文字列No.37197
山紫水明 さん 09/10/25 20:55
 
 hajimetさん,

>>replaceallfast "^>.*\\n", "", regular;
>の行はペーストの後に入れる必要があると思いました。

 これはご指摘の通りですね。

>実際、最初記述を誤り常駐秀丸の「クリップボード履歴(H)...」の
>メニュー自体が消えました。
>「履歴をとる」をチェックアウトしていても、
>このメニュー自体が消えないのが通常の動作ですが、
>レジストリをいじるとメニュー自体が消えたり出たりすることに・・・
>ところで、クリップボード履歴の「自動保存(S)」の
>チェックの情報が消えてしまうようです。

 正しくは,
    writeregnum "ClipHistFlag", 0;
      ↓
    writeregnum "ClipHistFlag", #cliphistflag & 0xfff0;

    writeregnum "ClipHistFlag", 1;
      ↓
    writeregnum "ClipHistFlag", #cliphistflag;
とすべきところでした。

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

[ ]
RE:37197 選択した複数メール本文の文字列No.37245
hajimet さん 09/11/01 09:05
 
山紫水明さま ありがとうございました。
レジストリキーの値を画面上でみると、
自動保存がチェックされているときには、16進で
101
となるようです。
> 正しくは,
>    writeregnum "ClipHistFlag", 0;
>      ↓
>    writeregnum "ClipHistFlag", #cliphistflag & 0xfff0;
>
>    writeregnum "ClipHistFlag", 1;
>      ↓
>    writeregnum "ClipHistFlag", #cliphistflag;
>とすべきところでした。
下4ビットだけ0にすると、メニューが消えないのでしょうかね。
#想像で書いています。未確認です。申し訳ありません。。

[ ]