[スレッド全体]

2008/5/25 (日) 03:26:55 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5299] 水平スクロールバーを常にテキストの幅に合わせる
A) 水平スクロールバーを常にテキストの幅に合わせる
B) 常にウィンドウの幅で折り返す

上記の機能を実験的に作ってみました(ダウンロードページの10-5.)
しかし、速度の問題と分割ウィンドウでの表示の問題があります。

■速度の問題
A:入力毎に全ラインを走査してテキストの最大幅を求めています。そしてAdjustScrollBars()でそれを使っています。
B:OnSize()にて折り返し位置の変更を呼び出しています。こちらの方が負荷が高いです。

これをAthlonXP-M3000, mem DDR1GB, Win2k SP4のデスクトップ環境で試してみました。
A:10万行程度までなら使えそうな感じ。
B:1万行までなら大丈夫そう、2万行あると遅さが分かる。
  5万行では明らかに遅い。書き直しに1秒程掛かる。

■分割ウィンドウの問題(Bのみ)
左右に分割すると、左側のウィンドウが右側のウィンドウサイズで折り返されます。
折り返し幅は1つしかないので処理順の都合でこの様になります(と思う)
こちらは今のままだとちょっと致命的ですかね?左右に分割すると問題ありますよ、で押し通したい所ですが……


一応タイプ別オプション→スクリーン→レイアウトの所にオプションを追加して選択できるようにしてみました。
また、Ctrl+Alt+Uでの折り返しの変更については、AまたはBが選択されている時はA,Bのトグルとしました。

こんな感じですが、この機能使えると思います?
Patchesに載せる価値あるでしょうか?

http://www.geocities.jp/nasukoji_7/download/download_sakuraeditor.html


2008/5/27 (火) 18:50:28 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.5.21022)
[5304] 仕様について
▼ なすこじさん
> A) 水平スクロールバーを常にテキストの幅に合わせる
> B) 常にウィンドウの幅で折り返す


ちょっとだけ触ってみました。
常に折り返しのとき、右側に少し空白が欲しいかな。ぶら下げ文字+改行文字くらいは見せてほしいですね〜。
…って、細かい。(^^;

Aは特に欲しいとは思ったこと無いです。でも、性能低下が無ければ全タイプ(!)の設定をこれにして使うと思います。桁数を考える必要が無いしスクロールバーのつまみ部分も長めになって楽ちん。
Bは欲しいと思うときがあります。ワープロや掲示板投稿用の文章の下書きをするときとか。

この件については、細部まで仕様を練って他の人たちと調整するのがなんだか面倒に感じていたので手をつけていませんでした。この機会に、自分が期待する仕様(現在のところ)を書いておきます。まぁ、割と変哲のない仕様だとは思いますが...

折り返しモードの名称は、
「折り返さない」  <--- A相当
「指定幅で折り返す」
「右端で折り返す」 <--- B相当
のように他エディタでも使われているような簡潔でありふれた表記に。
※「折り返さない」は限度を超えたら折り返しちゃうじゃない?とかいう突っ込みは置いといて。

設定UIや設定の引き継ぎについては以下のとおり。

・各タイプ別設定に3択の「折り返し方法」コンボボックスを1個だけ置く(「折り返し桁数」の上あたり)
・メニューコマンドは個別に3つ(折り返さない/指定幅で折り返す/右端で折り返す)を用意する
・折り返し方法(3種)はタイプ別設定とコマンドとでは対象範囲と有効期間が違うだけで機能的には同じ
・コマンドでの変更はその画面だけに適用される一時設定で、元のタイプ別設定は変更しない
・タイプ別設定を変更しても一時設定になっている画面には反映しない(一時設定未適用の画面には反映)

※完全代用とはいかないかもしれないけど、上記仕様になれば従来のトグル式メニューと挙動は不要(僕には)

ちょうど VxEditor あたり(秀丸も?)がこれと同様の感じになってたような気がします。

同じ.txt拡張子のファイルでも、折り返さないほうが見やすいものと、右端で折り返したほうが見やすいものとがあって、同時に2つ開いているときは別々の設定にして使いたいのです。基本は「折り返さない」設定で使い、右端で折り返したほうが見やすいものに出くわしたらその画面だけ一時的に「右端で折り返す」設定に変更、という具合に。逆に、「右端で折り返す」が基本で「折り返さない」は一時使用という人もいるかもしれませんね。

●補足:一時設定の適用中/未適用の制御方法
コマンドで現在の設定がタイプ別設定と異なる設定に変更されたら一時設定適用中、逆にコマンドでタイプ別設定と同じ設定に変更されたら一時設定未適用、という扱いでOK。同じ画面で対象ファイルが変更されるとき(閉じて無題、閉じて開く)は一時設定未適用にして新たなファイルに対応するタイプ別設定を適用。

2008/5/29 (木) 00:41:46 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5305] Re:仕様について
▼ ryojiさん
レスどうもありがとうございます m(_ _)m

拡大縮小については、Notepad以外は意識して確認しない様にしていたので分かりません (^^;
ただ、パフォーマンスを確保するために全ラインの走査はしていないだろうなぁとは思っていました。

> > 左右に分割すると、左側のウィンドウが右側のウィンドウサイズで折り返されます。
>
> どちらかのビュー幅の桁数に他方の桁数をあわせるので良いと思います。同時スクロールはそのほうが見やすい、とも。EmEditorだと左側のビューの桁数に右側の桁数を合わせているみたいですね。


確かに左右の折り返しが一致していた方が見やすいかもしれませんね。
そもそも同時スクロールの場合、別々の折り返し位置だと制御が難しいかな?

と言う事で、折り返しやスクロールバーの制御については基本的にこの動作のまま行こうと思います。

設定変更処理については、私も文書毎に一時設定できた方が良いかも?と思っていましたので、ryojiさん提案の方法をとってみようと思います。

> 折り返しモードの名称は、
> 「折り返さない」  <--- A相当
> 「指定幅で折り返す」
> 「右端で折り返す」 <--- B相当


> ・各タイプ別設定に3択の「折り返し方法」コンボボックスを1個だけ置く(「折り返し桁数」の上あたり)
> ・メニューコマンドは個別に3つ(折り返さない/指定幅で折り返す/右端で折り返す)を用意する
> ・折り返し方法(3種)はタイプ別設定とコマンドとでは対象範囲と有効期間が違うだけで機能的には同じ
> ・コマンドでの変更はその画面だけに適用される一時設定で、元のタイプ別設定は変更しない
> ・タイプ別設定を変更しても一時設定になっている画面には反映しない(一時設定未適用の画面には反映)


> コマンドで現在の設定がタイプ別設定と異なる設定に変更されたら一時設定適用中、逆にコマンドでタイプ別設定と同じ設定に変更されたら一時設定未適用、という扱いでOK。同じ画面で対象ファイルが変更されるとき(閉じて無題、閉じて開く)は一時設定未適用にして新たなファイルに対応するタイプ別設定を適用。

■その他
・S_WrapWindowWidth()マクロはそのまま。
・「折り返し方法」変更用(一時設定)のマクロは1個+引き数で処理。引き数が無理なら3つ準備する。
・従来のトグル式メニューは折り返し方法が「指定幅で折り返す」の時有効とする(一時設定時を含む)
・折り返し方法のデフォルトは「折り返さない」とする。


※デフォルトを「折り返さない」にして新仕様での使用を促すか、「指定幅で折り返す」にして新しい仕様を隠した状態とするかは悩ましいですが、取りあえず新仕様をデフォルトにしてみようと思います。

ではでは。

2008/5/31 (土) 06:44:32 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5307] 作ってみました
>>dev:5305の仕様で作ってみました。

mytool.bmpを修正したのですが、TortiseSVNのパッチ作成ではbmp部分は当然面倒見れないという事で不完全な差分となってしまったので、今回も自分のwebページに置きました(ダウンロードページ 10-7)

bmpを修正した場合の差分はどのように作成すれば良いのでしょうか?

以下動作について:
タイプ別設定以外で折り返しの設定を変更した場合、一時設定となります。
一時設定状態の時は、複数画面で作業している時にタイプ別設定にて折り返し方法を変更しても、タイプ別設定を呼び出したウィンドウ以外は一時設定のままとなります。
タイプ別設定を呼び出したウィンドウについては強制的にタイプ別設定で選んだ方法とします(上の発言から少し変更)

・メニュー
  「設定」→「テキストの折り返し方法変更」
・ツールバー対応
・ショートカット対応

  Ctrl+Alt+X:折り返しなし
  Ctrl+Alt+S:指定幅で折り返し
  Ctrl+Alt+W:右端で折り返し
・マクロ対応「S_TextWrapMethod()」
  0:折り返しなし
  1:指定幅で折り返し
  2:右端で折り返し


現在の問題
・テキスト最長行の右端に移動しバックスペースで文字を削除するとカーソルがウィンドウの左へ移動するが、ここでスクロールバーのつまみをクリックするとテキスト表示エリアが切り替わりカーソルおよび表示テキストが画面右側へ飛ぶ。
・デバッグモードで実行すると新規に追加したメニューの字が青いんですが、理由が分かりません (^^;


2008/5/31 (土) 14:52:44 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)
[5311] Re:作ってみました
分割ビューの場合なんですが、「右端で折り返す」はアクティブなビューの画面幅が変化するとそれに合わせて変化してますね。左右どちらかに固定した方が扱いやすいような気がします。左上のビュー(インデックス0番)のサイズ変更に合わせるのがソースコード記述上でも楽なんじゃないでしょうか?

2008/5/31 (土) 17:49:25 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5313] Re2:作ってみました
▼ ryojiさん

沢山のご助言ありがとうございます m(_ _)m

> 明示的に折り返しを変更しなくても、OKボタンで閉じただけで強制的に変更されてしまうのがちょっと悲しいかなぁ?
> Windows画面プロパティの[テーマ]欄で「変更されたテーマ」が表示されるように、自画面が一時設定中のときは、折り返し方法に「一時設定適用中」とでも表示しておいて、そこが変更されなければ他画面も一切変更しない、という具合にすることは可能でしょうか?


現在の状態が一時設定なのかどうかが分からないのはあまり良くないですね。
メニューの「テキストの折り返し方法変更」を、一時設定適用中は「折り返し方法(一時設定適用中)」にしてみます。
タイプ別設定の適用の動作については検討してみます。

> 「右端で折り返し」のときに1桁分だけ右余白がつくようになった?
> 「改行ぶら下げ」や「句読点ぶら下げ」を設定しているときは各々で2桁づつ、折り返し記号の1桁をあわせると、おそらく最大5桁は桁オーバーで表示されることになると思います。
> 設定に合わせて余白も自動調整されるといいのですが…


あうっ、全く分かっていませんでした (^^;
1桁分余裕を入れれば良いと思ってた……、修正し直します。

> メニューアイコンの左右上端にゴミが残っていますね。(アイコン追加する際のガイド用に予備部分に点々をつけているのだと思いますが、これは消しておかないと)

こっちは悩んだ挙げ句に残したのですが、上の点はガイドだったんですね。
それと「右端で折り返し」は「現在のウィンドウ幅で折り返し」のアイコンをコピーして使っているので、両方ツールバーに置くと区別できなくなります。
なので「右端で折り返し」のアイコンをほんの少しですが変更します。

> 分割ビューの場合なんですが、「右端で折り返す」はアクティブなビューの画面幅が変化するとそれに合わせて変化してますね。左右どちらかに固定した方が扱いやすいような気がします。左上のビュー(インデックス0番)のサイズ変更に合わせるのがソースコード記述上でも楽なんじゃないでしょうか?

右側で統一されている予定でしたが間違いでした。おっしゃる通り左上が最も楽なので左上のビューに合わせることにします。

ではでは。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]