>以下のようなマクロを作る.
>S_Copy();
>S_ExecCommand( 'cmd.exe /c "clip p|perl test.pl|clip"', 0);
>S_Paste();
これ、もっと根本的な点でダメっぽいです。(*^~^*)
S_Copy ですが、共通設定→編集→「コピーしたら選択解除」の設定状況によって
動作が異なってしまいます。チェックが ON になっていると S_Copy 実行時、
範囲選択が解除されてしまうため、その後、S_Paste で変更後の文字列が *追加*
されてしまう、と。置換されるんじゃなく。
まぁ、Copy → Cut にすれば、見た目解決しますけど、でもマクロの汎用性(?)
とかの点から考えると、個人の設定状況によってここまで動作が変わってしまう
というのはマズイかと。
改良案1
マクロでの S_Copy 自身は常に範囲選択解除しないようにする。
キーボードマクロ記録時に
・コピーしたら選択解除 チェック OFF 時
S_Copy(0); // コピー
のみ出力する。
・コピーしたら選択解除 チェック ON 時
S_Copy(0); // コピー
S_CancelMode(0); // 各種モードの取り消し
の2行を出力する。
これだと CEditView_Command.cpp 内 void CEditView::Command_COPY() の末尾
if( m_pShareData->m_Common.m_bCopyAndDisablSelection ){ /* コピーしたら選択解除 */
/* テキストが選択されているか */
if( IsTextSelected() ){
/* 現在の選択範囲を非選択状態に戻す */
DisableSelectArea( TRUE );
}
}
を
if( m_bExecutingKeyMacro == FALSE ){ /* キーボードマクロの実行中ではない */
if( m_pShareData->m_Common.m_bCopyAndDisablSelection ){ /* コピーしたら選択解除 */
/* テキストが選択されているか */
if( IsTextSelected() ){
/* 現在の選択範囲を非選択状態に戻す */
HandleCommand( F_CANCEL_MODE, TRUE, 0, 0, 0, 0 ); // 各種モードの取り消し & キーボードマクロ登録
}
}
}
とでもすれば良いのかな?(未確認)
改良案2
S_Copy の機能を拡張する。
・S_Copy(0) だと範囲選択解除しない
・S_Copy(1) だと範囲選択解除する
にするとか。