[ 新規に投稿する ]

colormarker関係についてNo.08689
たけとり さん 18/05/29 22:29 [ コメントを投稿する ]
   お世話になります。
 表記について、マクロで使う上で確認&お願いしたいことがございますので、投稿します。

Q1. レイヤーの上限、ユーザーデータの上限
マクロヘルプには
>レイヤーの数には上限があります。
>際限なく幾つもレイヤーを作るような使い方は避けてください。
とありますが、具体的にはいくつぐらいでまずい感じになるでしょうか。
 1マクロで1ファイル20レイヤー程度の作成なら支障は生じにくいでしょうか。
(1レイヤーで10個程度のマーカーを想定。)

 また、ユーザーデータは数値型をとりますが、
>数値型変数は4バイトの符号付きの値を記憶することができます。
の制限を受けるという感じでしょうか。
 ユーザーデータの部分に、順番とかではなくユニークIDみたいなのを割り振ったり、あるいはフラグみたいなのを設定しようとした場合に、桁が足りないので、
たくさんの桁数がとれたらなぁと思っています。

Q2. 1ファイル中に、同一のユーザーデータ&レイヤーを持つ複数マーカーをすべて選択する方法
 同じレイヤーの複数のマーカーすべてを選択する場合、
selectcolormarker レイヤー名
でいけますが、同じユーザーデータ&レイヤーのマーカーをすべて選択する場合、
nextcolormarker (0x01 | 0x04), #userData, $layerName;
if(!result)  endmacro;
beginsel;
nextcolormarker (0x02 | 0x04), #userData, $layerName;
reservemultisel;
escape;
という感じで、複数選択予約しておいてからの
selectreservedmultisel;
みたいな方法しかないでしょうか?

selectcolormarker レイヤー名, ユーザーデータ
という形式(ユーザーデータを第2引数にとる)もOKになればありがたいです。
 あるいは、0x01 | 0x02 が第1引数に含まれていたら次のマーカーの開始から終了までを範囲選択する 0x10 を、next/prevcolormarkerの第1引数に作っていただいて、
nextcolormarker (0x01 | 0x02 | 0x04 | 0x10), #userData, $layerName;
というようにしたら、次のマーカーが範囲選択されたりできるようになるとうれしいです。

 よろしくお願いします。
[ ]
RE:08689 colormarker関係についてNo.08690
秀丸担当 さん 18/05/30 07:59 [ コメントを投稿する ]
 
>Q1. レイヤーの上限、ユーザーデータの上限

レイヤーの上限はV8.50以降では内部的に32個までですが、検索の色付けや比較結果など内部的に使用しているものが11個くらいあるので、任意のレイヤーは21個までにしないと不都合になる可能性がありました。
V8.50未満では内部的に16個で、任意のレイヤーは11個まででした。
ヘルプに追記しておきます。
現状で22個以上も追加できてしまうので、今後のバージョンでは内部的な上限を増やしたうえで任意のレイヤーは32個はできるようにしようと思います。

ユーザーデータは4バイトの数値相当の情報になっています。
これを増やすのは難しそうです。
なんとかするとしたら、setstaticvariableで静的な文字列変数として番号と関連付けて覚えておく方法が考えられます。
setstaticvariable自体も上限があるので、際限なくというわけにはいきませんが、10個くらいのカラーマーカーならなんとかなると思います。


>Q2. 1ファイル中に、同一のユーザーデータ&レイヤーを持つ複数マーカーをすべて選
>択する方法

確かに現状ではnextcolormarkerなどの面倒な方法しかないと思います。
>selectcolormarker レイヤー名, ユーザーデータ
のような指定があったらいいと思います。
今後のバージョンで検討したいと思います。
[ ]
RE:08690 colormarker関係についてNo.08691
秀丸担当 さん 18/05/30 09:54 [ コメントを投稿する ]
 
V8.83β1で上限等の修正と、selectcolormarkerを修正してみています。
setstaticvariableで現在の秀丸エディタ(共有でないほう)の上限も増やしました。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html
[ ]
RE:08691 colormarker関係についてNo.08692
たけとり さん 18/05/30 23:04 [ コメントを投稿する ]
  >V8.83β1で上限等の修正と、selectcolormarkerを修正してみています。

 以下のようなマクロを"aaa~中略~aaa"といった行に対して試したところ、きちんと"failed:33"と表示されているのを確認しました。
 ありがとうございました。

#ud = val(input("userdata","0"));
#i = 1;
while(#i <= 40){
 colormarker -1, -1, 2, 2, #ud, str(#i), lineno, column, lineno, column+1;
 if(!result){
  message "failed:" + str(#i);
  break;
 }
 right 2;
 #i = #i + 1;
}

>setstaticvariableで現在の秀丸エディタ(共有でないほう)の上限も増やしました。

 まさにこれもお願いしようかと思っていたものでした。ありがとうございます。
 拙作マクロのみでしか静的変数を使わないのであれば、32KBもあれば十分です。

 ところで、以下のようなマクロで試したところ、$sの文字数が小さい場合、☆の結果は257個の変数名を表示していました。
(200文字の時は、#i=152でループを抜け、変数名を151個表示していました。)
 確認ですが、32KB未満であっても、変数自体も一定の個数以上は設定できない…ということでしょうか?
 単なる確認なので、もし個数に上限があったとして、それが256前後であったとしても全くかまわないです。

 ただ、個数の上限を超えると古いのから消えていく?ようなので、この辺、result(またはgetresultexでも結構です)あたりで、
個数の上限を超えてる(超えた、超えそう…でも結構です)旨がわかればありがたいです。
 よろしくお願いします。

$s = "0";
#i = 1;
while(#i <= 999){
 setstaticvariable str(#i), $s, 0;
 if(!result){
  message "failed:" + str(#i);
  break;
 }
 #i = #i + 1;
}
insert getstaticvariable("", 0);  //☆
setstaticvariable "", "";
[ ]
RE:08692 colormarker関係についてNo.08693
秀丸担当 さん 18/05/31 09:36 [ コメントを投稿する ]
 
早速のご確認ありがとうございます。
setstaticvariableはサイズの上限だけでなく個数の上限もありました。
失敗した場合はresultでわかるはずでしたが、個数の場合で判断できませんでした。
resultで失敗がわかるように修正します。
というか個数の上限は考えなくてもいいように対策して修正させていただきます。
[ ]
RE:08693 colormarker関係についてNo.08698
たけとり さん 18/06/07 22:11 [ コメントを投稿する ]
   8.83 Beta 2 にて、(変数の個数が256個前後ではなくて、)容量が32KBぐらいになるところで、resultがfalseになることを確認しました。
 対応、ありがとうございました。
[ ]

[ 新規に投稿する ]