関数の表示No.01081
かかし さん 00/02/28 11:18
 
かかしです、こんにちは。

現在C言語で作業をしているのですが、
ある文字を検索した後、そこにジャンプして、そこが
その行(カーソル行)がどこの関数内にあるかをしりたいのです。

int func()
{
-----------
-----------
     |abc = efg;
/*  ↑カーソル  */

}

のとき、message で "int func()"と表示させたいのですが
いいアイデアございませんでしょうか?

---かかし

[ ]
RE:01081 関数の表示No.01082
t_sasaki さん 00/02/28 11:41
 
ささきです。
かかしさん、こんにちは。

> 現在C言語で作業をしているのですが、
> ある文字を検索した後、そこにジャンプして、そこが
> その行(カーソル行)がどこの関数内にあるかをしりたいのです。

マクロじゃないですけど、強調表示一覧の関数一覧で、
反転表示されているのが、現在いる関数であるっていうのはダメでしょうか?
強調表示をキー割り当てすれば、簡単だと思うのですが。

[ ]
RE:01082 関数の表示No.01083
かかし さん 00/02/28 12:10
 
かかしです、こんにちは。

>ささきです。

おはようございます。

>マクロじゃないですけど、強調表示一覧の関数一覧で、
>反転表示されているのが、現在いる関数であるっていうのはダメでしょうか?
>強調表示をキー割り当てすれば、簡単だと思うのですが。

そうですね。
それも、考えたのですが[ESC]で、ウィンドウを閉じるのがいやだなあ
なんて思っちゃいまして、Tipを求めたんですが・・・。
強調表示の一覧から任意の強調表示を得るような関数知りませんか?

#現在、ささきさんのおっしゃるやり方で登録はしているのですが・・。

---かかし

[ ]
RE:01081 関数の表示No.01085
ENCODINGSHIFTJIS さん 00/02/28 13:16
 
>アイデアございませんでしょうか?

ダイレクトタグジャンプ用のtagsファイルを作っておき
その行番号がカーソル位置より大きくなった物の
直前とする。
または下から見て行って小さくなった物

ソースの行が大変動しなければ使えると思います。

ソースの変動が大きければやはり関数定義の
頭を正規表現マッチするのを毎回しないと。

__END__

[ ]
RE:01083 関数の表示No.01086
t_sasaki さん 00/02/28 13:35
 
ささきです。
かかしさん、こんにちは。

> そうですね。
> それも、考えたのですが[ESC]で、ウィンドウを閉じるのがいやだなあ
> なんて思っちゃいまして、Tipを求めたんですが・・・。

そうでしたか。
そこまでご存じの上で、おっしゃっている意見ならば、
私の意見は関係ありませんでした。
無視してください。

[ ]
RE:01081 関数の表示No.01088
安久津 さん 00/02/28 17:57
 

>のとき、message で "int func()"と表示させたいのですが
>いいアイデアございませんでしょうか?
みなさん、難しく考えすぎ。(^^;
// prevfunc 上の強調行に移動
// nextfunc 下の強調行に移動
  disabledraw;
  ##cx = x; ##cy = y;
  prevfunc;
  ##cc = colorcode & 0x1f;
  if( ##cc != 6 && ##cc != 9 ){
    moveto ##cx, ##cy; beep; endmacro;
  }
  while( code < 0x21 ) right;
// while( code==0x09 || code==0x20 ) right;
// if( code==0x0d ){
//   moveto ##cx, ##cy; beep; endmacro;
// }
  beginsel; golineend2;
  $$func = gettext( seltopx, seltopy, selendx, selendy );
  moveto ##cx, ##cy; enabledraw;
  message $$func;
endmacro;

ではでは。

[ ]
RE:01088 関数の表示No.01089
かかし さん 00/02/28 18:19
 
かかしです、こんにちは。

阿久津さんこんにちは。

#HQsort使わせていただいてますm(_ _)m。

>// prevfunc 上の強調行に移動
>// nextfunc 下の強調行に移動

おお、そんなコマンドがあったんですね。
で、結果から言えば動いたんですが・・・。

>  disabledraw;
>  ##cx = x; ##cy = y;
>  prevfunc;
>  ##cc = colorcode & 0x1f;
-----ここから
>  if( ##cc != 6 && ##cc != 9 ){
>    moveto ##cx, ##cy; beep; endmacro;
>  }
----ここまで

コメントアウトさせていただいたんです。
関数名が強調行という形で設定されていなかったので
ここで跳ねられてしまったからです。

素朴な疑問なのですが、
秀丸はどうやって関数であることを認識しているのでしょうか?

強調表示をすべて消してもとりあえずマクロは正常に動作するので
不思議に思ったんですが・・・。

---かかし

[ ]
RE:01086 関数の表示No.01090
かかし さん 00/02/28 18:20
 
かかしです、こんにちは。

ささきさんありがとうございます。

>> それも、考えたのですが[ESC]で、ウィンドウを閉じるのがいやだなあ
>> なんて思っちゃいまして、Tipを求めたんですが・・・。
>
>そうでしたか。
>そこまでご存じの上で、おっしゃっている意見ならば、
>私の意見は関係ありませんでした。
>無視してください。

こちらの方こそ、最初の質問が言葉足らずでした。
ぜひ、またよろしくお願いします。

---かかし

[ ]
RE:01085 関数の表示No.01091
かかし さん 00/02/28 18:22
 
かかしです、こんにちは。

ENCODINGSHIFTJISさん、こんにちは。

>ダイレクトタグジャンプ用のtagsファイルを作っておき
>その行番号がカーソル位置より大きくなった物の
>直前とする。
>または下から見て行って小さくなった物

この発言を聞いてからはじめて「ダイレクトジャンプ」
を使いました。
めっちゃ便利で感動しております。

#って本質とは関係ないところで参考にしてしまいました。

ありがとうございました。

---かかし

[ ]
RE:01089 関数の表示No.01092
ひろ さん 00/02/28 20:32
 
 かかしさん今日は、ひろです。
> 素朴な疑問なのですが、
> 秀丸はどうやって関数であることを認識しているのでしょうか?
 help より引用
> 「行の強調1」または「行の強調2」の指定が1つも無い場合には、C言語の
> 関数を上方向に検索します。

 なお「強調行の範囲選択」でも同じ規則が適用されます。

[ ]
RE:01089 関数の表示No.01093
安久津 さん 00/02/28 22:01
 
実行時のカーソル位置上方に「行の強調表示」が1つも無い場合、
 prevfunc は「C言語の関数」か「ファイル先頭」に移動するはずです。
コメントアウト部分は「ファイル先頭」を考慮したエラー処理だったんです。
しかし「当該関数が行の強調表示に割当てられていない」場合を
想定していませんでした。(^^;

ちょっと書き換え。
  ##cx = x; ##cy = y;
  prevfunc;
  if( lineno == 1 && hilightstate == 1 ){
    ##cc = colorcode & 0x1f;
    if( ##cc != 6 && ##cc != 9 ){
      moveto ##cx, ##cy; beep; endmacro;
    }
  }

>素朴な疑問なのですが、
>秀丸はどうやって関数であることを認識しているのでしょうか?
知りません。(^^;
元々、秀丸には「関数一覧」表示機能がありましたが、その「関数」とは
「C言語の関数」でした。他の言語の「プロシージャ」「サブルーチン」
「メソッド」は無関係でした。
当然、一般文書の「見出し/ヘッダー」にも関係ありません。

>強調表示をすべて消してもとりあえずマクロは正常に動作するので
>不思議に思ったんですが・・・。
 prevfunc/nextfunc が Ver2.xx 以前と同じ動作に先祖返り。
C言語だから「正常に動作する」のでした。

ではでは。

[ ]
RE:01093 関数の表示No.01094
かかし さん 00/02/28 22:48
 
かかしです、こんにちは。

ひろさん、阿久津さん、こんOOは。

>>素朴な疑問なのですが、
>>秀丸はどうやって関数であることを認識しているのでしょうか?
>知りません。(^^;

そこらへんは、きっと秀丸の企業秘密な部分なのでしょう。

#正規表現であらわそうとしてもなかなか難しいものが・・・。

##と思ってちょっと試してみたら

boo  foo()
{
test1 = test2
}

で「boo  foo」にヒットしたので
^[^ \t]*[ \t]
で識別してるのかも知れません。

>元々、秀丸には「関数一覧」表示機能がありましたが、その「関数」とは
>「C言語の関数」でした。他の言語の「プロシージャ」「サブルーチン」
>「メソッド」は無関係でした。
>当然、一般文書の「見出し/ヘッダー」にも関係ありません。

C言語が一般的で、エディタで編集しやすかったからでしょう(か?)。


---かかし

[ ]
RE:01094 関数の表示No.01095
きいろいまふらあ さん 00/02/29 11:54
 
まふです。

>C言語が一般的で、エディタで編集しやすかったからでしょう(か?)。

ひょっとして秀まるおさんがCを使っていたからとか…。(^^;

[ ]