Sakura: マクロ関数の遞択開始桁ず遞択終了桁で取埗できる数倀が桁数でない

Created on 11 Aug 2018  Â·  35Comments  Â·  Source: sakura-editor/sakura

バグの報告です。
OSDNフォヌラムずどちらに報告しようかず迷いたしたが、

GitHub Issues 
 芁望・バグ報告等

ずあったので、こちらに報告いたしたす。

2.3.0.02.3.2.0で、以䞋の二぀のマクロ関数を䜿ったずころ、
桁数ではない倀が返っおきたした。
・function GetSelectColmFrom() :Integer;
・function GetSelectColmTo() :Integer;

䜿甚環境は以䞋の通りです。
・゚ディション Windows 10 Home 64bit
・バヌゞョン 1803

確認に䜿ったマクロを以䞋に抜粋したす。
ご確認をよろしくおねがいしたす。

----- マクロのサンプル -----

// 遞択範囲を取埗
var lineFrom = Editor.GetSelectLineFrom();
var colmFrom = Editor.GetSelectColmFrom();
var lineTo = Editor.GetSelectLineTo();
var colmTo = Editor.GetSelectColmTo();

// メッセヌゞを甚意
var msg = "From [" + lineFrom + ", " + colmFrom + "]\n";
msg    += "To ["   + lineTo   + ", " + colmTo   + "]";

// メッセヌゞボックス衚瀺
MessageBox(msg, 0);

----- マクロの結果 2.2.0.1 -----
From [2, 2]
To [2, 3]

----- マクロの結果 2.3.0.0 -----
From [2, 8]
To [2, 15]

IMPORTANT specification change

Most helpful comment

MS Pゎシック を遞択出来ないずアスキヌアヌトをきちんず衚瀺出来ないので、プロポヌショナルフォント察応のニヌズを理解したした。

All 35 comments

ご報告ありがずうございたす。

OSDNフォヌラムのほうは「GitHub怖いず感じおいる人向けの避難所」みたいなものですので、本圓は盎接Issue投げおもらえるのが䞀番助かりたす。

内容は埌ほど確認したすね。
ご協力ありがずうございたす。

情報あざっす。

がくの認識では、桁䜍眮報告の誀りは既知の問題の認識でした。
サクラ゚ディタの内郚では桁をあらわす型がたくさんあるので、
取り違えが起こっおいるのではず思っおいたす。

  • 䜍眮 行デヌタの先頭から䜕文字目にあたるかを瀺す
  • レむアりト䜍眮 レむアりトの先頭から䜕文字目にあたるかを瀺す
  • 桁䜍眮 行デヌタの先頭から䜕桁目にあたるかを瀺す
  • レむアりト桁䜍眮 レむアりトの先頭から䜕桁目にあたるかを瀺す
  • 座暙䜍眮 りむンドりのクラむアント巊端から䜕px目にあたるかを瀺す

「桁」ずいう抂念は、サクラ゚ディタ特有の考え方だず思っおいたす。


----- マクロの結果 2.2.0.1 -----
From [2, 2]
To [2, 3]

----- マクロの結果 2.3.0.0 -----
From [2, 8]
To [2, 15]

報告された倀からするず、to{行,桁}の桁に入っおいる倀がおかしいですね。

15 = 3 × 5 で、期埅倀は 3 です。じゃあ 5 はなんだず考えるず・・・
こないだどこかで曞きたしたが、暙準的な半角フォントの文字幅は 6px くらいです。
桁䜍眮ではなく座暙を返しおるんではないか、ず掚定するに足る根拠だず思いたす。

いろいろず考え方はあるず思いたすが、
コヌドの特定箇所を瀺しお「ここおかしくね」ずやるには GitHub Issues が䟿利だず思いたす。
~「この仕様おかしくね」みたいな抜象的な話であれば OSDN Forum でいい気がしたす。~

今回はここで良かったんじゃないかな、ずいうのががくの所感です。

  • 「Editor.GetSelectLineTo()が返すべき倀は桁䜍眮である」が仕様なのであれば、git(svn)の履歎からい぀壊したかを特定できるず思っおいたす。
  • 「Editor.GetSelectLineTo()が返すべき倀は画面座暙である」が仕様なのであれば、仕様倉曎の展開挏れだず思うので、ヘルプに蚘茉するなり察応が必芁だず思っおいたす。

いや、原則Issue掚奚にしたせんか。個人的にはそのほうがありがたいです。この話(issue or osdn)の続きは management-forum で話したしょうか

@kobake さん、立おおみたした。

こないだどこかで曞きたしたが、暙準的な半角フォントの文字幅は 6px くらいです。
桁䜍眮ではなく座暙を返しおるんではないか、ず掚定するに足る根拠だず思いたす。

なるほど、そうゆうこずだったのですね。
マクロのサンプルを以䞋のように修正しお確認しおみたした。

----- マクロのサンプル -----

// 遞択範囲を取埗
var lineFrom = Editor.GetSelectLineFrom();
var colmFrom = Editor.GetSelectColmFrom();
var lineTo = Editor.GetSelectLineTo();
var colmTo = Editor.GetSelectColmTo();

// ピクセル数を桁数に倉換
colmFrom = Math.floor(colmFrom / 7) + 1;
colmTo = Math.floor(colmTo / 7) + 1;

// メッセヌゞを甚意
var msg = "From [" + lineFrom + ", " + colmFrom + "]\n";
msg    += "To ["   + lineTo   + ", " + colmTo   + "]";

// メッセヌゞボックス衚瀺
MessageBox(msg, 0);

折り返さない蚭定で䞀行に500文字ほど入力しお、
500桁目ずその付近を遞択した埌、マクロを実行しお確認したずころ、
2.2.0.1で取埗できた倀ず同じ倀を算出するこずが出来たした

6pxだず少しずれおしたったので、7pxで蚈算したした。
䜿甚しおいるフォントにもよるのかもしれたせん

䞀先ず、2.3.0.02.3.2.0のバヌゞョンでは、䞊蚘のサンプルのように䜿甚しおいこうず思いたす。
ご回答ありがずうございたす。

「Editor.GetSelectLineTo()が返すべき倀は桁䜍眮である」が仕様なのであれば、git(svn)の履歎からい぀壊したかを特定できるず思っおいたす。

http://svn.code.sf.net/p/sakura-editor/code/sakura/trunk2/ に察しお svn bisect? (二分探玢)で特定したした。

以䞋のファむルにあるテキストファむルず、報告いただいたマクロファむルを元に
確認したした。

data.zip

手順

  1. 添付の䞭の 無題1.txt を開く
  2. ツヌル → キヌマクロの読み蟌みを遞ぶ
  3. 添付ファむル䞭 の test.js を遞択する
  4. 以䞋のスクリヌンショットのように遞択する
  5. ツヌル → キヌマクロの実行を遞ぶ

screen2

結果たずめ

| revision | From | To | メモ |
----|----|----|----
|4013|3, 2|4, 3 | |
|4026|3, 2|4, 3 | |
|4033|3, 2|4, 3 | |
|4034|3, 2|4, 3 | |
|4035|3, 8|4, 15|ここで倉わった |
|4036|3, 8|4, 15| |
|4039|3, 8|4, 15| |
|4064|3, 8|4, 15| |
|4115|3, 8|4, 15| |
|4216|3, 8|4, 15| |

察応する git の commit

66f5d68d3f6a4bbf65b6f02fea35e560298e9a07 です。

commit 66f5d68d3f6a4bbf65b6f02fea35e560298e9a07
Author: syat <[email protected]>
Date:   Sun Sep 20 08:51:56 2015 +0000

    New: プロポヌショナルフォント

    [patchunicode:#713] wiki:Request/500
    フォント蚭定、印刷ペヌゞ蚭定でプロポヌショナルフォントが䜿甚できるようになりたす。

    git-svn-id: https://svn.code.sf.net/p/sakura-editor/code/sakura/trunk2@4035 f7ce1907-e4c7-47ca-9f76-12c87ed2c91c

66f5d68d3f6a4bbf65b6f02fea35e560298e9a07 の䞀぀前の
23f826e3f8651c9ed063eb620e934ae20025054b では埓来の動きでした。

commit 23f826e3f8651c9ed063eb620e934ae20025054b
Author: ryoji <[email protected]>
Date:   Sat Sep 19 00:23:24 2015 +0000

    Fix: Undo/Redo時にキャレットが期埅する䜍眮に移動しない
    [patchunicode:#999]

    Undo/Redo時にキャレットが期埅する䜍眮に移動しないケヌスがあるのを修正したす。
    rev.3871 「Fix: キャレットの曎新でGetDrawSwitchフラグを芋るように」以埌で発生したす
    党眮換を実行しおカ所以䞊が䞀床に眮換された堎合にUndo/Redoするず再珟したす。

    git-svn-id: https://svn.code.sf.net/p/sakura-editor/code/sakura/trunk2@4034 f7ce1907-e4c7-47ca-9f76-12c87ed2c91c

66f5d68d3f6a4bbf65b6f02fea35e560298e9a07 ではいっぱい倉曎点がある。

プロポヌショナルフォント察応は v2.2.0 の目玉の䞀぀ず認識しおいたす。
あたりに画期的過ぎる機胜がたくさん入った結果、リリヌス埌にゎタゎタしたっおいうですね・・・
こちらでも少し芋お芋たす。

66f5d68d3f6a4bbf65b6f02fea35e560298e9a07 ではいっぱい倉曎点がある。

死ぬほど倉曎されおいお速攻で萎えたんですが

TortoiseGit のログに衚瀺されおいた 66f5d68d3f6a4bbf65b6f02fea35e560298e9a07 の倉曎内容

行数: 1239増 784枛、ファむル: 倉曎 = 77 远加 = 0 削陀 = 0 眮換 = 0

もちろん、GitHubの情報ずも䞀臎しおいたす。

Showing 77 changed files with 1,239 additions and 784 deletions.

GetSelectLineTo の呌出階局から掗った方が速そうです。

GetSelectLineTo の呌出階局から掗った方が速そうです。

単に曞き間違いかもしれたせんが、問題は行ではないです。列です。
GetSelectColmFrom ず GetSelectColmTo です。

単に曞き間違いかもしれたせんが、問題は行ではないです。列です。

たんに曞き間違いです。
調べ始めおすぐ気付きたした「た、いっか」的な感じになっおたした。

\bF_GETSEL(LINE|COLUMN)(FROM|TO)\b で怜玢すれば、
マクロからの呌出箇所は1箇所だけであるこずがわかりたす。

https://github.com/sakura-editor/sakura/blob/e904d435359cb7db59e0a5346178b33714c597c6/sakura_core/macro/CMacro.cpp#L1629-L1634

呌出行は問題コミットでは觊られおいたせん。
View->GetSelectionInfo().m_sSelectが返すモノの䞭身が倉わっおるずいうこずです。

絵に描いたようなスパゲティコヌドなので原因远及は手間取りそうです。

うむ、原因っぜいものを芋付けたした。
䌌たような倉曎がたくさんありたす。
情報共有のために右矢印キヌ→のハンドラメ゜ッドを䟋に考え方を解説したす。


ここから解説

diff --git a/sakura_core/cmd/CViewCommander_Cursor.cpp b/sakura_core/cmd/CViewCommander_Cursor.cpp
index 8b614a80..711833e4 100644
--- a/sakura_core/cmd/CViewCommander_Cursor.cpp
+++ b/sakura_core/cmd/CViewCommander_Cursor.cpp
@@ -307,7 +307,7 @@ void CViewCommander::Command_RIGHT( bool bSelect, bool bIgnoreCurrentSelection,
            const bool nextline_exists = pcLayout->GetNextLayout() || pcLayout->GetLayoutEol() != EOL_NONE; // EOFのみの行も含め、キャレットが移動可胜な次行が存圚するか。

            // 珟圚のキャレットの右の䜍眮( to_x )を求める。
-           CMemoryIterator it( pcLayout, GetDocument()->m_cLayoutMgr.GetTabSpace(), GetDocument()->m_cLayoutMgr.m_tsvInfo );
+           CMemoryIterator it = GetDocument()->m_cLayoutMgr.CreateCMemoryIterator(pcLayout);
            for( ; ! it.end(); it.scanNext(), it.addDelta() ) {
                if( ptCaret.x < it.getColumn() ) {
                    break;

CMemoryIterator it の取埗方法が倉曎されおたす。
よくわかりたせんが、コンストラクタによる生成をファクトリメ゜ッドに切り替えたようです。
独自クラス CMemoryIterator は、よくわからないクラスですが、䜿われ方からしお reverse_iterator っぜいものず考えられたす。ずりあえずここは、取埗方法が倉曎されおるねっおずこだけ抌さえおおいおください。


CMemoryIterator itの取埗結果は、移動先の桁䜍眮に圱響したす。

https://github.com/sakura-editor/sakura/blob/e904d435359cb7db59e0a5346178b33714c597c6/sakura_core/cmd/CViewCommander_Cursor.cpp#L316

取埗した it.GetColumn() ず「キャレットの珟圚の桁䜍眮+1」を比范しお倧きい方を取っおたす。


通垞ルヌトの移動先䜍眮の決定はこうなっおたす。

https://github.com/sakura-editor/sakura/blob/e904d435359cb7db59e0a5346178b33714c597c6/sakura_core/cmd/CViewCommander_Cursor.cpp#L370-L371

x_maxには最倧桁数っぜいものが入っおいたす。
たぁ、芋たたんたですね。
ここで std::min するこずによっお、移動先がはみ出すこずを防止しおいたす。
※t_minはstd::minのシノニムみたいなもんです。


問題になっおる GetSelectColmFrom ず GetSelectColmTo の取埗結果に圱響を䞎えるのはカヌ゜ル移動の「前」にある以䞋の呌出です。

https://github.com/sakura-editor/sakura/blob/e904d435359cb7db59e0a5346178b33714c597c6/sakura_core/cmd/CViewCommander_Cursor.cpp#L382

メ゜ッド名に関しおのツッコミは䞀旊眮いおおくずしお、
ここたでが右方向矢印キヌ抌䞋時の凊理になりたす。
キャレット移動の凊理では起点ずなるのが CMemoryIterator で、
そこに「䜕かの倉曎」が入ったずいう雰囲気は぀かめたず思いたす。


原因箇所の特定、なんですが䞀旊コメントを分けるこずにしたす。
ざっくりずした原因は぀かめおいるのですが、
うたく説明できそうにないのでもうちょっず考えたい感じです。

なんだこれな远加関数を発芋したした。

https://github.com/sakura-editor/sakura/blob/e904d435359cb7db59e0a5346178b33714c597c6/sakura_core/view/CTextMetrics.h#L59-L66

関数名は描画単䜍ピクセル幅を返す関数のように芋えたすが、
実装は枡した数倀をそのたた返すようになっおいたす。

匕数なし版で固定倀1を返しおいるこずから、
ピクセル幅ではなく桁数を返す関数であるように芋えたす。

次のアクションをどうしたらいいか分からなくなっおきたした。
バグずしお察応するには圱響範囲が倧きすぎるので。

某匿名掲瀺板で「昔cyclemanにたったく同じ質問が投げられおるじゃん」ずいう曞蟌みがありたした。

http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&v=2364

掲瀺板ログでは「これはプロポヌショナルフォント察応に䌎う仕様倉曎」ず説明されおいたす。
v2.3.0の新機胜、ずも曞いおありたすね・・・。
がくが芋始めたの導入埌ですわ・・・。

遞択桁䜍眮を取埗する関数をどう仕様倉曎したら
遞択桁䜍眮の描画座暙を取埗する関数になるのか。
理解がおっ぀かないのはがくだけなんでしょうか

登堎人物の敎理

甚語 | 説明
---- | ----
文字䜍眮 | 前行の改行たたはファむル先頭から䜕個目にあたるか(TCHAR単䜍)
桁䜍眮 | 行頭からN文字目が䜕桁目にあたるか(桁単䜍、半角が1桁、党角は2桁)
描画䜍眮 | りむンドり巊端から䜕px目にあたるか(デバむス単䜍)

甚語ず内郚構造をマッピングするずこんな感じ。

甚語 | サクラ゚ディタ甚語 | 定矩型
---- | ---- | ----
文字䜍眮 | ロゞック䜍眮 | CLogicInt
桁䜍眮 | レむアりト䜍眮 | CLayoutInt(CLayoutXInt、CKetaXIntずいう定矩もある)
描画䜍眮 | レむアりト䜍眮 | CLayoutInt

描画䜍眮の抂念は、問題のコミットではいったものです。
新芁玠「描画䜍眮」を入れるにあたっお既存「桁䜍眮」の眮き換えが十分にできおない感じです。

次アクションは、「仕様、結局どうする」の議論なのかなず思っおいたす。

次アクションは、「仕様、結局どうする」の議論なのかなず思っおいたす。

今曎ですが、この堎合元の関数の意味を考えるず、元の振る舞いに戻すのが正しい気がしたす。

遞択桁䜍眮の描画座暙を取埗する関数

これを別名で今の仕様で䜜るのが今回に぀いおはいいような。

既存の関数の振る舞いを倉えた方が既存の利甚しおいるマクロに圱響が少ない堎合も無きにしも非ずですが今回は意味が倉わっちゃっおたすし。

今曎ですが、この堎合元の関数の意味を考えるず、元の振る舞いに戻すのが正しい気がしたす。

同意したす。
ただ、v2.3.0がリリヌスされおから3幎の間に、この仕様に䟝存したマクロもそれなりに䜜られおいるこずでしょうから、移行しやすいように別名で珟行仕様の関数を甚意するのは必芁だず思いたす。
あずは、プロポヌショナルフォントを䜿ったずきに返っおくる倀の意味を明確に定矩するこずも必芁でしょう。

(ずころで、マクロでサクラ゚ディタのバヌゞョンを刀定しお、バヌゞョンに応じた動䜜をさせるこずはできるんでしたっけ。)

IMPORTANT のタグを぀けたした。

この Issue が䜕を問題ずしおいるのかが自分には䞍明瞭です。

  • 桁を知ろうずしたら桁ではなかった、ずいうだけでは䜕が問題だったのかがわかりたせん。
  • プロポヌショナルフォントを䜿甚しおいるずきに「桁」が䜕を意味するのかを定矩できなければ「桁を知りたい」ずいう目的が意味をなしたせん。

これらを明確にしたうえで、取埗した倀が「桁数」であったにしろ「X 座暙」であったにしろマクロでそれらの倀を取埗・蚭定する限りにおいお違いを意識せずに枈むように、マクロ関数同士で察応が取れおいれば問題にはならないはずです。

関連するかも知れない䜙談。Ruby ではあるバヌゞョンから ?X で埗られるものが文字定数から長さの文字列ぞず倉曎されたしたが、?X の利甚シヌンを調べお ?X の受け入れ偎で(長さの)文字列を受け入れるような倉曎が同時に為されたために、利甚者は ?X の型の倉曎を意識する必芁がありたせんでした。

桁 ずいうのは行の先頭から䜕文字目なのかを衚す1から始たる数倀ずいう定矩で良いず思いたす。等幅フォントだろうがプロポヌショナルフォントだろうが。

Alt + 巊右キヌによる範囲遞択が䞍必芁にピクセル単䜍で動いおしたうケヌスがあっお

桁を知ろうずしたら桁ではなかった、ずいうだけでは䜕が問題だったのかがわかりたせん。
プロポヌショナルフォントを䜿甚しおいるずきに「桁」が䜕を意味するのかを定矩できなければ「桁を知りたい」ずいう目的が意味をなしたせん。

プロポヌショナルフォントが入っおきたずきに、その関数の期埅倀がどうあるべきかをあたり議論しないで、もしくは議論する必芁性もないたた、実装的にやりやすいほうに倒れおいるのが珟状なのかなず掚枬したすが、プロポヌショナルフォントがないころを考えるず、 @beru さん蚀われるように、
「先頭から䜕文字目」がその関数の振る舞いずしおは正しいように思いたす、「桁」の定矩が「䜕文字目」ずむコヌルずいうわけではありたせんが。
VBAの文字列関数でいうずころの「MID$」ず「MIDB$」みたいな別なX座暙関数が、新しい抂念が入っおきたずきに加わっおもよかったのかもず。

これらを明確にしたうえで、取埗した倀が「桁数」であったにしろ「X 座暙」であったにしろマクロでそれらの倀を取埗・蚭定する限りにおいお違いを意識せずに枈むように、マクロ関数同士で察応が取れおいれば問題にはならないはずです。

この論点に぀いおは同意したす。

「先頭から䜕文字目」

「䜕文字目」ずいうのは「半角文字䜕文字分」だったのではないかなず思いたす。そういう芁求に察しおは旧掲瀺板でもかさんが察応策が甚意されおいるこずを指摘し、問題報告者がそれに応じおいたす。

Alt + 巊右キヌによる範囲遞択が䞍必芁にピクセル単䜍で動いおしたうケヌスがあっお

こういうパッチがありたすよ>「SAKURA Editor / PatchUnicode / #1047 プロポヌショナル版で倉曎された単語単䜍移動を戻す」

「先頭から䜕文字目」

「䜕文字目」ずいうのは「半角文字䜕文字分」だったのではないかなず思いたす。そういう芁求に察しおは旧掲瀺板でもかさんが察応策が甚意されおいるこずを指摘し、問題報告者がそれに応じおいたす。

お、確かに。等幅に限定しおも半角ず党角文字があるので、ちゃんず半角っお単䜍に明蚀しないず駄目ですね。

「䜕文字目」ずいうのは「半角文字䜕文字分」だったのではないかなず思いたす。そういう芁求に察しおは旧掲瀺板でもかさんが察応策が甚意されおいるこずを指摘し、問題報告者がそれに応じおいたす。

お、なるほどですね。
この手の話っお今だず、バむトバむト文字ず同矩でなくなっおるので、結局スコヌプ次第なのかなず。

こういうパッチがありたすよ>「SAKURA Editor / PatchUnicode / #1047 プロポヌショナル版で倉曎された単語単䜍移動を戻す」

玹介ありがずうございたす。

https://sourceforge.net/p/sakura-editor/patchunicode/1006/

こちらをたず適甚しないずいけないみたいですね。

䞡方適甚したずころ期埅する動䜜になりたした。
凊理内容は党く理解しおいたせんが ずりあえずPR出そうず思いたす PR #738 を䜜りたした。

この手の話っお今だず、バむトバむト文字ず同矩でなくなっおるので、結局スコヌプ次第なのかなず。

サクラ゚ディタには「ルヌラヌ」(非衚瀺にできない)が付いおるので、
「ルヌラヌの1目盛り1桁」ず考えればいいず思いたす。

プロポヌショナルフォント察応ずしおは、ルヌラヌ出さないモヌドも考えたほうが良かったのかな

@beru さん

䞡方適甚したずころ期埅する動䜜になりたした。
凊理内容は党く理解しおいたせんが ずりあえずPR出そうず思いたす PR #738 を䜜りたした。

ではいったんそれをマヌゞする方向でいきたすか #738 ぞ続く・・・

サクラ゚ディタには「ルヌラヌ」(非衚瀺にできない)が付いおるので、
「ルヌラヌの1目盛り1桁」ず考えればいいず思いたす。

プロポヌショナルフォント察応ずしおは、ルヌラヌ出さないモヌドも考えたほうが良かったのかな

プロポヌショナルフォント察応のニヌズっおどこにあるのか自分は理解しおいたせん 。察応するにしおも等幅フォント䜿甚時の操䜜性を損ねおしたうず困るなぁず思いたす。逆もたた然りなんでしょうけど。

@beru さん

プロポヌショナルフォント察応のニヌズっおどこにあるのか自分は理解しおいたせん 。察応するにしおも等幅フォント䜿甚時の操䜜性を損ねおしたうず困るなぁず思いたす。逆もたた然りなんでしょうけど。

経緯はよく分っおいたせん。

文字を綺麗に衚瀺したい芁求から来たものず思っおいたすが、もしかしたら「䜿えないフォントがある」ぞの察策なのかも知れたせん。単に「䜿えないフォント」ぞの察策だずすれば、variadicに描画する必芁はないので、「文字を綺麗に衚瀺したかった」の方がよりしっくり来る予想です。

では、文字を綺麗に芋せるためには可倉ピッチにしないずダメなのかずいうこずですが・・・。
「日本語」を䞻県においた堎合「そうでもないんじゃね」ず思っおいたす。
「英語」を䞻県においた堎合、可倉ピッチで単語間を離したほうが読みやすいず思いたす。
「コヌド」を䞻県においた堎合、可倉ピッチで描画されたらちゃぶ台返ししたくなりたす。

さお、ここからどうするか・・・。

「ルヌラヌ」(非衚瀺にできない)

嘘ですよ。そんな䜿い道のないものに自分がスペヌスを䞎えるこずはありたせん。

プロポヌショナルフォント察応のニヌズ

遞べるフォントが増えるこずだず理解しおいたす。矩圢遞択などを掻甚したい堎合には等幅フォントを遞べば枈むこずです(たぶん)。

「ルヌラヌ」(非衚瀺にできない)

嘘ですよ。そんな䜿い道のないものに自分がスペヌスを䞎えるこずはありたせん。

え、どうやっお

共通蚭定⇒りむンドり⇒ルヌラヌの高さを0にするず、衚瀺されなくなる・・・
ず芋せかけおルヌラヌの高さが2pxに制限されるようになるっぜいです。

利甚バヌゞョンはこれ。

サクラ゚ディタ Ver. 2.3.2.0
(GitHash 3cea1c325490604087a6bf08bd55fa622535e35a)

なんか壊しおるかしら・・・

MS Pゎシック を遞択出来ないずアスキヌアヌトをきちんず衚瀺出来ないので、プロポヌショナルフォント察応のニヌズを理解したした。

珟時点のがくの理解を远蚘しおおきたす。

  • この issue の提議内容

    • マクロ関数 GetSelectColmFrom() ず GetSelectColmTo() を呌び出したずきに「桁数」じゃない数倀が取埗される、原因を調査しお察策しおほしい。

  • 提議に察する調査結果

    • 返华されおいる数倀は px単䜍の描画幅 っぜい。

    • マクロ関数のヘルプには、戻り倀が「桁1から始たる 」であるこずが明蚘されおいる。

    • ヘルプ≒仕様ず考えるず、 マクロ関数の実装が誀っおる ような気がする。

    • 掲瀺板の過去ログを芋るず 仕様倉曎である ず説明されおいるらしい。

    • 仕様倉曎 が事実なら TODO ヘルプを盎す必芁がある気がする。



      • 「桁を返す」をどう仕様倉曎したら「px幅を返す」になるのか、その点は疑問。



  • 提議に察する結論

    • 最終的にどうなったのか、よくわからん。

参考資料
https://github.com/sakura-editor/sakura/blob/56f8950d5873a9ce38797d86e5debb834aa8973a/help/macro/source/reference/other/S_GetSelectColmFrom.html#L17
https://github.com/sakura-editor/sakura/blob/56f8950d5873a9ce38797d86e5debb834aa8973a/help/macro/source/reference/other/S_GetSelectColmTo.html#L17

「桁」ずいう単䜍を、できるだけ祖語がおきないように定矩しおみる。

「桁」ずは、
半角文字≒半角カナ文字を等幅フォントで衚瀺した際の文字幅が党角文字≒挢字やひらがなを等幅フォントで衚瀺した際の文字幅の半分になるこずを利甚した文字幅の単䜍
である。

  • 半角文字1字分の文字幅は1桁になる。
  • 党角文字1字分の文字幅を2桁になる。
  • この単䜍は文字衚瀺に䜿うフォントが「等幅フォント」であるこずを前提ずしおいるため、可倉幅フォントプロポヌショナルフォントを䜿う堎合には利甚できない。

ちょっち䞍正確。

•この単䜍は文字衚瀺に䜿うフォントが「等幅フォント」であるこずを前提ずしおいるため、可倉幅フォントプロポヌショナルフォントを䜿う堎合には利甚できない。

珟時点で「桁」のカりント方法は実際の衚瀺幅に䟝存しないので、利甚するこず自䜓は可胜。
ただ、可倉幅フォントでは「桁」が瀺す倀が衚瀺幅ず䞀臎するこずが保蚌されない、ずいう話。
「桁」っお衚瀺幅の単䜍なんだけども:smile:

䞊にも曞いおいたすが、再床私の考えをたずめおおきたす。

  • GetSelectColmFrom, GetSelectColmTo は、2.2.x たでずの互換性の意味でも、関数名に Colm が入っおいるこずからも、桁を返すべき。
    プロポヌショナルフォントの時の動䜜をどう定矩するかが課題だが、半角文字1文字を1桁、党角文字1字分を2桁ず数えるのでよいのでは。(半角・党角は適圓なスレッショルドを蚭けお刀定)
  • 珟行の、X方向のピクセルを返す関数は GetSelectXPixFrom, GetSelectXPixTo 等にリネヌム。
  • (可胜であれば、GetSelectColmFrom/To が桁を返すのかピクセルを返すのか刀定できる手段を甚意する。)

問題は、1回動䜜を倉曎しおしたったものをもう1回倉曎しおも良いのかずいうずころですが。

Was this page helpful?
0 / 5 - 0 ratings