ヘッダ内でのlinenoNo.47059
yya さん 14/11/20 16:38
 
マクロのキーワードの lineno についてですが,この値が
秀丸メールヘッダ内ではどこでも 0 であることは仕様でしょうか?

その場合,ヘッダ内のカーソル位置の取得のためには,
columnとlinenoのペアではなく,xとyのペアを使うしかないのでしょうか?

[ ]
RE:47059 ヘッダ内でのlinenoNo.47060
秀まるお2 さん 14/11/20 16:56
 
 linenoが0になってしまうのは、すみませんが仕様になります。わざとそうし
てます。

 yの値は使えますが、ヘッダの中だと負の数になります。その前提で使ってい
ただく必要があります。

 メール本文の先頭にカーソル移動するのはgofiletopでいけますが、ヘッダも
含めて本当の先頭に移動するのは、

    moveto 0, -9999;

 のような文にする必要があります。

 あと、ヘッダを書き換えるには、カーソル移動してやるよりも、

    loaddll "tkinfo.dll";
    #n = dllfunc("SetHeader","Subject", "テスト件名");

 みたいにtkinfo.dllのSetHeaderとかの関数を使った方が簡単です。こっちの
方がお勧めです。

[ ]
RE:47060 ヘッダ内でのlinenoNo.47063
yya さん 14/11/20 17:37
 
ご回答どうもありがとうございました。

今回質問してみた経緯は,秀丸エディタマクロヘルプの「マクロの設定依存性に
ついて」にある

> x, y → column, lineno
> gettext → gettext2
> seltopx, seltopy, selendx, selendy → seltopcolumn, seltoplineno, selendco
>lumn, selendlineno

などの記述を参考に自作のマクロを最近書き換えたところ,
思い当たる現象に遭遇したからでした。

秀丸メールのヘッダ部分にも関係しそうな秀丸エディタのマクロは,
column や seltopcolumn/selendlineno ではなく,
y や seltopy/selendy を使った方が無難だということですね?

[ ]
RE:47063 ヘッダ内でのlinenoNo.47064
秀まるお2 さん 14/11/20 18:14
 
> 秀丸メールのヘッダ部分にも関係しそうな秀丸エディタのマクロは,
> column や seltopcolumn/selendlineno ではなく,
> y や seltopy/selendy を使った方が無難だということですね?

 秀丸メールのヘッダ上でもうまく動くようにするには、少なくともlinenoなど
の「0」になってしまう物は「y」などに置き換えていただく必要がありますが、
実際その修正だけでうまく動くかというと、なかなか難しいと思います。

 ヘッダの中身1つの中(例えばSubject:ヘッダの中身だけ)を編集するような
マクロでしたらうまくいくと思いますが、複数行にまたがって編集するような
マクロはうまく動かない可能性が高いです。なぜかというと…、

 ヘッダの中ではカーソルの動き方が特殊でして、例えば

    golinetop;

 って文を実行しても行頭には移動せず、ヘッダ内容の先頭に移動します。あと、
ヘッダの名前部分(Subject:とかの部分)の途中にカーソル移動させることが出
来なかったり、独特な動作をします。

 その辺、実際にテストしてうまく動くように確認していただかないといけない
です。

 とりあえず僕的には、既存の秀丸エディタ用のマクロを秀丸メール上で動かし
た時に、メール本文上に限っては普通に動くようにって仕組みにしたつもりです。
なので、gofiletop;でメール本文の先頭に移動したりとか、あたかもメール本文
だけを秀丸メールで扱ってるような風に見えるようにしています。

 ヘッダの中で動作するように具体的にどうしたらいいかは、マクロの中身での
ケースバイケースで、「こうすれば動きます」みたんな簡単な法則は無いです。
その辺ご了承ください。

[ ]
RE:47064 ヘッダ内でのlinenoNo.47067
yya さん 14/11/23 20:01
 
秀丸メールのヘッダ部分でのカーソルの動きが特殊なため,
秀丸エディタ用のマクロは秀丸メール本文中でのみ動かせるように
意図されている旨,理解しました。

> linenoが0になってしまうのは、すみませんが仕様になります。
> わざとそうしてます。
>
> yの値は使えますが、ヘッダの中だと負の数になります。

その上での質問なのですが,秀丸メールのヘッダ内で,
y の方は負値を許容しているのに lineno はどこでも 0 に固定している理由とは
どういうものなのでしょうか?
ユーザーが利用しないように,というような理由なのでしょうか?
もしよろしければ,お聞かせください。

[ ]
RE:47067 ヘッダ内でのlinenoNo.47068
秀まるお2 さん 14/11/23 20:26
 
 yは先頭が0なので、負の数でも不自然なことは無いかと思いました。

 linenoは、先頭が1なので、その1つ上が0で、さらに上が-1っていうのはなん
となくエレガントじゃないし、そういう中途半端にするくらいなら全部0でもい
いと思ったような気がします。あまり深い意味は無かったような…。

 ちゃんと負の数で計算した値を返すように直すのは簡単に出来るとは思います。
ただ、いまさら仕様変更すると、もしかして

    if( lineno == 0 )

 みたいな判定をしてるマクロがあった時に誤動作してしまうので、やっぱりい
じらない方が無難な気がします。

[ ]
RE:47068 ヘッダ内でのlinenoNo.47069
yya さん 14/11/24 14:38
 
ご回答ありがとうございました。

確かに,現在のlinenoの仕様を変更することは危険かもしれませんね。
(ただ,秀丸メールのヘッダ部でlinenoの値が0となっていることは,
ヘルプファイルなどにも書いていないような気がします。
そうならば,仕様は固まっていなかったと解釈できると思います。)

秀丸マクロを作成する際の,折り返しによるずれへの配慮と
秀丸メールのヘッダ部でも動作することの両立を考えると,
長期的な視点からは,新しい変数名のものでもあれば良いような気もしますが,
結局はどれだけ長い目で見るかということなのでしょうかね。

[ ]
RE:47069 ヘッダ内でのlinenoNo.47070
yya さん 14/11/24 21:39
 
>長期的な視点からは,新しい変数名のものでもあれば良いような気もしますが,

変数というのは間違いで,内部的な値を表現するキーワードでした。

[ ]
RE:47070 ヘッダ内でのlinenoNo.47071
秀まるお2 さん 14/11/25 10:31
 
 とりあえず、仕様変更して後々面倒なことになったら困るので、今の仕様にし
ときます。

 ヘルプの方は、ちゃんとlinenoの仕様について追加させていただきます。

[ ]
RE:47071 ヘッダ内でのlinenoNo.47072
yya さん 14/11/25 12:39
 
わかりました。
どうもありがとうございました。

[ ]