検索単語の強調表示No.14204
m_OnO_m さん 03/03/05 20:57
 
はじめまして。
最近、サクラエディタ(http://sakura-editor.sourceforge.net/
というフリーの日本語テキストエディタの成長に驚いています。
(2年くらい前までは秀丸の優位は確実だったんですが)

徹底的な動作の軽快さを理由に、まだ秀丸を選んでいるのですが、
いくつかの機能でサクラエディタが優位に立っているように感じます。
(デフォルトの強調表示でも充分綺麗に java が書けることなど)

そこで、私が時々サクラエディタを使ってしまう状況についてなのですが、
サクラエディタには「検索」した単語を全て強調表示してくれる機能が
あり、それは非常に便利です。
秀丸のマクロでも類似の機能を持つものはあるのですが、それは
秀丸の強調表示設定をいじるために他の強調表示が殺されてしまう等の
問題がある上、非常に低速です。

対応を検討していただけませんでしょうか。
よろしくお願いいたします。

[ ]
RE:14204 検索単語の強調表示No.14209
ひろ さん 03/03/06 12:11
 
 m_OnO_m さん今日は、ひろです。
> (デフォルトの強調表示でも充分綺麗に java が書けることなど)
 私は、逆にデフォルトに無い強調表示を定義できる柔軟性が、秀丸の優位性
だと思います。

> サクラエディタには「検索」した単語を全て強調表示してくれる機能が
> あり、それは非常に便利です。
 この機能自体は稀に要望も有ることですし反対はしませんが、
> 秀丸の強調表示設定をいじるために他の強調表示が殺されてしまう等の
> 問題がある上、非常に低速です。
ということはないと思います。末尾のマクロなら、1 秒かかりませんし、他の
強調表示はそのままです。
//検索文字列を「特に強調表示2」に加えるマクロ
//ただし強調表示定義 file の指定が無いのに、強調表示の設定自体はして
//ある場合、検索文字列の強調だけされ、それ以外の設定した有った強調表
//示は OFF になる。
//あいまい検索は、強調表示ににその扱いが無いので全ての option OFF の扱い
call GetLightChar;
$$hilightChar = $$return;
if(!hilightstate){
  config "y+";
  $$return = "";
}
else{
  if(hilighttitle == "" || hilighttitle == "hilight.tmp")
    call HilightTitle;
  else $$return = hilighttitle;
}
call MakeHilight $$return, $$hilightChar;
loadhilight "hilight.tmp",0;
endmacro;

MakeHilight:
  ##main = hidemaruhandle(0);
  if($$1 == "")openfile "/h ";
  else openfile "/h " + hidemarudir + "\\" + $$1,sjis;
  showwindow 0;
  gofileend;
  insert $$2 + "\n";
  saveas hidemarudir + "\\hilight.tmp",sjis;
  ##highlight = hidemaruhandle(0);
  setactivehidemaru ##main;
  closehidemaru ##highlight;
  return;

GetLightChar:
  ##option = 0;
  $$string = searchbuffer;
  if(searchoption&32){
    ##option = 8;
    call TOUPPER $$string;
    $$string = $$return;
  }
  else{
    if(searchoption&1)##option = ##option|32;
    if(searchoption&2 == 0)##option = ##option|8;
    if(searchoption&16)##option = ##option|16;
    if(searchoption&2 == 0 && searchoption&16 == 0){
      call TOUPPER $$string;
      $$string = $$return;
    }
  }
  ##option = ##option|67;
  return str(##option) + "," + $$string;

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

HilightTitle:
  if(filetype == "new" )
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
  else if(filetype == "exeresult" || filetype == "grep")
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\" + filetype;
  else{
    call GetType;
    if($$return == "")
      openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
    else openreg "CURRENTUSER",
      "Software\\Hidemaruo\\Hidemaru\\Config\\" + $$return;
  }
  $$HilightTitle = getregstr("HilightTitle");
  closereg;
  return $$HilightTitle;

TOUPPER://小文字を大文字に変換 (半角文字のみ)
  ##char=0x61;
  while(##char<=0x7A){
    call ChangeCharacter $$1,char(##char),char(##char-0x20);
    $$1=$$return;
    ##char=##char+1;
  }return $$1;

ChangeCharacter://buff 中の文字列を置換
//$$1:buff
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:14209 検索単語の強調表示No.14210
白雲斎 さん 03/03/06 13:43
 
 白雲斎です。

スレッドと直接関係ない事で失礼な話なんですが、ひろさんに質問です。
(何時もながら、ひろさんの提示マクロは参考になります。)

>HilightTitle:
>  if(filetype == "new" )
>    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
>  else if(filetype == "exeresult" || filetype == "grep")
>    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\" + filetype;
>  else{
>    call GetType;
>    if($$return == "")
>      openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
>    else openreg "CURRENTUSER",
>      "Software\\Hidemaruo\\Hidemaru\\Config\\" + $$return;
>  }
>  $$HilightTitle = getregstr("HilightTitle");
>  closereg;
>  return $$HilightTitle;


上記のサブ・ルーチン部分は、秀丸コマンドの "hilighttitle" ではダメなんで
しょうか。何か理由があれば教えてもらえないでしょうか。

[ ]
RE:14210 検索単語の強調表示No.14211
ひろ さん 03/03/06 18:06
 
 白雲斎さん今日は、ひろです。
> 上記のサブ・ルーチン部分は、秀丸コマンドの "hilighttitle" ではダメなんで
> しょうか。何か理由があれば教えてもらえないでしょうか。
 この場合、hilighttitle では駄目です。何故なら一度このマクロを実行す
ると、強調定義ファイルが hilight.tmp になります。その為仮に
hilighttitle を使っていると、2 度目のマクロ実行において、設定されてい
る強調定義ファイルではなく、検索文字列は hilight.tmp に検索文字列が追
加で書き込まれ、マクロの初回実行時の検索文字列もそのまま強調表示になり
ます。

 って、こんな説明を読むより、一度 hilighttitle に変更したマクロを、検
索文字列は変更した上で、複数回実行した方が解りやすい(^^;。

 P.S 今見直したら、マクロに不備な点を見つけてしまったが、m_OnO_m さん
の反応を見てからにしよう(~~;。

[ ]
RE:14204 検索単語の強調表示No.14212
秀丸担当 さん 03/03/06 19:04
 
>サクラエディタには「検索」した単語を全て強調表示してくれる機能が
>あり、それは非常に便利です。

他の方からも要望を頂いていますが、実現できていません。
現在はマクロで処理するしかないです。
申し訳ありません。

[ ]
RE:14211 検索単語の強調表示No.14213
白雲斎 さん 03/03/06 19:53
 
 白雲斎です。

>複数回実行した方が解りやすい(^^;。

複数回の実行を頭に入れず質問してしまいました。
丁寧な解説ありがとうございました。

[ ]
RE:14209 検索単語の強調表示No.14214
m_OnO_m さん 03/03/06 22:26
 
丁寧なご回答ありがとうございます!
こんなに早くご回答いただけるとは思ってもみませんでした。
私も何か便利なマクロを開発するなどして、秀丸に貢献したいと思いました。


> 末尾のマクロなら、1 秒かかりませんし、他の強調表示はそのままです。
使ってみて驚きました。快適そのものです。
感謝、感謝です。

>> (デフォルトの強調表示でも充分綺麗に java が書けることなど)
> 私は、逆にデフォルトに無い強調表示を定義できる柔軟性が、秀丸の優位性
>だと思います。

それはサクラエディタにもある機能です(カスタマイズ性やマクロの実装など、
秀丸は最高のお手本になっているのでしょう)。
一度ダウンロードされると良いと思います。
あれが「ロハ」なのですから、残念ですが秀丸にとっては強敵だと言わざるを
得ないと思います。
(繰り返しになりますが、デフォルトの設定がとても良いのです。
  細かいところでも便利な点は多いです。
  サクラエディタの回し者みたいになってしまっていますが・・・)

p.s.
ちなみに、秀丸のマクロについては詳しくないので「不備」が何なのか
分かりませんでした。よろしければ教えていただけませんでしょうか。

[ ]
RE:14212 検索単語の強調表示No.14215
m_OnO_m さん 03/03/06 22:30
 
こんにちは。m_OnO_m です。
お世話になっております(それこそ毎日)。

>他の方からも要望を頂いていますが、実現できていません。
>現在はマクロで処理するしかないです。
>申し訳ありません。

謝られるとかえって恐縮です。
秀丸は私にとって最高のエディタですから、今後ともよろしくお願いいたします。
以上です。

[ ]
RE:14214 検索単語の強調表示No.14220
ひろ さん 03/03/07 12:00
 
 m_OnO_m さん今日は、ひろです。
> ちなみに、秀丸のマクロについては詳しくないので「不備」が何なのか
> 分かりませんでした。よろしければ教えていただけませんでしょうか。
 お使い頂けるようなので、修正版をアップし直します。
 強調表示の設定にしてあるけれど、「強調表示一覧」が空欄の時の処理が甘
かった、というのが不備です。(ただし限界有り)
//検索文字列を「特に強調表示2」に加える
//あいまい検索は、強調表示にその扱いが無いので全ての option OFF の扱い
call GetLightChar;
$$hilightChar = $$return;
if(!hilightstate){
  config "y+";
  $$return = "";
}
else{
  if(hilighttitle == "" || hilighttitle == "hilight0.tmp")
    call HilightTitle;
  else $$return = hilighttitle;
}
if( $$return == "" ){
  if(hilighttitle != "hilight0.tmp")savehilight "hilight1.tmp";
  $$return = "hilight1.tmp";
}
call MakeHilight $$return, $$hilightChar;
loadhilight "hilight0.tmp",0;
endmacro;

MakeHilight://DLL 無し版
  ##main = hidemaruhandle(0);
  if($$1 == "")openfile "/h ";
  else openfile "/h " + hidemarudir + "\\" + $$1,sjis;
  showwindow 0;
  gofileend;
  insert $$2 + "\n";
  saveas hidemarudir + "\\hilight0.tmp",sjis;
  ##highlight = hidemaruhandle(0);
  setactivehidemaru ##main;
  closehidemaru ##highlight;
  return;

GetLightChar:
  ##option = 0;
  $$string = searchbuffer;
  if(searchoption&32){
    ##option = 8;
    call TOUPPER $$string;
    $$string = $$return;
  }
  else{
    if(searchoption&1)##option = ##option|32;
    if(searchoption&2 == 0)##option = ##option|8;
    if(searchoption&16)##option = ##option|16;
    if(searchoption&2 == 0 && searchoption&16 == 0){
      call TOUPPER $$string;
      $$string = $$return;
    }
  }
  ##option = ##option|67;
  return str(##option) + "," + $$string;

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

HilightTitle:
  if(filetype == "new" )
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
  else if(filetype == "exeresult" || filetype == "grep")
    openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\" + filetype;
  else{
    call GetType;
    if($$return == "")
      openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
    else openreg "CURRENTUSER",
      "Software\\Hidemaruo\\Hidemaru\\Config\\" + $$return;
  }
  $$HilightTitle = getregstr("HilightTitle");
  closereg;
  return $$HilightTitle;

TOUPPER://小文字を大文字に変換 (半角文字のみ)
  ##char=0x61;
  while(##char<=0x7A){
    call ChangeCharacter $$1,char(##char),char(##char-0x20);
    $$1=$$return;
    ##char=##char+1;
  }return $$1;

ChangeCharacter://buff 中の文字列を置換
//$$1:buff
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:14220 検索単語の強調表示No.14222
m_OnO_m さん 03/03/07 12:31
 
こんにちは。お世話になっております。
m_OnO_m です。

修正版のご提供ありがとうございました。大切に使います。
(って、別に消耗するわけでもありませんが)

/*
それにしても、3通の返信を1分以内に書いていますね・・・
ひろさんも、巷に時々見かける「超高速の人」なのでしょうか・・・・
*/

[ ]