マクロで一時的な設定を戻す方法No.01029
ケン さん 00/02/18 20:22
 
始めまして.

秀丸のマクロを作成してみたのですが,
秀丸のメニューにある
その他(O)->ファイルタイプ別の設定(C)の
.Cの設定(S)に後が(一時的な設定)と一度なってしまうと
元の(C言語ソースファイル)設定内容に
マクロで戻す方法はあるのでしょうか?


マクロで
loadhilight $A, 0;
を実行すると上記のような(一時的な設定)になります
その後,(一時的な設定)から元に戻すマクロができないもので...
もし方法を知っている方が居ましたら教えてください.


マクロ自体は,検索中の文字列の色を(lessのように)変えたかった
ので,ちょっとhagiさんの秀丸grep強調表示マクロを改良して
作ってみたのですが,元の状態に戻すマクロがうまく行かない....
#編集中のファイルもあるので,ファイルの再Openもちょっと...

もしくは,そういう機能がすでにありますよ!とか
マクロがありますよ!というのもありましたら,
教えていただけるとありがたいです.

[ ]
RE:01029 マクロで一時的な設定を戻す方法No.01030
ケン さん 00/02/18 20:38
 
自己レス

投稿後に検索があるのを知りました
マクロのほうの解答は,検索してみると
00824番にありました.
#でも更新になるのはちょっと辛い....
#それなら,(一時的な設定)のままでいいかも

ってことで,下の内容の
既存のマクロの存在や,設定方法がありましたら教えてください.

>マクロ自体は,検索中の文字列の色を(lessのように)変えたかった
>ので,ちょっとhagiさんの秀丸grep強調表示マクロを改良して
>作ってみたのですが,元の状態に戻すマクロがうまく行かない....
>
>もしくは,そういう機能がすでにありますよ!とか
>マクロがありますよ!というのもありましたら,
>教えていただけるとありがたいです.

[ ]
RE:01030 マクロで一時的な設定を戻す方No.01031
ひろ さん 00/02/19 16:12
 
 ケンさん今日は、ひろです。
> ってことで,下の内容の
> 既存のマクロの存在や,設定方法がありましたら教えてください.
>
> >マクロ自体は,検索中の文字列の色を(lessのように)変えたかった
> >ので,ちょっとhagiさんの秀丸grep強調表示マクロを改良して
> >作ってみたのですが,元の状態に戻すマクロがうまく行かない....
 例外処理が不十分ですが、既に設定ずみの *.hilight を読み込み直せは良
いということでしたら、次のマクロで如何でしょうか?
//---------------------- begin macro ------------------------------
main:
  if(basename==""){
    loadhilight "nul",0;
    endmacro;
  }else call get_hilight;
  if($$return=="")loadhilight "nul",0;
  else loadhilight $$return,0;// 1 にしても「一時的な設定」のまま??
  endmacro;

get_hilight:// 設定してある *.hilight の名前を得る
  call get_type;
  if($$return=="")
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
  else
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Config\\"+$$return
;
  if(result){
    $$type=getregstr("HilightTitle");
    closereg;
  }else $$type="";
  return $$type;

get_type:
//「C言語ソースファイル」等と file type が決まっていない場合は "" を返す
  call get_extension basename;
  if($$return==".")openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\.";
  else openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\."+$$return;
  if(result){
    $$type=getregstr("");
    closereg;
  }else $$type="";
  return $$type;

get_extension://拡張子を取得
//$$1:basename, basename2
  ##extension=strstr($$1,".");
  if(##extension==-1)return ".";
  else if(##extension==0)return "";
  while(1){
    ##extension=strlen($$1)-##extension-1;
    $$1=rightstr($$1,##extension);
    ##extension=strstr($$1,".");
    if(##extension==-1)break;
  }return $$1;
//---------------------------------- end macro -----------------------------
--

[ ]
RE:01031 マクロで一時的な設定を戻す方No.01032
安久津 さん 00/02/19 23:22
 

横からシャシャリ出てきました。
こんにちは ひろさん、安久津といいます。

> 例外処理が不十分ですが、既に設定ずみの *.hilight を読み込み直せは良
>いということでしたら、次のマクロで如何でしょうか?
うっ!、目から鱗、レジストリから直接取れば良いんだ。\(^^)/

ちょっと例外処理を加えました。
basename == "" でも「共通」の設定でハイライトファイルが存在したら、
それを読み込めます。#グレップの結果ファイルとか。

main:
  call getHilightTitle;
  if( $$return != "" ) loadhilight $$return, 0;
  else message "元に戻せません。";
endmacro;
/////
getHilightTitle:
  $$ht = "";
  call getKeyOfFileType;
  if( $$return != "" )
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Config\\"+$$return;
  else
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
  if( result ){
    $$ht = getregstr("HilightTitle");
    closereg;
  }
return $$ht;
getKeyOfFileType:
  $$key = "";
  call getExtension;
  if( $$return != "" ){
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\"+$$return;
    if( result ){
      $$key = getregstr("");
      closereg;
    }
  }
return $$key;
getExtension:
  $$ext = "";
  $$b = basename; // "" なら "" を返す。
  ##k = strstr($$b,".");
  while( ##k != -1 ){
    ##len = strlen($$b);
    $$ext = midstr($$b,##k,##len-##k);
    $$b = midstr($$b,##k + 1,##len - ##k - 1);
    ##k = strstr($$b,".");
  }
  // if( $$ext == "." ) $$ext = ""; // "." もあり。
return $$ext;
// getExtension

私は、hilighttitle キーワードに惑わされて、直接レジストリを
見る事を忘れていました。(^^;)
このマクロください m(__)m。マジおねがい (^∧^)。

ではでは。

[ ]
RE:01032 マクロで一時的な設定を戻す方No.01047
ひろ さん 00/02/21 17:10
 
 安久津さん今日は、ひろです。
> ちょっと例外処理を加えました。
> basename == "" でも「共通」の設定でハイライトファイルが存在したら、
> それを読み込めます。#グレップの結果ファイルとか。
 これなら簡単ですね。私の前回の macro を直すとしたら、main と
get_hilight を
//------------------------------------------------------------------------
main:
  call get_hilight;
  if($$return=="")loadhilight "nul",0;
  else loadhilight $$return,0;// 1 にしても「一時的な設定」のまま??
  endmacro;

get_hilight:// 設定してある *.hilight の名前を得る
  call get_type;
  if($$return==""||basename=="")
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
  else
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Config\\"+$$return
;
  if(result){
    $$type=getregstr("HilightTitle");
    closereg;
  }else $$type="";
  return $$type;
//--------------------------------------------------------------------------
---
と直せばよいでしょう。効率は良くないですけど(^^)。ちなみに grep の結
果は他の file type と同じ様に、設定が出来ます。

> このマクロください m(__)m。マジおねがい (^∧^)。
 基本的に会議室に書き込まれたものは、個人で利用する場合は問題ないと
思います。不特定の人に渡す場合は、document を作成するなどして、出自
をハッキリさせておく必要があると思います。

[ ]
RE:01047 マクロで一時的な設定を戻す方No.01049
安久津 さん 00/02/21 20:20
 
こんにちは ひろさん、安久津です。

>  else loadhilight $$return,0;// 1 にしても「一時的な設定」のまま??
「ファイルタイプ別の設定」で「保存しないで更新(A)」ボタンを押した後には、
「 O K 」ボタンが有効にならないことと同じなのでしょう。
 loadhilight $$hilightfile1,1; // 「 O K 」を押した。
 loadhilight $$hilightfile2,1; // 「 O K 」を押した。
 loadhilight $$hilightfile1,0; // 「保存しないで更新(A)」を押した。
 loadhilight $$hilightfile2,1; // もう「 O K 」は押せない。

>> このマクロください m(__)m。マジおねがい (^∧^)。
> 基本的に会議室に書き込まれたものは、個人で利用する場合は問題ないと
>思います。不特定の人に渡す場合は、document を作成するなどして、出自
>をハッキリさせておく必要があると思います。
たぶん、公開すると思いますので ひろさんへの謝辞をドキュメントに書きます。
ありがとうございました。m(__)m

ではでは。

[ ]
RE:01049 マクロで一時的な設定を戻す方No.01050
ケン さん 00/02/22 13:28
 
ひろさん、安久津さん ありがとうございます. ケンです。

> loadhilight $$hilightfile1,0; // 「保存しないで更新(A)」を押した。
> loadhilight $$hilightfile2,1; // もう「 O K 」は押せない。
やはり,もう消えてしまったOKは,2度と押せないのですね(T_T)

.hilight を戻す方法は,一応作ったのですが,
私のはお粗末なので,教えていただいたマクロを利用させて
いただきます.
#レジストリは難しそうだったので,同じ拡張子のファイルを
#もう1つ開いて,そこから.hiligthファイル名を取得すると言う
#すごーーーく,せいーーーい,やり方をしていたので...(^^;;

[ ]
RE:01049 マクロで一時的な設定を戻す方No.01054
ひろ さん 00/02/22 19:05
 
 安久津さん今日は、ひろです。
> >  else loadhilight $$return,0;// 1 にしても「一時的な設定」のまま??
> 「ファイルタイプ別の設定」で「保存しないで更新(A)」ボタンを押した後には、
> 「 O K 」ボタンが有効にならないことと同じなのでしょう。
 そうでしょうね。通常の動きと同じということで、当たり前といえば当たり前かも
しれません。

> > 基本的に会議室に書き込まれたものは、個人で利用する場合は問題ないと
> >思います。不特定の人に渡す場合は、document を作成するなどして、出自
> >をハッキリさせておく必要があると思います。
> たぶん、公開すると思いますので ひろさんへの謝辞をドキュメントに書きます。
 著作権一般に関することを書いただけなので、謝辞を入れられると照れま
す。殆どの人が見ないであろう source の片隅に書いて頂いた方がよいです(^^;。

 P.S ある soft ware で私は参考となる URL を教えただけなのに、私の知
らぬ間に document に謝辞が書かれていて思いっ切り照れたことがあります。

[ ]
RE:01054 マクロで一時的な設定を戻す方No.01055
安久津 さん 00/02/23 18:12
 
こんにちは ひろさん、安久津です。

> 著作権一般に関することを書いただけなので、謝辞を入れられると照れま
>す。殆どの人が見ないであろう source の片隅に書いて頂いた方がよいです(^^;。
【謙遜する事はありません】。ひろさんの方法は当初私が思っていたよりも
【ずっと応用範囲の広いもの】でした。実は、私はハイライトファイルを元に
戻す別の方法を使っていました。その方法は「検索」に限定するとスピードが
速いのですが、複数のファイルを扱おうとするとロジックに穴があります。
それはそれで、かまわないということで、一応自分のマクロ(colorsb.mac)は
完成させました。んで、他の人はどうやっているのか調べようと、
つい5日前に、hagiさん及び ZWEIさん のマクロ「秀丸grep強調表示マクロ」
をダウンロードしました。前から、メッチャ興味あったのだけれど、自分の
マクロが作成するまでお預けしていました。
でも特に目新しい事はありませんでした。
#すみません。>hagiさん、ZWEIさん。
逆に間違いを見つけたり、効率の悪いところを見つけたりで、両人のマクロを
1つにまとめてしまいました。
その時に、ひろさんの「元に戻す方法」を知りました。
私のマクロはサブルーチンを入れ替えるだけで済みました。速度低下は、
たった 10/1000秒だったので驚きました。ロジックに穴が無くなりました。
そして、もっとも効果の上がったのが、hagiさんとZWEIさんの作ったマクロに
対して使った場合です。信じられないような効果がありました。
作業用ハイライトファイルの更新は、同じファイルタイプ別の設定なら1回で
済むし、検索文字のハイライトファイル用変換も1回で済みます。
2度目以降のタグジャンプ/バックタグジャンプでは、検索バッファの内容が
変わっていてもヘッチャラです。マクロ名 colorjmp.mac

あっ、しゃべりすぎたような気がする。
ひろさんが「強調表示を利用したマクロ」にあまり興味が無かったら上記の
話は意味不明かもしれない。でも私はかなり興奮。(^^;
だから【謙遜する事はありません】。ナゲーハナシ。

 colorjmp.mac の方は、元が他人のマクロなので非公開です。
しかし、colorjmp.mac をお蔵入りするにはあまりにももったいないです。
 hagiさんと ZWEIさんにメールして(改変/再配布になるから)了解を取る
次第です。
#少なくとも、ひろさんへの配布の許可が欲しいです。見てもらいたいです。
#ひろさんの「元に戻す方法」は”元に戻す方法に使っていない”んです。
#だから【ずっと応用範囲の広いもの】でした。(^_^;)\(--;)ナゲーテ。

ではでは。

[ ]
RE:01029 マクロで一時的な設定を戻す方法No.01343
ENCODINGSHIFTJIS さん 00/04/24 12:09
 
>元の(C言語ソースファイル)設定内容に
>マクロで戻す方法はあるのでしょうか?
別解法:
「戻す」のなら一時的にファイル名が変わっても良いかも。

// 一時着色専用 Win95 ではレジストリの増大の話を聞いたので
//  colhilight.mac
//  col.hilight は一時着色専用の強調定義ファイル
// .col のファイル別設定は col.hilight に強調設定しておく??

// まず、col.hilight を発生させる ここでは1個なので
runsync2 "command.com /c ECHO 035,aaa>\"D:\\Program Files\\Hidemaru\\col.hil
ight\"";
// 拡張子を .col に変更
changename filename+".col";  // ファイル名変更
loadhilight "col.hilight",0; // Win95 なのでレジストリの肥満が心配
//
menu "ok?";
changename leftstr(filename,strlen(filename)-4);// ファイル名戻し

---------------------------
 aaa を含むテキスト上でマクロ実行

__end__
 







[ ]