部分編集での関数の区切りNo.30196
shimmy さん 11/09/05 18:55
 
部分編集で関数単位の表示にできるのはすごく便利です。ただひとつ残念な点が....
現在、関数をどこで区切るかは次のようになっています。

// 関数funcAのコメント
--------------------------------------ここで区切られる
int funcA()
{
.......
}
// 関数funcBのコメント
--------------------------------------ここで区切られる
int funcB()
{
.......
}

これを次のようにしていただけないでしょうか。

--------------------------------------ここで区切る
// 関数funcAのコメント
int funcA()
{
.......
}
--------------------------------------ここで区切る
// 関数funcBのコメント
int funcB()
{
.......
}

[ ]
RE:30196 部分編集での関数の区切りNo.30200
秀丸担当 さん 11/09/06 10:11
 

>部分編集で関数単位の表示にできるのはすごく便利です。ただひとつ残念な点が....
>現在、関数をどこで区切るかは次のようになっています。

確かに関数の先頭だけを判断してそれを区切りとするのでこうなってしまう仕様
になっています。

マクロで部分編集することで回避することもできます。
例えば、関数の先頭の次にある{}の対応で部分編集する場合は以下のようなマク
ロですることもできます。

disabledraw;
#searchoptionOrg = searchoption;
$searchbufferOrg = searchbuffer;
#x=x;
#y=y;
nextfunc;
prevfunc;
beginsel;
searchdown "{";
if( result != false ) {
    #line=lineno;
    gokakko;
    golineend2;
} else {
    nextfunc;
}
rangeeditin;
moveto #x,#y;
setsearch $searchbufferOrg,#searchoptionOrg;

[ ]
RE:30200 部分編集での関数の区切りNo.30204
shimmy さん 11/09/06 18:48
 
残念ながらマクロは正しく動きませんでした。
カーソルの位置によって関数の上に前の関数の一部が残ってしまったり、ごく一部分
の表示だけになってしまったりです。

[ ]
RE:30204 部分編集での関数の区切りNo.30205
Iranoan さん 11/09/06 21:02
 
 shimmy さん今日は、一ユーザの Iranoan です。
 標準で実装するかどうかは別として、
> 残念ながらマクロは正しく動きませんでした。
に付いて、次のマクロでどうでしょう?
//------------------------------------------------------------
disabledraw;
#x=x;
#y=y;
nextfunc;
movetolineno 1, lineno - 1;
while( colorcode&0x1F == 3 && y != 0 )movetolineno 1, lineno - 1;
movetolineno 1, lineno + 1;
beginsel;
prevfunc;
movetolineno 1, lineno - 1;
while( colorcode&0x1F == 3 && y != 0 )movetolineno 1, lineno - 1;
if( y != 0 )movetolineno 1, lineno + 1;
rangeeditin;
moveto #x,#y;

[ ]
RE:30205 部分編集での関数の区切りNo.30208
秀丸担当 さん 11/09/07 10:35
 

Iranoanさん補足ありがとうございます。

このマクロ関係で、見出しバーの残骸が残るという問題があることがわかり、
V8.11β6で修正させていただきます。
参考スレッド:
http://www.maruo.co.jp/turukame/3/x06707_.html

[ ]
RE:30205 部分編集での関数の区切りNo.30210
shimmy さん 11/09/07 20:52
 
Iranoanさんありがとうございます。
でも残念ながらこれも正しく動作しませんでした。
ソース中に

#if defined(xxxxx)
........
#endif

が何ヶ所もあり、どうもそこでつまづいているみたいです。

[ ]
RE:30210 部分編集での関数の区切りNo.30212
Iranoan さん 11/09/07 21:10
 
 shimmy さん今日は、一ユーザの Iranoan です。
> でも残念ながらこれも正しく動作しませんでした。
> ソース中に
>
> #if defined(xxxxx)
> ........
> #endif
 具体的にどうなって欲しいか不明なので、どうしようもありません。

[ ]
RE:30212 部分編集での関数の区切りNo.30219
秀丸担当 さん 11/09/08 09:28
 

> #if defined(xxxxx)
> ........
> #endif

ifdef等が入ると括弧の対応などが崩れる場合があるのでなんとも言えないです。
その場合通常のコマンドでの部分編集でも崩れていることがあると思います。
マクロとの違いがあるとしたら、マクロのnextfunc/prevfuncが行の強調区切り
なので、
nextoutlineitem/prevoutlineitem に置き換えてアウトライン解析による見出し
区切りにするとといいかもしれないです。
その他コメントの具合など、マクロによって好みに合わせて調整できると思うの
で、いろいろ試してみてほしいです。

標準機能としてもそういう補助的なことができたらいいということで今後の開発
の参考にさせていただきます。

[ ]
RE:30219 部分編集での関数の区切りNo.30224
shimmy さん 11/09/08 18:53
 
秀丸担当さんのご指摘どおりIranoanさんのマクロを
    nextfunc → nextoutlineitem
    prevfunc → prevoutlineitem
にしたらうまくいきました。(アウトライン解析を関数一覧モードにしておく必要が
ありますが)

//----------------------------------------
disabledraw;
#x=x;
#y=y;
nextoutlineitem;
movetolineno 1, lineno - 1;
while( colorcode&0x1F == 3 && y != 0 )movetolineno 1, lineno - 1;
movetolineno 1, lineno + 1;
beginsel;
prevoutlineitem;
movetolineno 1, lineno - 1;
while( colorcode&0x1F == 3 && y != 0 )movetolineno 1, lineno - 1;
if( y != 0 )movetolineno 1, lineno + 1;
rangeeditin;
moveto #x,#y;
//----------------------------------------

ただしこれだと「次の見出し」「前の見出し」で前後の関数に移動できないみたいで
すから、やはり標準対応を期待したいと思います。

なお#ifdef前後の括弧の対応は取れています。
(関数先頭の '{' で「対応する括弧に移動」を行なうと関数最後の '}' に移動しま
す/逆方向の移動も正しくできます)
また通常コマンドでの「部分編集」でも正しくひとつの関数全体を表示できます。
申し遅れましたが秀丸はVer8.10です。

[ ]
RE:30224 部分編集での関数の区切りNo.30226
Iranoan さん 11/09/08 21:27
 
 shimmy さん今日は、一ユーザの Iranoan です。
> やはり標準対応を期待したいと思います。
 こちらは秀丸担当さんお任せします。

> ただしこれだと「次の見出し」「前の見出し」で前後の関数に移動できない
に関しては、取り敢えず、この機能も標準で実装されるまでは、先のマクロを
参考に、マクロで置き換えてしまう手もあります。

[ ]