/ 最近 .rdf 追記 設定 本棚

log[SakuraEditor: 2010-07-30]



20100730()

最終更: 2012-11-01T13:41+0900

[SakuraEditor][SHJS][Ruby] Ruby%リテラルの色分けを修正

説明が面倒なのと誰も知りたくないだろうから適当に備忘のためだけに

  1. まさか %{literal}literal部分で \{\} を使う人間がいるとは思わなかった(違う種類の括弧を使えばいいじゃない開閉の釣り合いがとれてれば同じ種類の括弧でもエスケープ不要だ)
  2. だのに Ruby1.9rake.rbにこんなパターンが……

    %r{[*?\[\{]}
  3. エスケープされた { 2のはの考慮がないから閉じ括弧が足りないとしてファイル末尾まで正規表現として色分けされてしまう
  4. ょちょちょいと .rkw2ァイルにエスケープ文字を追加してサクラエタに対する修正は完了
  5. SHJSlang/sh_ruby.js(自作)への対応も同じですむはずが入力の末尾に達した時点で意図せぬバトラックが発動し閉じ括弧が足りなくても色分けが適当な閉じ括弧で終了してしまう現象に遭遇これは自業自得(20090808p01)なので自分でなんとかせねば間違いが埋没してしまうのはよろしくない
  6. こうした

    %r{余分な開き括弧{。間違いはインタープリタを通す前から目立つように}

2のは Rubyインタープリタに対するエスケープと同時に正規表現パターンとしてのエスケープですよ%r[\[]/\[/ が同じパターンになって%r[[]Rubyのシンタックスエラ/[/ がパターンのコンパイルエラーになるんだから(ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] / ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32])


20100709() Windows Confidential: The Third Rail of Keyboard Shortcuts | TechNet Magazineを読んでの違和感レイモド チェンは Win+Eがどこを開くかの話をしているおれは Win+Eがどこを開くかなんて確かめたことがなくWindows Explorer――フォルダを表示するときに利用される簡易表示ではなくフォルダツリーが付いた正式版――を起動するためのシトカトだと思っていたそんでだから使ってない

最終更: 2014-01-02T18:04+0900

[SakuraEditor][正規表現] 「鬼車と bregonighitEnd(20100531p01)機能が搭載されることを願う他力本願日記

なんてことをこの日記の冒頭に掲げたもんだから自分でやってみた(どういうこと?)

 更新履歴

rev3 (2010-09-05, そのうち書)
(サクラエ) 複数行検索を利用した複数行置換を実装(複数行全置換はまだ似たようなコドだし必要なのは手間だけだけ)
rev2.1 (2011-01-29)
(サクラエ) バグ修正複数行検索モドでマッチ位置をバッファ内インデックスから(,)に変換する際にミスった検索結果が表示されることがあった
rev2 (2010-08-27)
(サクラエ) 複数行検索モド実装(正規表現を使った下検索の50MiB制限あり制限による探索打ち切り・ッチ範囲切り上げの通知な)
トバイナリ+変更点(test_multiine_search.zip)
rev1
() 普通のマッチなしと入力次第でマッチする可能性のあるマッチなしに異なる戻り値を割り当てた
(bregonig) 入力不足のときに BMatchの戻り値を 0(正常終了,ッチなし)にしてエラーメッセージで入力延長によるマッチ成功の可能性を伝えている
(サクラエ) 下検索での入力不足によるマッチ失敗をステータスバーで通知

 bregonig

既存アプリに影響があるので良くないけどbregonigへの暫定的な変更はこう

 regexec_onig(bregonig.cpp)
	} else {
		/* ERROR */
		onig_err_to_bregexp_msg(err_code, NULL, msg);
-		return -1;
+		return err_code == ONIG_MISMATCH_INPUTSHORTAGE ? 0 : -1;
	}

入力が足りなくてマッチしなかったときはエラーメッセージをセトするけど戻り値は負数(エラ)ではなく 0(ッチなし)

 鬼車

鬼車(5.9.2)K.Takata's software : bregonig.dllで手に入る onig-5.9.2-mod.diffを適用したものをさらに変更ッチに失敗したときのエラーの種類で hitendしたかどうかを伝えるゃんと動くのか非常にあやしい代物TODOもいっぱいある

  • 特定のパターンのパターンに向けた最適化を無効にしている(そこまで手が回らな)
  • backward searchに対していつ hitendフラグを立てていいのかわからない(ので未対)
  • "aaaaa\n" という文字列から [a\r\n]+a というパターンを検索したときにバトラックにより "aaaaa" がマッチするわけだがその次の行にも "aaaa.." という文字が続いていた場合は……一応マッチは見つかっているが hitendフラグも立てたい
  • [\w\W\s\S] というようなパターンでメタ文字の登場順([\W\S\w\s]とか)に 依存しておかしな結果になる(もちろん俺のミス原因は解らな)

っぱり鬼車は手に負えないかも

 サクラエ

なんのことはない影響を受ける既存アプリにはサクラエタが含まれている正規表現のコンパイルエラーと入力不足によるマッチなしを区別するためにちっと変更した

 複数行検索モ

一行検索(従来動作)してみてッチが行末まで続いていたり次の行の内容次第でマッチが成功に変わりそうなときはとりあえず二行ぶん検索してみるそれでも状況が同じなら 50MiBのバッファを埋めてから三度目の検索を行う50MiBって大きすぎるだろう大きさの問題だろうかか

実装は CSearchAgent::SearchWord()これって単語検索専用のメソドではなかったのですよ。CGrepAgentもこれを利用したらよかった

ッファの実体は std::wstring文字列を比較するにも wmemcmpなりを使おうとして結局 std::wstring("hoge") == L"hoge" を使ったへたれなのでstr系のライブラリ関数は恐ろしくて毎回すぐに投げ出します。(あれを使いこなせる人は VBPHPも使いこなせると思うんです)

 TODO
  • 上検索
  • 検索語ハイラトの処理がたぶん一行ごとに行われている一行ずつ進みながら複数行を対象に検索を行ってるってわ無駄だし目に見えて遅い
  • ッファ長の制限によりッチ範囲が途中で切られたりマッチの探索が打ち切られたりしても何も言わないのをなんと(制限をなくすかメッセージで)
  • SourceForge.net: Sakura Editor: Detail: 2309002 - 正規表現による複数行検索対(簡易版のコメトを見ると検索語ハイラトのほか「すべて置換にもパッチが必要そうッチを流し読みしてたら BookmarkManager(::MarkSearchWord)までが GrepAgentが持ってたような検索の勝手実装を持ってるらしSearchAgentを使ってよね(いやSearchAgentは当時なかったんだ)
  • (複数行)検索にマッチしたなかでも最初の行がマッチに含まれているか含まれていないかというのは区別する価値があるサクラエタの既存の実装は行指向が強いだろうから「マッチした(ただし先のほうの行で)ということを勘違いしかねない(SearchAgentや選択範囲にはそういう指向がないから運良く複数行検索が自然に実装できただ)
  • (@2011-08-01) [\s\S]*$ というパターン最後の行の末尾までマッチして欲しいのに一行目の改行直前で止まってしまうッチに成功したときの hitEndフラグの扱い

 @2010-07-12 鬼車 for Java

hitEnd()の実装の参考になるか?と思ったけどそうもいかなそう

Revision  74 hitEnd()の実装(但し仕様は満たしていない)。
Revision  85 useAnchoringBounds()及びuseTransparentBounds()に対応。→hitEnd()の実装を修正。
Revision 103 hitEnd()に@Deprecatedを追加。
    /**
     * This method is experimentation phase, and implementation has not been completed yet.
     * @return
     * @deprecated
     */
    @Deprecated
    public boolean hitEnd() {
        return (hasAnchoringBounds ? (range == region.end(0)) : (input.length() == end()));
    }
Matcher.java(rev166)

hasAnchoringBoundsが設定されてる場合は無視するとしてそうでないときは入力の長さとマッチの末尾(end())が一致してることをテトしてるだけに見えるそれって hitEnd()とは違うよね。531日の日記文字列 aa に対してパターン aa を適用したときに hitEnd()falseになった事例を引用した

そうそうこれこそが hitEnd()の使い道 >Check if string is a prefix of a Javascript RegExp - Stack Overflow コメトの最後に見たことのある名前が☺


 @2010-07-12 PCRE

PCRE(現在 ver. 8.10)は戻り読みも再帰も(パターンのコンパイル時の)改行指定オプションもスキャナー的に使うための hitEnd()のような機能(read pcrepartial)およそ欲しいものをすべて備えている悪名高いスタックオーバーフローにも1.スタック使用量を減らす。2.代替メモリ確保関数を使う(汎用ゆえに遅いmalloc/freeか自作)3.pcre_exec()の代わりに pcre_dfa_exec()を使うみたいな各種対策があるらしい


20100622() 支払い完了コナミスタイル先着特典のチームコレクション3キャラセトでないなら通常版でよい

最終更: 2010-06-26T01:41+0900

[SakuraEditor] メニーコマドの点々

https://sourceforge.net/tracker/?func=detail&aid=3002900&group_id=12488&atid=1013762#artifact_comment_4019898

たんなる自己弁護に終始するのでここに書くけど

  • 俺の態度「現状が最高と誤解された部分はっていた予防線の内幕ばらしに過ぎない防衛線に余裕をもたせていたというだけのことで誤解された部分を攻撃材料に使ってはいない
  • ッチ(現状への変更)を基準にして意見したら現状支持が目立つのは当然では?
  • ッチを基準にせず現状「印刷プレビ...の点々を削るようにも意見できたはずだけどそのときはガドライン(間違いようもなくPrintPreviewには付けんなって例示してある)を未読だったのと最初に参考にしたのが WordPadった(「印刷プレビ...になってる)のでできなかった
  • 現状「アトライン解析...」とドウ一覧...の点を削るように意見しなかったのはもう書いたようにトライン解析というのは名前から推測されるように解析を行うのが主目的のコマドというだけでなく関数を一覧にしてその定義にジャンプするためのものだと自分でも思っていたから(むしろそちらが主目的)定義にジャンプするのprimary/intended actionだとするなら表示される解析結果はコマド実行に必要な補足情報をユーザーに選んでもらうためのダイアログとなりまさしく点々を付ける理由になる
  • 現状が基本的に納得できる点々の付け方だったmoca_skrさんのコメトでそれはみくさんの仕事だと紹介されているがそのときの基「操作が確定しないものには"..."を付けるというの...はクリックしただけではコマドが未遂*のものに付いているという自分の理解と違わないのだから
  • 他アプリケーションを見ても...の使い方はかなり恣意的な様です

    だからこそ俺はガドライン(を紹介するコラム)を紹介したしMSのアプリしか参考にしてないし俺判断が入り込まないようにできるだけ緩くガドラインを適用してはみだした部分だけを指摘したつもりだけどそれでも現状最高うぜーと思うならガドラインに従って反論してほしいと思う(もちろんガドライン不採用というのも一つの選択肢として残ってるけど)

別コメトへの反応ダイアログのモーダル/スと点々には関係がないと思う検索ダイアログがモスだとモーダルに比べてダイアログを表示してからでも検索文字列を編集テキトからコピーしてきたりスクロールしてテキトを確認しながら検索条件を練ることができて便利ぐらいの違いしかないのでは


ああいやいやスであることで違う使い道ができるコマドの目的(できれば名前も)が変われば点々の必要性も変わる

  • 「検索...->「検索ドウ表示
  • 「アトライン解析->「アトライン解析結果表示

ールパレトを表示するコマドには点々が付かない(これは既定事項)サクラエタの検索画面はモスだし勝手に閉じないようにも設定できるのでメインドウの横に置いてツールドウとして利用することができるその場「検索...コマ「検索ドウ表示コマドとして振る舞っているーダルだった以前と違い多目的コマドなのだが点々はいかがすべき?という内容だったのかも

こうなると複数あるかもしれないコマドの使途ではなくコマドの名前から主目的を一つ判断して点々の有無を決めることになるだろうしてみる「コマド名『アトライン解析を選んでいるからには点々を付けるべきではないと主張すべきだったかもしれない解析結果がモーダルダイアログに表示されていたときでも同じ(点々を付けるべきではない)

「指定行へジャンプ...のアトライン版に相当するコマド名を採用したときには点々を付けるべきだが……と考えながら思い立「指定行へジャンプ...を実行したらメモ帳のそれより大きいダイアログが表示された(初めて見た)場所をとってるのは PL/SQLのコンパイルエラー行を選択するためのもの先を越されたトライン解析結果を参考に特定の行にジャンプするのが目的ならこういうアプローチもありでは?(っぱり専用画面の魅力には負ける気もする)


 @2010-06-25

トライン解析ってその結果をジャンプだけでなく色分けや補完にも使いたくなるから「アトライン解析っていう名前のコマドは消えてもいい

* 確認のメッセージが表示されるコマドも未遂には違いないけどこの場合は点々をつけないらしい

 適用と適応が使い分けられない人はそもそも二種類の似たものがあるということを知らないんだろうなあapplyadaptだよって見分け方を教える以前の問題個人的には適応より順応を使うし「過剰適応「適応放散みたいな熟語で使うぐらい過剰適応って専門用語なのね[[知らなかった|20100512]]外面と内面の不一致が前提にあるらしい


20100620() ASR @ COM Meets Rubyがアップデトされてる

最終更: 2016-11-30T10:20+0900

[SakuraEditor] 行削除って便利

標準では Ctrl+Shift+E俺は Ctrl+Deleteに割り当てた

使ってるとスクロール位置がずれるのが気になってくる深いトリで GREPすると表示される結果の大部分が定型のパスだけになるから違いを見分けるためにはパス末尾のファイル名とマッチした行が見えるように右にスクロールする必要があるそして目当てのものではない行を Ctrl+Deleteで削除していくんだが行削除後にキャレトの行頭からの桁位置は保たれてるんだけどスクロール位置がずれる画面の真ん中にいたと思ったマリオが次の瞬間背景とともに右端に移動していたようなもんだこれがうっとうしい

削除前に一瞬行全体が選択されるように見えるのでこのときにスクロール位置が変わってしまうのかと思「行選択->選択範囲削除の流れを変えて範囲選択に依存しない削除方法を採用したのがこれ>improve_delete_line.patch(5.2KiB)

実際は削除に使っている ReplaceData_CEditView()というコマドがキャレトの位置調整を行っていたのが原因だったから削除方法は選択範囲の削除のままでもよかったかもともあれ行全体を選択する操作がちらつくのとスクロール位置がずれるのがなくなった(ReplaceData_CEditView()がやっているように再描画の必要な範囲を求めたりせずビー全体を再描画してるから環境によっては画面全体がちらつく可能性がなきにしもあら「画面キッシュを使うとか DWMがなんとかしてくれることに期待どうせ 1画面50行のうち削除された行より下は元からすべて再描画対象だし)


 @2010-06-21 タブやタトルバーに変更フラグが表示されるように修正した(rev1.1)

improve_delete_line.rev1_1.patch(5.5KiB)

フラグ自体は立ってたけど描画が行われていなかったというミス


20100610() iPadがインターネトごしに DLNAクライアトになれたら迷わず買う(これって買わない宣言) 読書端末の本命 Sony Readerの年内発売を待っている

最終更: 2012-10-27T00:23+0900

[SakuraEditor] サクラエタの正規表現キーワドを SHJS相当にしたい(その)

その一(20090808p03)がだらだら長くなったのでいったん切ってここに続ける

 @2010-06-10 バグ発見

ひどい/*を入力して後ろの行がコメト色一色になったとするつづけ*/を入力しても後ろの行がコメト色のままたぶんこれが関係する

行をまたぐ色分けに問題があってたとえば一画面に収まらない長大な複数行文字列があったとして何度も上下にスクロールしたり改行を入力したりするだけで色分けが変わってしまっていた

log[2009-08-08-p03] サクラエタの正規表現キーワドを SHJS相当にしたい @2010-04-14 バグ修正

本当にそうなら泥縄式バグ潰し無間地獄へ突入ですな消火行為が点火に直結した効率のいいマッチポンプだもん


まさしく > たぶんこれが関係する

そのときの変更にこんなコメトが添えられているのを発見したIsInsideKeyword()から呼ばれたときは精算したらダメっぽいのでコメトアトして様子を見る様子見の結果はダメでしたさあどうしよう


別の場所で不必要にキッシュを無効化している部分を厳密に処理したら直ったっぽいッシュの有無で結果が変わるはずないんだけど……(さらなる追求が必要でもそれは問題が見つかってからにす)


 @2010-06-13「キッシュの有無で結果が変わるはずないんだけど……

変わりうる一行の色分けは一時(いちどき)他の行の色分けを挟んだりせずに終わらせなければいけない正規表現キーワドは各行の行頭がどういう状態か(コメトの中か?とか)を覚えているキッシュの他にある行を中間まで処理したマッチング結果を持っており先ほどはこれをキッシュと呼んでいたそいつは次の IsStartOfKeyword()呼び出しを待っている宙ぶらりんな状態期待していた呼び出しがくる前にクリアされたら結果がおかしくなるッチングを中間で止めざるをえないのは他の色分けに先食いされた文字をマッチに利用してしまわないように


20100609() メインメニーを整理しているとき「移動履: 次へ「移動履: 前へを見つけたこれまでってきたい場所へはブックマークをセトしていたがっと行って戻るだけなら移動履歴の方が解除の手間がないぶんいいAlt+(戻る)Alt+(進む)(矩形選択)ーソル左移動などに使われていたので Ctrl+Shift+ZCtrl+Shift+Yに割り当てた

最終更: 2011-01-02T16:45+0900

[SakuraEditor] サクラエ温故知新

SAKURA Development BBS (ANSI)のログが 10ージ分しか閲覧できなくて残念な思いをしていた検索対象のリトに古い年月が存在していたり個別リンクが機能していたりするんだから古いログが保存されているのは間違いないんだけどCyclamen(掲示板CGI)に関して言えば記法のヘルプを見つけることもソースを見て記法を確認することもできないそれはおいといて

過去ログを見つけた>http://groups.yahoo.co.jp/group/sakura-editor/files/User/bbs-log/

Subversionが最初からあった世代には考えられない開発スタイルがそこに!差分や変更したファイルを共有エリアに置いて掲示板で報告大きな変更をした人が他の人の小さな変更をマージして最新版を管理したりともあれお宝ざくざくなので日曜日から喜々として読み進めている次第(ログが 20079月で切れてるのが残)

S:27,*,01/02/11,10:49,,
T:横スクロール時の動作
N:げんた
M:
現在のこのエディタはWM_HSCROLLが来たら横スクロール量を決定して画面全体を書き直す動作を行います。もし、画面全体を書き直す代わりに新規部分のみを書き直せば高速化すると思われるかも知れませんがそうはいきません。

なぜなら、このエディタは色分け情報をメモリ上に保持していないため、描画の都度行の先頭から調べて色を決定しているからです。その際キーワードの検索も行います。たぶん、これがかなりの処理を必要としているのだと思います。

横スクロール速度を劇的に改善しようと思ったら色分けを予め行ってその情報をメモリに保持するようにしないと難しいのではないでしょうか。

gdippを使っていると無視できないほどに強調されるので横スクロールが遅いことには気付いていたこれが書かれた当時のサクラエ(という名前ではまだないが)の遅さは今の PCスペックでは再現できないかもしれないけど根は昔から存在していたよう

S:114,*,01/03/02, 2:32,,
T:コントロールプロセスの起動方法
N:げんた
E:genta@i.am
M:
外部エディタを監視するプログラムからテキストエディタを使うとき、エディタが常駐していないと起動したプロセスは管理プロセスとなってエディタ画面は別プロセスで動作するため、編集終了の検出が正しく行えない場合があります。

自分が管理プロセスになるのではなく管理プロセスを別に起動して起動完了まで待機するような作りにできればこの問題が解決できるなぁと思いました。

タブモ(実装者は別の人)であっても 1ドキュメ1プロセスだから Subversionのコミトメッセージをサクラエタで編集できるんだけどそもそもこういうことが考慮されていたからこそできるのだと確認

S:1446,1440,02/02/01,22:27,,
T:Re2:正規表現置換の振舞い
N:げんた
M:
>..*\n$ でやってみたら削除できましたけど…???
よく見たら自分で何気なく変えたところだった.
本当に申し訳ない.
今は普通に動いています.

ただ,BREGEXPのせいなのか,^.*$ には先頭から改行コード \r\n の\rの部分までがヒットして\nが残ります.
^.*\n$ だと行全体にヒット.

「改行(.$の動作に影響する)= LF(0x0A)の指摘がこのとき既にセルフリンク>20090922p01

S:1475,1474,02/02/05, 0:47,,
T:Re4: タイプ別設定に外部ヘルプと外部HTMLヘルプ新設パッチ
N:げんた
M:
ちょっと考え直してみました.

▼初期の私のアイディア
・CShareDataの役割=単にDLL Sharedを得るためのクラス.

・タイプ別設定を共有メモリから追い出す.
そのために,タイプ別設定のアクセスをCEditDoc::GetDocumentAttributeに集約.
追い出した後の実装はCEditDoc,またはCEditDocに含まれる新規クラスで行うつもりだった.

共有メモリからタイプ別設定を追い出したい理由は以下の通り.
* タイプ別設定が足りなくなり,既に2回最大値を拡張している.
* タイプ別設定の領域を予め共有メモリに確保しなくてはならないので,上限の撤廃ができない.
* 初回起動時に使うかわからない領域全てを初期化するのは無駄ではないか.

追い出しのアイディア
* タイプ別設定はそれぞれ外部ファイルに用意する.
* 設定ファイルは必要に応じて読み込まれる.
* 変更は現状通りダイアログボックスで行う.
* 変更されたらすぐにファイルに保存し,設定変更Broadcastメッセージを投げる.
* Broadcastを受け取ったら該当タイプを使用しているか確認.
* 使用していたらファイルから再読込し,設定を更新する.

>各種設定が共通設定だろうが、タイプ別設定だろうが、気にせずとりあえずCSettingMediatorに問い合わせたり、設定を依頼するだけでよくなったら便利だなぁと思っています。
なるほど.これは良いと思います.最終的には設定情報がどこに格納されているのかも意識する必要が無くなるので,これは私のアイディアと矛盾しません.CEditDoc::GetDocumentAttributeで取得するのをDLLSHAREからCSettingMediator経由に変更すればタイプ別設定のカプセル化の場所が移動します.

私の初期アイディアと組み合わせると,追い出した後の実装というのをCSettingMediatorに依頼することになるでしょう.タイプ一覧の設定,指定タイプの取得,更新などファイルへの書き出し・読み込みタイミングもCSettingMediatorが管理すれば良いような気がします.

上記内容を納得した上で私が確認した限りでは特に問題はないように思います.

---
実装に入る前に設計に対する議論を行うことは有意義だと思います.これまでは議論する相手がいなかったので...(;_;)

タイプ別設定を共有メモリから追い出すアイアが既に出ていた

設定の場所を隠蔽するクラスも構想されているそれのメリトとして自分が考えているのは

  1. 実行ファイルに埋め込まれたデフトのタイプ別設定
  2. 基本設定
  3. 拡張子に応じたタイプ別設定

32との差分とすることで基本的な設定の共通化(基本設定による)を図りつつ設定の読み出しを一本化できること

S:1606,*,02/02/16, 2:26,,
T:ssrc_2002-02-11_p1
N:hor
M:
ssrc_2002-02-11 からの変更箇所です。ご参考まで。
(省略)
□その他のその他
    ・[Ctrl+Home]or[Ctrl+End]後に[Down]or[Up]したときの挙動を見直し・・・以下変更個所
       1.矩形選択中に[Ctrl+Home]or[Ctrl+End]して[Down]or[Up]したとき以外は普通にカーソル移動
       2.選択を解除したあとは普通にカーソル移動
(省略)

ァイルの先頭へ移動するコマ(Ctrl+Home)「通常は(0, 0)へ移動ックス選択中は(GetCaret().GetCaretLayoutPos().GetX2(), 0)へ移動というコメト付きで故意におかしな動作をするのはこのへんが理由だったの(細かいことを言うとこのときの実装は Ctrl+Home00桁に移動した後↓で 1(Ctrl+Home前の)X桁に移動するというものでいまの実装はすこし後にでてくる)ァイルの先頭に移動という一つの名前に異なる機能を実装するのはやめて欲しい利用者視点「使える動作なんだろうけど自分なら Alt+Ctrl+Home(矩形選択)ァイルの先頭に移動(※未実装)に割り当てるなどして対処する

S:1759,*,02/03/23,11:01,,
T:バックアップごみ箱問題
N:みく
M:
ネットワークドライブまたはリムーバブルドライブのファイルを
ごみ箱に放り込むとOSの仕様により消滅してしまいます。
バックアップしたつもりがされてないという現象を避けるため、
これらのドライブの場合はごみ箱に放り込まないようにしました。

次回版にでも取り込んでください。


どうしてもごみ箱に放り込みたい場合は、
「指定のフォルダに作成する」でフォルダにローカルドライブのフォルダを
指定し、さらに「バックアップをごみ箱に放り込む」を指定してください。
(指定のフォルダにごみ箱を直接指定することはできません)

最近見かけたリムーバブルメア上のファイルのバックアップをゴミ箱に放り込めない問題が 2002年に指摘されている

自分はバックアップは Ctrl+Sに割り当てた JScriptマクロで Subversionに保存してる差分バックアップでありながら過去の版を ViewVCで簡単に見られるのが利点マクロでやってることのエッセスは以下の通り

>Editor.FileSave();
>svn up "working copy"
>copy /Y /B "filepath" "working copy/filename" );
>svn add "working copy/filename"
>svn commit "working copy/filename" -m "filepath" --force-log --non-interactive'

たかだかテキトファイルなので動画より小さくーキングコピーもリポトリも数百MiBにおさまってるNTFSの圧縮属性を付けたらさらに三分の一にもなるし

S:1980,*,02/04/30, 1:41,,
T:半角スペース表示
N:KK
M:
KKです。
一般掲示板の方で要望のあった
「半角スペースの表示を追加する」
パッチを書いてみました。04-27版へのパッチです。
DispSpc04-27.zip
(省略)
S:1982,1980,02/04/30, 2:12,,
T:Re:半角スペース表示
N:げんた
M:
小文字のoの下半分だけを使うという発想が何とも独創的 (^^)

いまの Unicode版も同じ実装気付かなかった (^^) ちなみにデフトの色は灰色だけどこれをテキトと同じ色にすると周りと同じ色で描画されます(コメト中の空白とかが)

空白記号類は特に明示指定した部分以外はなるべく周辺の指定に合わせるようにしてみた // 2009.05.30 ryoji

sakura/trunk2/view/figures/CFigureStrategy.cpp

ースを見てないと気づかなかった

S:2237,*,02/07/03,12:22,,
T:クラス、インターフェイスの整理
N:ボロぞうきん
M:
(省略)
1&2 1行の文字数が3万文字を超えてくると極端に遅くなるので、
行バッファを簡易gapped buffer方式に変更したかったけど、
内部のポインタを書き換え目的に使っている場所があり、
単純にconst化出来なかった。
(省略)

でましたgapped buffer

S:2278,*,02/08/23,20:29,,
T:正規表現ライブラリ
N:みく
M:
比較的新しそうな正規表現ライブラリとして、
こんなのもあるみたいです。

http://www.fides.dti.ne.jp/~oka-t/libraries.html
S:2959,*,03/07/21, 3:35,,
T:正規表現ライブラリの不具合
N:げんた
M:
http://www.fides.dti.ne.jp/~oka-t/history-2001.html
でPerlの正規表現の不具合について触れられていた.

試してみると確かに
::1234::5678901234567890::::1234567890::
888:
に対して
^([0-9]+|::)*$
で検索するとフリーズする.(よい子は真似をしないでください)

Perl 5.8ではフリーズしなかった.

リンク先が同じなんちってではなく真っ当な雰囲気がするなあと思いながらそのサトをうろうろしていたら未訪問のはずのリンクが何カ所も閲覧済みの色になっていることに気付いた良いものは埋もれてしまわないのだ(忘れられるのは読み手()の問題)

S:2562,2559,03/02/11, 1:19,,
T:Re: マルチユーザモード(案)
N:もか
M:
▼ みくさん
>実行ファイル名を sakuram.exe とかに改名するとマルチユーザモードになり、
実行ファイル名を 任意の文字列1.exe などにすると文字コードがその数字の文字コード(この場合EUC-JPに)固定されるという機能があるから
(省略)

なんぞそれ>「実行ファイル名を 任意の文字列1.exe などにすると

S:3140,*,03/09/15,11:53,,
T:色分けHTML出力
N:wmlhq
M:
強調キーワードなどを使って色分けしたソースコードをsakuraでもHTML/XMLで出力できたら、便利だろうな。「形式を指定してコピー(special copy)」で実装するとか。

<font size=10><pre>//<nobr>comment</nobr>
<font color="#576447">int</font> func();
</pre></font>

これは面白そうもちろんフーマトは

<style>
/*<![CDATA[*/
  .comment { color: green; background-color: white; font-style: oblique; }
/*]]>*/
</style>
<span class="comment">//コメント</span>

にするけどHTML直打ちに近いブログに投稿する以外に正規表現キーワドによる色分けのデバッグにも使える(思い通りの結果にならないときに見た目では判断できない違いが classによって区別でき)

それにしてもこの wmlhq(自称)という人は……掲示板の閲覧者はする~かが試されている() 関わりたくはないけど知識とエネルギーは無視できないものがあるうまく操縦できる人がいればいいのかな上から目線で仕切屋でイラッとする年寄り言葉を使ったりでこの人に指導される新人に同情するものの悔しいかなッセージの国際化の手段に STRINGTABLE, MESSAGETABLE, gettextの三つを挙げたり入力補完の高速化に bsearch,ッシ, dartsの三つを挙げたりできないもんねえっと前に WEB+DB PRESSdartsっぽいのは見かけてたけどもわからなくて検索したし

S:3300,3299,03/11/07,21:31,,
T:BREGEXP.DLL
N:かろと
E:karoto@infoseek.jp
M:
▼ もかさん
> Perl Artistic License
> "Freely Available" 内の  2.「バグ修正」か「移植」のための修正
> に該当しそうですが、どうでしょうか?

オリジナルのPerlの関数には、行頭から文字列を渡せるようになっていて、
BMatchEx()で、その引数にも値を渡せるようにしただけなので、
変更そのものは簡単なことで、「移植」なんて言うのもおこがましい程度です。


> 微妙に気になるのは、V1.0(VB未対応)で、Exportしてる関数が少ないのと、for SAKURA になってる... 

V1.0とV1.1の違いって、VB対応だったんですね・・知りませんでした。
Linux版のソースをもってきた関係上、VB対応部分は入ってませんでした。
というわけで、ExportしているVB用関数もありません。
Linuxソースなので、リソース関連のファイルは同梱されてなかったので、適当に作り、
本家のBREGEXPと異なることがわかりやすいように、「for SAKURA」ってのを入れました。(笑)
まずいでしょうか?

> #いい感じだと欲が出てくるもので、
> #ついでに改行コード周りもDLL側でやってくれないかなぁ(実はやってる?)

実は、同じ事を考えて、内部の以前Perlの関数眺めたのですが、改行は1文字(\n)だと
決めて処理している箇所があり、難しそうだなぁと思いました。

> #UTF-16にも対応してくれないかなぁ

ははは・・・さすがに対応済みのDLLを持ってきた方が早いかと・・

「改行は1文字(\n)」が「改行は1文字(\rの後ろではない\n, \r)になるだけでも十分ではないのかなあ

  • lf_and_cr_as_eol.rev2.patch(2.4KiB)
  • sakura(r1764_without_bregexp_trick).zip(497KiB, dllの違いをテトするために、検索パターンの置き換トリックを行わないように変更したも)
  • $が行文字列末尾にもマッチする関係ですべて置換が置換しすぎる(上の zipァイル内の sakrua.exeに限った話)BREGEXPは正しい処理をしているのでsakura.exeでの対処はやはり必要になる($ が行文字列末尾にマッチしたのは無視すべきだが空パターン (?:) が改行文字の後ろにマッチしたのは無視すべきでない果たして両者を区別できるのか)
  • 調子に乗って hitEnd()に相当する機能を付けたら複数行検索も

    1. 基本的に一行検索
    2. 改行文字の後ろまでマッチが続いていたりhitEnd()が真ならバッファを確保して複数行検索モ

    みたいにしてできるかも複数行検索モドの実装が面倒くさい上に BREGEXP for SAKURA限定機能なので C/Pは悪い

  • BREGEXP for SAKURAのマッチ仕様変更はこんなんで検出できる

    bool dot_matches_cr() // falseになっていることを確認する。テストは sフラグOFFで行われる。
    {
    	BREGEXP* rxp = NULL;
    	const char* const szCR = "\r";
    	char szErrorMsg[80] = "";
    	const bool retval = 0 < BMatch("/./", szCR, szCR + 1, &rxp, szErrorMsg);
    	if(rxp != NULL) {
    		BRegfree(rxp);
    	}
    	return retval;
    }
    bool dollar_matches_before_cr() // trueになっていることを確認する。テストは mフラグONで行われる。
    {
    	BREGEXP* rxp = NULL;
    	const char* const szCR = "\r";
    	char szErrorMsg[80] = "";
    	const bool retval = 0 < BMatch("/$/m", szCR, szCR + 1, &rxp, szErrorMsg) && rxp->startp[0] == szCR;
    	if(rxp != NULL) {
    		BRegfree(rxp);
    	}
    	return retval;
    }

正規表現に関連してログからこんな URLも見つけ出してきた

COOLURLは変わらないということをリンク切れを発見するたびに思い出す。この二つの URLはもちろん今も有効

S:3521,*,04/04/03, 0:28,,
T:有効なカーソル位置の謎
N:もか
M:
あと、有効なカーソル位置ってどの範囲なのか、いまいちわかりません。
私が認識している動作は、フリーカーソルモードか、矩形選択中・終了後の位置としてEOFにまつわる位置だけに絞っても、
1. [EOF]だけの行(データの終端は改行)は行頭以外却下。
2. [EOF]だけのレイアウト行(データの終端は普通の文字)は行頭以外却下。
 不思議なのは、レイアウト折り返し時はインデントされないし、カーソル座標表示も変かも。。
3. 普通の文字の後ろについた[EOF]より後ろ(正確には右側かつウィンドウ折り返し線より左側)は有効。
で次の行(EOFマークの次の行だから存在していない行)は不正。

あと、矩形選択で、折り返し位置にカーソルを移動しようとしても、行頭に飛ばされてしまって、最後の1文字が選択できません。
ただし、EOFの表示のみ折り返される場合は、選択できてしまいます。
選択できるようにすると、今度は、論理座標との双方向変換の1対1対応が保証されなくなるので、たぶんこまります。

後半はこれ(20091026p01)関連なんかもうほとんどの問題は既出だという気がしてきたその都度解決できていれば出てこないはずなのに……

S:3752,*,04/09/27,17:34,,
T:改行コードが食い違う
N:もか
M:
上書き保存したファイルとエディタが保持しているデータで、改行コードが異なることがあります。

1. 名前をつけて保存で、改行コードを変換する指定で保存
2. リロードされた後、入力改行コード指定により、1.で指定した改行コード以外を選択
3. 改行を入力
4. 上書き保存。このとき、2.で指定された改行コードで保存される
この時点でリロードされないので、保存したファイルと、エディタ上のデータで食い違いが発生します。

同様に、Shift_JIS以外では、ファイルとエディタ上のデータで、実際には異なる(=リロードするとデータが変わる)ことがありますが、
こちらは下手にリロードすると、保存時に文字化けした場合は修正するチャンスを失うことになります。
S:3753,3752,04/10/02,12:21,,
T:Re: 改行コードが食い違う
N:げんた
M:
現象を確認しました.
要するに名前を付けて保存で指定したコード指定がその後の上書き保存でも生きているのが問題というわけですよね.そもそも保存時のコード指定がメンバ変数としてずっと保持されているのが不思議な気がします.
でも改行コードなんか気にしないで,他の文書からコピーしたものを保存したときに常にコードが統一されて欲しいという人もいるかもしれない.かといって保存の都度reloadするのは無駄ですし.

・保存時のコード指定は保存しない
・毎回コードを指定して上書きしたい人はマクロで対応してもらう
というのでいいように思います.

これなんかもすでに自分で遭遇してる現象なんだけどっと前に確認されていたってわけだ

他にも「アトライン解析のプラグイン化という語がログのごく初期に登場していたり正規表現ライブラリが最初は jre32.dllであってBREGEXP.DLLへは GPL化を目指したときに移行した*のだとかsakura_core.dll(なにそれ?)だとか正規表現のパターン区切りとして //k が入力必須で面倒だったり、//k を自動付加するようにしてみたけどまだ \ にエスケープが必要だから @% などパターン中に使われていない文字をセパレータにしてみたらどうかとか(いつ 0xFFに決まったんだろう?)意外な発見(とどこかで見たような問題が)がざっくざく

* BREGEXPBBASP21Bと同じ BABABのはずでBASP21WSHから利用できるオトメーションオブジトとしてJScript(最初に出会った記念すべきコンピータ言語)をいじり始めた当時から有名だった(「それBASP21でできるよ)からBREGEXP"以前"が存在するとは思ってもいなかった

本日のツッコミ(2) ッコミを入れる

FILEここにもありますよ http://sakura.qp.land.to/?OtherDoc%2FIncmLogsto..

ds14050おお20084月まである楽しみが増えました情報ありがとうございます。


20100129() コアスケ に一致する日本語のページ 1 件中 1 - 1 件目 (0.05) 1件! 書いたのは俺だけど最初に検索したのは誰?

最終更: 2011-01-12T18:23+0900

[SakuraEditor] SendMessage()はささります。

CShareData::IsPathOpened()起動している他のエタプロセスに対して SendMessage()でメッセージを投げるァイルを重複してオープンする代わりにすでに開いているプロセスを前面に出すという処理で使われているのだが一つでもビジーだったりハングアップしてるプロセスがあると SendMessage()が返らないのでっかくプロセスが分かれているのに新しくファイルを開くことができない

長々と色分けをしてるのがビジーの原因なんだけどね

SendMessage()の怖さを語っていたのはたし[大型] Raymond ChenWindowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング!】 アスキ対象が絞れてないのか玉石混淆という印象だけど侮れない知識も埋もれている。任意のドウを左右に並べる方法これはどうでもいい方の知識ダイアログプロシージャが戻り値を返す方法とかは……いまどき Win32 SDKプログラミングもない古参ユーザーのためのあるあるネタがいっぱいです。


20091126() 無性に DR-Z400Sに乗りたい

最終更: 2011-01-02T16:57+0900

[SakuraEditor] CViewCommander::Command_SEARCH_PREV()

	/* 現在位置より前の位置を検索する */
	bool found = false;
	CLogicRange matchLogicRange = CLogicRange( CLogicPoint( -1, -1 ), CLogicPoint( -1, -1 ) );
	CLayoutRange matchLayoutRange = CLayoutRange( CLayoutPoint( -1, -1 ), CLayoutPoint( -1, -1 ) );
	const SearchPos originalSearchPos = searchPos;
	if( pLayout ) {
		bool retried = false; ///< 末尾から再検索したかどうか。
		for(;;) {
			found = 0 != GetDocument()->m_cLayoutMgr.SearchWord(
				searchPos.y, searchPos.x, // 検索開始位置
				m_pCommanderView->m_szCurSrchKey,							// 検索条件
				SEARCH_BACKWARD,						// 0==前方検索 1==後方検索
				m_pCommanderView->m_sCurSearchOption,						// 検索オプション
				&matchLayoutRange,								// マッチレイアウト範囲
				&m_pCommanderView->m_CurRegexp							// 正規表現コンパイルデータ
			);
			if( retried ) {
				break;
			}
			if( ! found && GetDllShareData().m_Common.m_sSearch.m_bSearchAll ) {
				// From Here 2002.01.26 hor 見つからなかったので末尾から再検索する。
				searchPos.y = GetDocument()->m_cLayoutMgr.GetLineCount() - 1;
				searchPos.x = static_cast<Int>( MAXLINEKETAS ); // とにかく大きければよい。
				retried = true;
				continue;
			}
			if( found ) {
				this->GetDocument()->m_cLayoutMgr.LayoutToLogic( matchLayoutRange, &matchLogicRange );

				// 検索開始位置での幅0マッチはなかったことにして一つ前から探す。
				if( matchLayoutRange.GetFrom() == matchLayoutRange.GetTo()
				   && matchLayoutRange.GetFrom().GetY2() == originalSearchPos.y
				   && matchLogicRange.GetFrom().GetX2() == originalSearchPos.x
				  ) {
					searchPos.x -= 1;
					found = false;
					continue;
				}
			}
			break;
		}
	}

20090808p03@2009-10-19に書いた*結果の一部が上のコ@2009-10-20でちらりと書いた現在の選択範囲が幅0かどうかで検索のその場足踏み対策を行っていたのは不十分だということがわかったので対処するために CViewCommander::Command_SEARCH_NEXT()を同じように書き換えられたら楽だけどトがないからそれは(私家版でしか)できないんだよね

gotoを使っていたりbRedobFlag1という名前の変数があるコドをいじるのは嫌だなあ(だからこそ Command_SEARCH_PREV()は全面書き直しにな)

まあbRedoはわからなくもないいや使われている部分を確認しないとわからないのだがretriedって他人にとっては似たり寄ったりかもしれないので許容しよう(ただしスコープが狭まったことで使用部分の確認がしやすいのは明らかに前進している)書き換えたっていうけどープだって単に飼い馴らされた gotoゃないかと言われるかもしれないしかも上の例では繰り返しを前提としていない(一回で抜けるのが通常パスだ)から意図が不明確になったおそれもあるでもこの関数で使われていたもう一つの gotoのように変数が初期化されない云々のエラーが出るために変数宣言を関数の頭に置くことを要求してしまうそんな使い方はできないことが担保されている(goto end_of_func; のことです)

上のコャレトが行頭にあるときのことを考慮してない(searchPos.x -= 1; の部分)一応問題なく機能してるみたいだけど


 @2009-12-01

もうひとつ問題が見つかって現状が問題ありありならばとザックリ Command_SEARCH_PREV()Command_SEARCH_NEXT()を書き直したどうせ問題続出するんだろうなあとこっそりアップロ

CViewSelectの修正がないとッチの始点と選択開始点が重なったとき(選択範囲が空になるとき)に選択ロックが外れてしまう


 @2009-12-02

 差分のバグ修正1: 対象が幅0の置換が一つ飛ばしになる件

範囲選択中でないときは幅0ッチなどによる検索のやり直しをしないようにした範囲選択中かどうかというのは条件として不十分なんだけどすくなくとも検索前と後で状態が変わるということはいえるCommand_REPLACE()が事前に選択をキャンセルしてくれているのでとりあえずは置換が一つ飛ばしになることがなくなる

 差分のバグ修正2: 検索の再試行位置が元と異なっていた件

aaaaaaa...というテキトをF6による選択ロックを利用して上方向に選択中aaaを下検索する3文字ずつ選択範囲が縮小していくはずのところが1文字ずつしか縮んでいなかったのを元通りにした

 日記のバグ修正

) SEARCH_PREV, SEARCH_NEXT

) Command_SEARCH_PREV, Command_SEARCH_NEXT


 @2009-12-03

 差分のバグ修正3: すべて置換が無限に続く件

すべて置換の無限置換対策としm_pCommanderView->GetDrawSwitch() // 全て置換の実行中じゃないという条件(見落としていた)を元のソースからコピってきた

 差分のバグ修正4: マウスクリック0文字選択されたという旨のメッセージが表示される件

CViewSelectの変更がステータスバーメッセージの不要な表示につながっていたッセージ表示部にそういうチックをさせてーソル位置による選択範囲変更で幅0選択を可能にする(昨日の修正)部分は残したいけど影響範囲を延々たたいていくようなことになったらいやなので CViewSelectの変更は取り消し

F6でロックしてキャレトを動かしまた元の位置にもどす。この状態でダイアログを出して検索をすると選択範囲の拡大縮小ではなくッチ結果が選択されてしまうこんなことが起こるならやはり昨日の修正を温存したくなる不思議なのは ANSI版も同じ挙動だったのだがUNICODE版ではきちんと選択範囲の拡大縮小になっていたこと<<< どうや「カーソル位置の単語文字列をデフトの検索文字列にするの設定が違っていただけみたい

CViewSelect.IsTextSelected()には0文字選択を含むのか含まないのかはっきりしてほしい定義からは 0文字選択を含んでいるがIsTextSelecting()というものの存在からは意図としては 0文字選択を含まないようにもとれるなんにせよ CViewSelect.ChangeSelectAreaByCurrentCursorTEST()が幅0選択を特別扱いして選択解除するのは意図がわからないし仮に目的があったとしても不適切あるいは不完全な処置だろうと思う問題は選択解除によって IsTextSelected()trueから falseに変わることでIsTextSelected()は本当にあちこちから呼ばれているので ChangeSelectAreaByCurrentCursorTEST()の変更は影響範囲が広すぎる(ステータスバーメッセージもそのひと)

そもそもkeepCurrentSelectionの条件に CViewSelect.IsTextSelected()は不要に思えるのでこれを外すことで対処元のソースをできるだけ尊重するつもりでこうしてあったんだけど

 差分のバグ修正5: 「末尾から再検索しましたが表示されない件

「末尾から再検索しましたが表示されないのは条件「先頭から再検索しましたと同じになっていたからでした(不等号が逆向)

 その他

CViewSelect.cppの修正は幅0なら何もしないのではなく () elsepSelect->Set(ptCaretPos);と同じことをしていたつもりです。m_nLastSelectedByteLen = 0; // 前回選択時の選択バト数の扱い方がわかっていないのですが選択解除もしていないの「前回選択時の~というのはあたらないのではないかと

コメトで指摘されて rev2で導入した sel.IsTextSelected()sel.IsTextSelecting()に変更したのはCViewSelectの変更を取り消したことによって検索結果による選択範囲の拡大(縮小)の結果が幅0になったときに sel.IsTextSelected()falseになってしまうことへの対策(選択開始点から先へ検索が進まなくなってしまうの)


本の: シンタックスシュガーとしてのlambdaの解説

ifの条件文に &&||3つも 4つも連なってくると 1つの Predicateにまとめてしまって名前を付けたくもなるでも struct{ bool operator()() const {...} } IsHoge; と書くだけでも面倒なのにスコープが断絶してしまうために判断に必要な変数にアクセスするためにはコトラクタで参照を受け取ってメンバ変数に保存しなければならないトラクタを書くために型名も付けなければならないもうねってられないどうせコンパイラの最適化で消えてしまうコドを長々と書くのは無駄消えなければもっと無駄はやく lambda


 @2010-03-31: 応急パッチ

http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&revision=1724

とにかく無限ループで強制終了しかできなくなるのは良くない

* #0の上検索がいつまでもその場足踏みしてないで上へ進むように修正 #ャレトより前の0の行頭マッチがハイラトできていなかったのを修正(あんまりやりにくいので CViewCommander::Command_SEARCH_PREV()から gotoを取り除いて不必要に選択範囲を保存するのをやめた)

 CViewSelect.IsTextSelected() -> return CLayoutRange m_sSelect.IsValid() -> return CLayoutPoint m_ptFrom.BothNatural() && CLayoutPoint m_ptTo.BothNatural()BothNaturalという名前だけど実際は xyが共に 0以上かどうかをテトしている選択範囲の始点と終点の X,Y座標がすべて 0以上のとき CViewSelect.IsTextSelected()trueを返す。

本日のツッコミ(8) ッコミを入れる

ななしfix_searchword_selection_with_selectinglock_on 置換前:$ 置換..

ななしてけと CViewCommander.cpp 【追加】 3116: const bool wasSelected..

ななし 3158: (sel.IsTextSelected() && matchLayoutRange.GetF..

ななしrev2 「先頭(末尾)から再検索するONにしているのに 末尾から再検索して「▲末尾から再検索しました ..

なな「選択幅ゼロは自明なので一切表示しなくていいと思います。

ななしCViewSelect.cppの修正は 幅0なら何もしないのではなく 以下のようにしたほうが良くないですか? ..

ななしrev2す。 abc というテキトで 置換前:abc 置換後:xyz 先頭(末尾)から再検索する:ON 置換..

ななし※同じく置換後を abcxyz置換対象を[選択文字(0)]としても起きた


20091120() DDセイバーオルタはやばい限定販売でよかったね

最終更: 2010-04-08T22:28+0900

[SHJS][SakuraEditor] 色分けにこんな機能があると便利

参照(説明の丸投げ)> タの Lex 周り - miau's blog?

SHJSと萌共通の泣き所そもそも論を言えば入力に対応した stateを一つ一つ定義していけば対応できなくもないしRubyの括弧を使った %記法%r(pattern)flag のようなものでは括弧に分類される文字種が 4つしかなかったために実際そうしたのだが非英数1ト文字や識別子が使えるとなると状態数があっという間にふくれあがってしまう

SHJSの場合はJavaScriptであることと eval()で評価されることを利用してネイブの RegExpオブジトの代わりに execメソドと lastIndexプロパを定義したオブジトを登録することで抜け道を用意できるように感じたがどんな形で特定のキャプチャを参照するのか決めかねた

今日試しにダウンロドしてみた K2Editorではヒドキュメトの色分けが可能なようだ配布パッケージに含まれる Ruby.txtK2Editor.chmによると書式はこう

・<<(["'`]?)(\w+)\1 .... ^$2$
    ヒアドキュメント1。後ろのディスクリプターは行内に唯一でなければ
    ならない。

右側の検索文字列には後方参照が使えます。 左側で()でくくってグルーピングしたマッチ文字列を 右側の検索文字列の中で取得できます。

取得するには K2Editorの置換機構の 後方参照と同じように$1,$2などを使います。

\1\2でなくて $1$2だから右側のパターンは左側のパターンマッチングが終わった後で置換されてからコンパイルされるのかも

SHJS(と萌)にあてはめた場合$1$2がどのマッチングのキャプチャを指しているのかが明らかではないというところで二の足を踏んでいる次第

 @2010-04-08: くわえて

  formatted_text = <<TEXT.strip.gsub(/\t/, " "*8)
TEXT
  texts = [<<TEXT1, <<TEXT2]
TEXT1
TEXT2

こんなんどうする?

最終更: 2009-12-06T02:34+0900

[SakuraEditor] 再度WSHプラグイン

たとえば、http://sakura.qp.land.to/?Junk%2F31 で展開されている GNU Global対応息の長い支持があるが本体に取り込まれてはいないこういう万人向けでない機能がプラガブルになっていると

  • タ本体「大きなパッチを取り込んでバイナリを肥大化させたり安定性を損なうリスクを避けられる
  • 本体とは別のサイクルでまたーザーサドで GNU Global対応を進めることができる
  • 機能が不要な人はイールしないから目にすることもコトを払うこともない

プラグイン化を推し進めると不要な機能をそぎ落としてメニーも整理して必要な機能は自分で用意する自分だけのエタになる

っていうのが xyzzyEmacsの方向性? そう思うと途端につまらなく思えてくるのは何故? プラトフームだと思うとアイデンィテが希薄に感じられるのとなんでもできる/やろうとする/できてしまう無節操さが嫌いなのかも

ったい自分はどうしたいんだ?

なんでもできるエタでやりたいことだけを可能にする!?

でも実際はタなんてなんでもいい&使い比べもしないものぐさな人間だということを行動が示している最初はメモ帳でスクリトを書いていてエラー行を見つける手段(行ジャンプ行番号表示)がないのに困って最初にダウンロドした TeraPad23年使い正規表現検索がないのを不便に思って最初にダウンロドしたサクラエタを 5年以上使いースが公開されてるもんだから色分けの不足を補えてしまって萌タをカスタマイズする機会を逸したまま現在に至る名前の良さと最初から大概のことができる間口の広さで誘い込まれースをいじる究極のカスタマイズができる自由さで閉じ込められた

  1. 見た目がよくて(ダウンロ)
  2. (適切なデフ複雑すぎない設定など)っつきがよくて(しばらくつかってみよ)
  3. 幅広いユーザーのニーズを満たす機能セトが揃っていて(使用をやめる理由がな)
  4. なくても困らないニッチな要求にも応えられる(乗りかえる理由がな)

という要素を自分は求めている(らしいサクラエタに最初の二つはなかったが必要だとは思う)のでプラグイン化で機能をそぎ落とせる必要はなくそれなりに需要のある機能をプラグインで置き換える必要もないかもしれないプラグインの本命はニッチな機能取り込むには大きすぎる機能ライフサイクルの異なる機能の実現にある……がなんでもプラグインにしてしまって柔軟にデフトを設定できるような状態にしておくというのもやはり魅力的だ(それにデフトのタイプ別設定(AWKアセンブラCOBOLJavaTeXVisual Basec……)のうち使わないものは目にするのも嫌だという人種(潔癖だね)が一定数いるらしいからそれに応えることにもな)

っていうのが Linuxの現れては消えるトリビーション? 適切なデフトが対象別に無数に存在する状態を適切なデフトが用意されているとは言いたくないな適切なデフトはとっつきの良さのために導入した指標だから(:Linuxの話ではない)

この展開の着地点を Windows ということにしてみようタ界の Windows普及(利益)を目指すなら当然の帰結とかいってとりあえず Linuxには何も考えずこれを入れとけっていう強力なトリビーションが一つだけほしいね(Ubuntuが五年後も続いていたらいいポジション)


20091105() [Vista] まただーソル移動がもっさりすると思ったら

最終更: 2009-11-19T05:26+0900

[SakuraEditor] 前略

  1. 矩形選択範囲が勝手に折り返し桁まで拡大されるのが嫌なのでまずそこをコメトア(不自然な動作を持ち込んだ上にその理由を説明しないのであれば削除されて当)
  2. そうすると矩形選択範囲が幅0のときに一切の文字が挿入されなくなるので選択範囲の幅に頼った間接的かつ誤った条件判断を正す。(正すと書いたがいまの条件判断が正しいという確信はない明らかな誤りはなくせた)

すくなくとも幅0の矩形選択で改行の手前にタブやスペースを挿入できるし選択範囲の勝手な拡大も行われないが折り返しが絡んでくるとどのように文字が挿入されるのが正しいのかなんてわからないのでそこんところは考慮外

折り返しの結果として行頭に改行がきている場合もタブやスペースが挿入されなくなるはずと思って試したら予測不可能な結果にもともと折り返し行に対して文字を挿入すると挿入した結果により折り返される位置が変化してしまい結果がどんどん予測不可能になっていくんだけどそれを上まわるかもしれない

Index: sakura_core/CViewCommander.cpp
===================================================================
--- sakura_core/CViewCommander.cpp	(リビジョン 42643)
+++ sakura_core/CViewCommander.cpp	(リビジョン 42644)
@@ -4733,11 +4733,11 @@
 	// From Here 2001.12.03 hor
 	/* SPACEorTABインンデントで矩形選択桁がゼロの時は選択範囲を最大にする */
 	//	Aug. 14, 2005 genta 折り返し幅をLayoutMgrから取得するように
-	if((wcChar==SPACE || wcChar==TAB) && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x ){
-		GetSelect().SetToX( GetDocument()->m_cLayoutMgr.GetMaxLineKetas() );
-		m_pCommanderView->RedrawAll();
-		return;
-	}
+	//if((wcChar==SPACE || wcChar==TAB) && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x ){
+	//	GetSelect().SetToX( GetDocument()->m_cLayoutMgr.GetMaxLineKetas() );
+	//	m_pCommanderView->RedrawAll();
+	//	return;
+	//}
 	// To Here 2001.12.03 hor
 	wchar_t szWork[2];
 	auto_sprintf( szWork, L"%lc", wcChar );
@@ -4833,7 +4833,8 @@
 			nDelLen = nIdxTo - nIdxFrom;
 
 			/* TABやスペースインデントの時 */
-			if( bIndent && 0 == nDelLen ) {
+			const bool emptyLine = ! pcLayout || 0 == pcLayout->GetLengthWithoutEOL();
+			if( bIndent && emptyLine ) {
 				continue;
 			}
 

 @2009-11-08

隠し機能がでてきましたよ>矩形選択時のSPACE/TAB動作に手を入れる場合実装上>>dev:4103 あたりのSPACE/TABインデト仕様を実現するための実装部が絡んできそうで

これだから迂闊なことはできない自分用だと自分が使う範囲で問題がない限り気にしないで済むけど

リンク先で議論されている桁揃えのためのインデ(条件によりタブやスペースが挿入されない行がありその結果インデトが揃う)(レイアX座標)を文字単位の座標に変換するときに中途半端な(=文字途中を指す)レイアト座標が正規化されることに依っているのかな?

矩形選択はつっつくと魔物が出てきそうだ正解がわからないから2ト文字が分割されるなど明らかな不具合以外は実装が仕様になってしまいそう


挿入位置の文字の末尾が矩形選択範囲に含まれていないときにインデト用の文字を入力しないことでインデト揃えができるように追加修正した版 > fix_indentation (4.1KiB, diff to trunk2@1674)


矩形選択時その範囲内に文字がない状態でインデトすると桁が揃うようにスペースを補完します。それ以外の場合範囲内に文字のない行はインデト対象外になります。

hor氏のヘルプ

「範囲内に文字のない行は考慮外だったけど怪我の功名で改行の後ろにインデト用の文字が挿入されないようにもなっていた>fix_indentation


あいう
abc

というテキトの一桁目(「あの前半a)

^   ABC
DEF

というテキトの一桁目(タブの前半D)を矩形選択してタブやスペースを入力すると珍妙なことになるのは変わっていない普通の文字を入力した場合は右移動で入力された文字の幅だけ移動することが決まっているけど入力された文字がインデト用の文字でそれが挿入されなかった場合右移動の移動幅がもともと選択範囲にあった文「あの幅になってしまうのが原因

一応入力された文字の幅を考慮して右移動しているけど右移動を行うのが選択範囲の一行目だからこの場合一回右移動するだけで行き過ぎてしまう

それも修正 > fix_indentation.rev2 (5.3KiB, diff to trunk2@1674)

問題の存在がわかれば叩きようも考えられるけどそれがわからなければ手の打ちようがないト重要


どうして(幅のある)文字の先頭部分が矩形選択範囲に含まれているときだけインデト用の文字を挿入ではなく文字の末尾が含まれているときだけなのかといえばおそらくそうでないとインデトの桁揃えができないから実際に試してみればすぐわかるけど文字の先頭を条件にするとほとんど常にインデト文字が挿入されてしまって桁揃えにならない


現在認識している問題点

  1. トタブ設定のときに桁揃えができていない
  2. 入力がインデト用の文字のときにも矩形選択の幅0を維持するようにした結果CViewCommander::Command_INDENT_TAB()

    if(m_pCommanderView->GetSelectionInfo().IsTextSelected() && m_pCommanderView->GetSelectionInfo().IsBoxSelecting() && GetSelect().GetFrom().x==GetSelect().GetTo().x){
    	Command_INDENT( WCODE::TAB );
    	return;
    }

    このコドが発動してしまいトタブ設定にかかわらず常にタブ文字が挿入される

修正した>fix_indentation.rev3 (5.8KiB, diff to trunk2@1674)

1つ目は fix_indentaiton.rev2のバグ意図せず bIndent引数を trueから falseに変更してしまっていることがあった2つめは該当コドを削除したもうひとつ fix_indentation.rev2のバグ0の矩形選択のときにもインデト用の文字の挿入をうっかりスキップすることがあった


 @2009-11-09

指摘を受けて修正原因は rev2のタイポ指摘を受けたケースは fix_indentationのときにしかテトしていなかった> fix_indentation.rev4 (5.8KiB, diff to trunk2@1674)

本腰を入れて読んでいなかったというか自分でやってみた今だからこそよく理解できるんだけど、4127で実際に文字を挿入された行をもとにして選択範囲を移動することが既に行われているさらに気になってはいたけどそのままにしていた全角文字がはみ出すことへの対処も行われているなんて車輪の再発明っと違う点を見つけるなら文字を挿入された行をもとにするだけでなく選択範囲から文字がはみ出していない行をもとに選択範囲の移動量を決定しているところだろうだから 4138の指摘を rev2改めrev4では回避できている


っこ非互換ではないけれど

あいうえお
1かきくけこ

という行で幅1矩形選択をしてインデト用の文字を入力するとおかしな事になる文字を挿入するときは幅0選択でいいじゃないかと思っていたが全角半角が混じるといつでも幅0で選択できるとは限らない2以上であれば問題は起こらないのでこれはインデト揃えの弊害右移動に頼らず直接入力文字のレイアト幅を計算して選択範囲を移動すればなんとかなるかも方法は知らないけれど

ptLayoutNewを使って計算< 上の例で考えると矩形選択範囲に入るのは一行目と二行目をあわせてもある文字の前半と別の文字の後半だ前半だけの行にはインデト文字が挿入されないから入力のレイアト幅を知るためには使えない後半だけが入っている行では挿入位置として与えるのが文字の真ん中を指すレイアト座標ってくる ptLayoutNewが相変わらず文字の真ん中を指す座標だとは考えにくい最大でタブ幅-1のずれが生じたりしないだろう(一人: ptLayoutNewって名前から CLayoutのイスタスだと思っていたpゃなくて ptったと)

オプション化不要と書いたとたんのこの難題どうしまし


とりあえずインデト文字のうちスペースを入力したときに選択範囲が全角文字の前半部分ばかりを移動してしまって全く入力が行われないのを改善した>fix_indentation.rev5 (7.8KiB, diff to trunk2@1674)

また従来は矩形選択範囲が折り返し桁に達した場合行番号はそのままで選択範囲が行頭に移動して循環していたが折り返し桁でとどまるようになったこれは意図したものではないが従来の挙動を期待する人がいるとも思えないのでそのまま

折り返しといえば

1|ABC<
2|DEF<
3|GHI<

CFIを矩形選択して _を入力したとき_FIの直前に入力されるわけではないというのはどう考えられているのだろうこれがあるから矩形選択入力と折り返しを組み合わせてはいけないどんな結果も期待してはいけないと思っている


タブが入力されたときもおかしなことにならないように改善した>fix_indentation.rev6 (8.4KiB, diff to trunk2@1674)

原因はインデト文字の入力をスキップされた行が取り残されることにある入力がタブだったりしたら 8桁分選択範囲が後ろに移動することもあるわけでそのとき選択範囲の中に収まっている文字はタブの入力をスキップされた行においてはーザーが最初に選択した文字とは全く異なっているインデト文字の入力スキップがインデトを揃えるためにあるというのならば実際そこにインデト文字があるかどうかをチックしてあるときだけ入力をスキップすればよい条件を厳しくすることで全角文字が取り残されることがなくなった

1行目と 2行目をどこでも幅1矩形選択してタブを入力する最初に選択した文字が取り残されないことを確認する

あいうえお
1かきくけこ

4タブ設定「うの前半「きの後半を幅1矩形選択してタブをいくつか入力したとき初回だ「うが後ろに行きすぎるこれはもうあきらめている


 @2009-11-10

0123456789
あいうえお
1かきくけこ
(TAB幅は4の設定)

で、1行目の「4」の左から3行目の「き」の右までを矩形選択(幅1桁)して
TABを3回入力すると、1行目の「4」の左右にTABが入ります。 

これは「これはもうあきらめている(@2009-11-09)ースなんですよね事前に選択行をすべてチックする必要があるように思えたので……*っとやってみます

行番号が55行ほどずれてしまっていま...

っかりしていました矩形選択中にカーソルが折り返し桁一つ手前で折り返してしまうことの対策と同じブランチを使っているせいだと思います。

 Editor.Char(9) と Editor.IndentTab() の使い分け

すでに BOOL bIndent引数が存在するのだからこれを厳密に適用しようということですね悪くないと思いますし対象も重なっていますがっしょくたにしていいものか……


矩形選択範囲がタブ境界にあり全角文字の前半分が範囲からはみ出しているときにタブを挿入すると行によりタブの幅が最小と最大になってしまい選択されていた文字を選択範囲内にとどめることができなくなってしまう問題に対処した>fix_indentation.rev7 (10.2KiB, 今度こそ diff to trunk2@1674)


 @2009-11-11

あいうえお
1かきくけこ

で、「い」の左から「き」の右まで矩形選択します。
まず、「さ」を入力します。
次に、「a」を入力します。
結果、1行目には「さ」の手前に「a」が入ってしまいます。 

不安に思っていてでも知らぬが仏とばかりに追求しようとしなかった部分(全角文字の入力)を見事に突いてきますね(すごくありがたいで)

TABを含めた文字列をクリップボドから貼り付けた場合

この場合はインデトではありませんし揃えることよりもクリップボドの中身を指定された場所に貼り付けることが第一だと思います。これまで通り

'int' から 'CLayoutInt' に変換できません

直しました個人的にデバッグモドのエラーを潰すためだけに CLogicInt(0)static_cast<CLogicInt>(0)と書かされるのが嫌なのですねせめて警告にしろと(無視する気満々)っても仕方ないです


三日前から毎日これぞ決定版と思ってるんだけど今日こそ >fix_indentation.rev8 (10.8KiB, diff to trunk2@1674)


 @2009-11-12

 selectionIsOutOfLineの判定条件が(たぶん)おかしいです。
(括弧が足りてない気がします)

詳細なレポトありがとうございます。条件演算子の優先順位は &&||の次ですからっしゃるとおり reachEndOfLayout && の部分も含めて ? の前と後ろの二つにわかれてしまっています。)A&&B?C:D)A&&(B?C:D)

一日を失う手痛いミス >fix_indentation.rev8.1 (10.8KiB, diff to trunk2@1674)


 @2009-11-13 メモ

  • タブキーとスペースキーにはそれぞTABインデSPACEインデ機能が割り付けられている
  • ABという文字の入力は ABというキーに割り付けられた機能によるものではない
  • タブキーとスペースキーに割り付けられた機能を削除してもタブやスペースの入力が行える
  • ただしトタブTABインデの機能
  • 選択範囲をタブやスペースでインデトできるのももちろTABインデ」とSPACEインデの機能

インデト揃えにからむ機能のオンオフを機能の割り付けでコトロールできるかと思ったがTABインデトが高機能なので取捨選択ができなければ意味がない

タブインデトとタブ文字の入力を区別>fix_indentation.rev9


 @2009-11-15

矩形選択入力で(TABインデトや SPACEインデトによらない)タブやスペースを改行文字の後ろや空行にも挿入するように矩形選択中のTABインデトと区別されるタブ文字の入力と SPACEインデトと区別されるスペースの入力は前例がないので自由に変更しています。>fix_indentation.rev9.1 (13.4KiB, diff to trunk2@1674)

rev9.1を眺めていて従来の動作に疑問テキトが選択されていなかったり選択範囲が一行だけだったときCommand_INDENT_TAB()Command_INDENTの代わりに Command_WCHAR()を呼び出す。これにより選択範囲が一行のときだけインデトではなく選択範囲がタブで上書きされる潔癖より実用本位ということだろうけど


 収支

わかっている範囲では以下の四つが改善され二つの非互換が確認されている

  • 矩形選択で改行文字の手前にインデト用の文字(タブとスペース)を挿入できる

    ABC
    ABC

    Cの後ろを幅0矩形選択してスペースを二回入力して(なぜか)全体が選択されたあと行頭がインデトされたりしないことを確認する

  • 矩形選択範囲の先頭が全角文字やタブなど幅広の文字のときインデト用の文字の挿入が桁揃えのためにスキップされても選択範囲の移動幅が入力文字と異なることがない

    あいう
    abc

    一桁目(あの前半とa)を矩形選択してスペースを二回入力し(奇妙に) aの前と後ろにスペースが挿入されたりしないことを確認する(あをタブにするともっと極端な結果を確認でき)

  • 矩形選択範囲が全角文字の前半ばかりを移動してしまいスペースが入力できなくなったりしない

    あいうえお
    1かきくけこ

    1行目と 2行目をどこでも幅1矩形選択してスペースをいくつか入力し入力が連続してスキップされないことを確認する

  • 矩形選択してタブを入力したとき最初に選択されていた文字を置いてきぼりにして選択範囲が後ろに移動したりしない

    あいうえお
    1かきくけこ

    1行目と 2行目をどこでも幅1矩形選択してタブをいくつか入力し最初に選択した文字が範囲内に残っていることを確認する

  • (非互) 矩形選択中に文字を入力し続けたとき範囲が折り返し桁から行頭にループしない
  • (非互) タブひとつの貼り付けスペースひとつの貼り付けTABインデトを割り付けていないタブキー入力SPACEインデトを割り付けていないスペースキー入力で矩形選択中のインデト揃え機能が発動しなくなったまたほかの文字と同じように改行の後ろや空行にもそれらが挿入されるようになったEditor.Char(9)Editor.Char(32)の結果も同じように変わっているはず。

 @2009-11-18

(何人いるのかわからない)ななしさんに協力してもらったということもあるのでッチにして投稿しなければいけないとは思っていたがあまりに次々バグ報告が来たので寝かせておく期間が必要かもとも思っていたでも目を通した上で代わりにやってくれるのは歓迎です。>unicode:1054, SourceForge.net: Sakura Editor: Detail: 2899665 - 矩形入力動作の改善

追加修正もあるようで

  • トタブ設定のときに挿入するスペースの数を選択一行目だけで判断せずすべての行(文字の前半分だけ選択範囲からはみ出してる行なども含めて)に対して適切な数を選ぶ
    • っとできる対処が思いつかなかったので見て見ぬふりをしました
  • Command_INDENT()Command_WCHAR()の交差した呼び出しを解消
    • 内部の話
  • SPACEインデトによる全角文字の左側揃え選択幅1のときは全角文字の凸凹を調整して揃える(>>dev:4136)
    • どこを選択してスペース3つなのかが書いていなかったので読み飛ばした部分です。

元に戻った点も

  • 0矩形選択時のインデトで選択範囲最大化
    • 今日の日記の最初をみるとわかるが掲示板に投稿され「改行文字直前の幅0矩形選択インデトが行頭インデトになるのを修正するのはついでで範囲が勝手に最大化されるのをやめることが個人的なスタト地点だっただか「微妙だが自ら引導を渡すほど忌むような挙動でもないかな?という見方には同意できないがこのパッチにより矩形選択範囲が幅0であることに特別な意味がなくなるので野良パッチ野良ビドで対処しやすくはなる前進

ダウンロドしてパスは通していたものの今日初めて patch.exeを使ったつまずいた点は

  1. ッチに記述されたパスにあうようにカレトリを設定したなら -p0 オプションが必要(デフトの動作ではパスを無視してファイル名だけをみるた)
  2. Subversionがよく出力する LF/CRLF混合の差分は受け付けなかったのでCRLFに統一

GNU patch5年ぶりにバージョンアップ バージョン2.6リリス:CodeZineなんて話題が今月にあったけどールされていたのはこんな patch見慣れた名前があります。

patch 2.5.4
Copyright 1984-1988 Larry Wall
Copyright 1989-1999 Free Software Foundation, Inc.

This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

written by Larry Wall and Paul Eggert

* 追記@2009-11-18 http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=dev&v=4137#4137 にまさにその手順が書かれていたっと見で理解できなかったので例によって読み飛ばしていたというよりこの例は再現手順に不備があるので問題の所在から理解できていなかった

本日のツッコミ(25) ッコミを入れる

Before...

ななしデバッグモドでコンパイルすると4883行で error C2440: 'int' から 'CLayoutInt..

ななしrev8す。 あいうえお 1かきくけこ 0123456789 「いの右側から3行全部を0幅選択してスペ..

ななしrev8.1OKな気がします。 いい感じ (^^)

anonymouse「1文字のTAB/SPACE入力が必ずインデト扱いになってしまっていて変 (20091110() 10..

ななし念のため 上記の タブキーとスペースキーに割り付けられた機能を削除すると  複数行選択したときのタブやス..

ds14050ええと具体的にどういう動作が不満でどういう結果になるのがよいのでしょうrev.9版のバイナリは http:/..

ななし行末を超えた位置にも通常文字は入る SPACEーにインデトを割り付けて*いない*ときは 行末を超えた位置に..

ds14050この部分ですね ---- if( nDataLen == 1 && IsIndentChar( pData[0] ..

ななしnDataLen == 1 && IsIndentChar( pData[0] ) なんていう条件だと クリ..

ななし> 選択範囲が一行だけだったときCommand_INDENT_TAB()Command_INDENTの代わり..

ds14050>1字のSPACE/TABという条件はドをはじめて見た >瞬間におかしいと思ったし誰でも同じことが想像でき..

ds14050どうしようもないな「元の挙動を残し<<<大嘘

ds14050なんかもうぐだぐだだけど気づいてしまってので訂正 >知らないのは事実です。最初のコメトに書いたとおり 最初の..


20091026() [tDiary] aq=3 というようなクエリパラメータを含んだ google検索からのリファラをうまく置換できないので調べたら最新のではしっかり q= というパターンが [^ao]q= に更新されていた設定ファイルは古いものを引き継いでいたから対応できていなかったところで[^ao]q= より \bq= の方が将来性があって良いというか[?&;]q= でどうか?

最終更: 2011-12-20T23:29+0900

[SakuraEditor] 矩形選択時のカーソルの動きを修正

発端はこれ > 折り返ししている物理行末をーボドで左から右へ矩形選択しようとすると 次の物理行にカーソルが移動して意図した通りに選択できません

折り返し桁に到達した瞬間次の行の始めにキャレトが移動してしまうために末尾一桁が選択不可能になっている

いいだしっぺの責任のようなものを感じて一応やってみた

  • 矩形選択中はキャレトを操作と違う方向に移動しない
    • 右を押していて折り返しで次の行頭に移動しない
    • 下を押していてEOFのある行に着いたとき X座標の最大値を EOFの位置に規正しない
  • (ついで) EOFの位置にキャレトがあるときに下を押すと選択解除
    • EOFの位置で右を押したときに選択解除はすでに行われている

っくり書き換えてしまった部分があるのとCMemoryIteratorCLayoutがよくわかっていないためにっぱり自信が持てない道具が初めて扱うものばかりなのに加えフリーカーソルモ矩形選択中改行の位置折り返し桁(設定)(実際の)折り返し位置など考慮すべき対象も多すぎる

いじったのはキャレトの移動部分だけで選択については見ていないぶら下がり文字についても考慮していない選択できないわけではないので特に不都合だとは思っていない(改行がぶら下がってるときは不都合があるか)


 @2009-10-28

矩形選択をキャンセルしたときにカーソルが改行の後ろに取り残されてる

矩形選択を上下左右矢印で解除したときはカーソルを矩形の左上隅に移動するようになっているでも現状では矩形選択は Shift+F6での矩形選択ロックを利用したインターフェイスしかない(マウスのことは知らない)から矢印で選択状態を解除はできないEscを利用して選択解除するんだけどこのコマドはキャレトの移動を行わないだから取り残される

取り残されるよりはましだろうと思って必ず左上隅に移動するようにした

別件選択を矢印で解除するとき()矢印だったら選択解除だけが行われてキャレトの右()移動は行われないでも上()矢印だったら選択解除とキャレトの移動が両方行われるっちでもいいし今のように混在してても不満はない

さらに別件ャレトが EOFの位置にあるとき右矢印で選択解除ができるようになっていたので下矢印でも選択解除ができるようにしたがャレトが先頭行にあるとき上矢印で選択解除はできないャレトの実質的移動がなければ選択解除はしないということで統一しEOFの特別扱いをやめてもいい気がする

違うなあァイルの先頭で左を押すと選択解除ができるEOFでの右解除はこれにならったものだ最終行での下矢印で選択解除できるようにしたなら先頭行での上矢印解除も対応しろってことだ(そのほうが修正点が少な)

した

たぶん二行下移動(そういうコマドがあって↓に割り当てたりできる矩形選択用の二行下移動もある)ではここまでの修正が効いていないだろう

と思ったら二行下移動では EOFのみの行に一気に移動できない必ず手前の行で一度止まってしまう結果的に問題は起こっていなかったわけだけどEOFのみの行に一気に移動できるようにしたうえで修正が効くようにした

っと考えればわかるけど左上隅だからって改行の後ろでない保証はなかった普通の選択解除と同じようにコマドの方向も考慮しながら(右移動による選択解除なら右下隅にキャレトを置くとか)ャレトが有効な位置におさまるようにまじめに対応した方がいい()矢印が押されたときに選択解除とキャレトの移動を両方行うようにすれば()矢印の場合の動作と統一されるしャレトが有効な位置に収まることも左()移動コマドによって特別なことをせずとも保証される一石二鳥


 @2009-10-29

ッコミが入りました

今のサクラで選択を上下左右の矢印キーで解除するときの挙動はEmMS Wordなどと同じ動きです。

秀丸エEmEditorはおろか Wordも使ったことがない物知らずなもので……左右の選択解除でキャレトの移動がなくて上下の選択解除ではキャレトが移動することに関しては(俺がいう)一貫性以外に他と揃えるという評価軸もあるということでしょうメモ帳と Firefoxのテキトエリアでは左右の選択解除でもキャレトが移動するのでっぱりどっちでもいいことだと思うな(俺は)っちでもよくないという意見があるのだか「一石二鳥を強行したりはしないけど

(折り返し位置の1字手前から次行に移動する)概ね多くのエタと同じ動きだと思います。

これャレトの表示を折り返し位置で留まるようにして次行の行頭に飛ばないようにしたけれどその右は次行の一文字目と二文字目の間だから実質的なキャレトの位置は変えていないのだよね行頭の左が前行の折り返し位置の一文字手前であることの対称になることも意図した折り返しの一文字手前の右が次行の行頭である場合よりーザーのできることは増えるしャレトが現在の行を端から端まで移動する前にワープしてしまったような印象も受けないし他のエタも見習ってほしい動作だと思ってるこれに関してメモ帳は折り返し一文字手前の右が次行の行頭Firefoxのテキトエリアは折り返し位置と次行の行頭の間に仮想の一文字が存在するFirefoxはありだと思うけどメモ帳はどうかと思うどうかとは思うけど自分は折り返さないのでまったくの他人事だったり

書いてるうちにさらなるツッコミ

通常選択や通常カーソル移動の仕様変更するのは本末転倒かな

「本末転倒はそうだったかもしれない折り返し位置での右移動がややこしすぎて矩形選択の不都合の修正とカーソル移動を分離できなかったというかャレトがおかしな動き(改行文字の後ろに止まったり)をしないように試行錯誤しながらの修正だったからその結果が自分好みの動きになるのは当然という

二人とも矩形選択中にキャレトが折り返さないことに異論はないのかな


 自然にこうなるはずもなし。
 先人の意向ということで。

レガは積極的に振り捨てたいそれが自然でないのならばなおさら


個人的な主張や好みはおいておいて波状攻撃をくらってしまったので折り返しでの右移動を修正した元の通りに(ったはず)っと余裕ができたのでコドを整理して仕様変更をしやすくしたこれでこんどまた折り返し行の右端でキャレトを止めようと思ったときも変更がしやすいMOVE_NEXTLINE_IMMEDIATELYMOVE_NEXTLINE_NEXTTIME_AND_MOVE_RIGHTに置換するだけじゃないかなオプション化も簡単だわざわざ設定画面を用意して使用者の煩わしさを増大させるほどのものではないけど


 @2009-10-31ッチ

SourceForge.net: Sakura Editor: Modify: 2889930 - 矩形選択中にキャレトが操作と異なる方向に移動しないように



 @2011-11-30 コミ

  1. r1966(2011-11-15) コミby syat.
  2. r1973(2011-11-29)ャレトが -1行目へ移動するバグの修正 by moca_skr.
  3. r1983(2011-12-20) (F6ESCーによる)選択中の未選択状態で選択をキャンセルできないバグの修正 by moca_skr.
本日のツッコミ(3) ッコミを入れる

anonymouse今のサクラで選択を上下左右の矢印キーで解除するときの挙動はEmMS Wordなどと同じ動きです。 折り..

ななし矩形選択とい「おまけにあわせて 通常選択や通常カーソル移動の仕様変更するのは 本末転倒かな

ななし現行仕様は明らかに他のエタを調べてそれに合わせた結果と思われ 自然にこうなるはずもなし 先人の意向というこ..


20090923() Subversionの嫌なところ - 日記を書く [w] はやみずさん < 既に存在するリポトリの形式はサーバープログラム(svnadminとか)をアップデトしたとしても自動ではアップグレドされないことになってる明示的にコマ(svnadmin upgrade)を打つか DUMP&LOADするまでだから古いクライアトプログラム(svn)がお行儀悪く fileトコルでリポトリを直接読もうとしても(他に原因がなければ)失敗はしないんじゃないかと濡れ衣くさいので書いた <追記@2010-04-21>ーキングコピーの話だったらそれはアップグレドされる所詮ただのコピーなんだからクライアトごとにチックアトすればいいんですよ</追記>

最終更: 2013-04-29T21:18+0900

[SakuraEditor] 矩形選択を普通の選択と同じ操作感に(Shift+○という操作を Alt+○に置き換えるだ)

いままではAlt+矢印で矩形選択モドに入った後Altを放してそれから選択範囲の拡大を(矢印でShiftは不要)行う必要があったまた知らないうちに矩形選択モドに入ってしまっていて驚かされることも何度かあったそれらAltを放す必要や知らぬ間のモド変更がなくなる

2000年にはそのための布石というかコメトアトされたプレースホルダが用意されていたそのおかげで全くたいしたことはしてないのだけどこれまで放置されてきた理由なり原因なりを何か見落としてる?


 差分更新

easy_box_selection.rev2.txt (30.6KiB, 2010-04-13)
trunk2@1732に対する差分
ー割り当ての初期設定の間違いを一つ修正
折り返し行頭への移動が本当の行頭(改行文字の直後)への移動だったのを修正

 @2013-04-27 Mocaさんによるパッチ

Sakura Editor / PatchUnicode / #449 矩形選択移動コマドの追加

俺みたいにありもののコマドで間に合わせるのでなく足りないコマドの実装までされています。

今思うと矩形選択しながらの(折り返しでない本当の)改行単位での行頭・行末移動は不要だった気がするプレースホルダはあったけど使わないでしょう? 改行単位の GoLineEnd自体は矩形選択と組み合わせては使わないにしても、なくて不便だった(20120227p01.02)ので必要だけど

残念なのは既存ユーザーの sakura.iniには Alt+Alt+Alt+Alt+→に対す「矩形選択開始の割り当てが既に書き込まれていること勝手に設定を書き換えることはできないからプログラムをアップデトしただけでは利便性の増した矩形選択に気付けない関連するキー割り当てがデフトのときだけ書き換えてしまうのはありかもしれないップデト後1回だけ ini書き換えを実行するためにiniにフラグのための項目を増やすことが考えられるWSHで独立したスクリトを書く方がオーバーヘドは少ないが実効性は著しく下がりそう別に隠れ機能でもいいけどねよく使う人ほどこれまでの操作に慣れてるだろうからヘルプに2通りの操作があることを書いておけば気付くでしでも慣れてるけど不便だと思ってる人に気付いてもらえないなあ俺みたいにリリーストを嬉々として読む人間ばかりではないだろうし


20090922() [790FX-GD70] BIOS v1.5

最終更: 2016-03-05T00:30+0900

[SakuraEditor][正規表現] 正規表現を使った検索・置換で改行の意味を LFのみから CRも含むように

経緯 > サクラエBBS[r7030]

差分 > fix_cr_handling_of_regex(下に修正版があ)

お試し > sakuraW.zip (547KiB)(下に修正版があ) (正規表現検索・置換を試すには bregonig.dll(Unicode対応)が別途必)

検索置換を数度試したが機能しているみたいただ$ が本当に改行の手前でマッチする関係で

^.*$

を空文字列に置換するという最初に提起されたケースでは置換後の空行までが置換対象になってしまう(置換回数が 2)目的に適うより適切なパターンは

^.+$

あるいはタの行置換機能を使っているのだからっと単純に

.+

で良い


 @2009-09-24

正規表現 - SakuraEditorWikiを見ていて気付いた。\c[\c]\c$\c. という制御文字のひとつを表すパターンが存在する鬼車 正規表現 Version 5.9.1によれば \C-[\C-]\C-$\C-.\M-[\M-]\M-$\M-. も存在しうる。\M-\C-[ なども存在しそうに思ったけどこれはこういう結果になった

irb(main):001:0> /\M-\C-[/
SyntaxError: (irb):1: too short escaped multibyte character: /\M-\C-[/
        from c:/Program Files (x86)/ActiveScriptRuby-1.9.1/bin/irb.bat:20:in `<main>'
irb(main):002:0

制御文字なんて扱ったことがないからなあ(もはや relicだという認識)対処の必要性がさっぱり感じられないけど……


 @2009-09-25

一括置換で $CRLFCR直前LF直前LF直後(正規表現DLLに与えた文字列末尾)の三カ所にマッチしてしまうとの指摘 >サクラエBBS[r7039]

逐一置換を実行した場合は問題ないことを確認していたのだが一括置換はライブラリに全部お任せで検索開始位置を調整することもできないから動作が違っていたのだろう$CRLFの間にマッチするのはわかっていたが明示的に \r を食べた場合にだけ影響があると思っていた一括置換なんてありふれた操作でそれが明るみに出るとは思いもせず。

急いで修正 > fix_cr_handling_of_regex.rev2sakuraW.rev2.zip (547KiB)(さらなる修正版 rev3が下)

初めて戻り読みを使ったなんとなく反則的な手段の気がして使わないですむ方法をいつも考えるのだけど無理だったこれで bregonig.dll依存が決定的になった[] の入れ子のことだけなら ] が見つかったときに charset_levelを一気に 0 にするだけで BREGEXP.DLL対応もできたのだ


\C-X\M-X というのは Ruby向けなのかもサクラエ(+bregonig.dll)\C-[ を検索しようとするpremature end of char-classというメッセージが出るとなれば\cX だけが引っかかった小骨ということになる

対処 > fix_cr_handling_of_regex.rev3sakuraW.rev3.zip

<追記>bregonig.dllでは \c\X\cX の意味になるともう知らねー。</追記>


個人プロジトでもないと色々大変そうッグフドでも食べながら様子見します。とりあえず反応だ

 2.非対応となっているBREGEXP.DLL(ANSI版)への対処方法
 ANSI版とUNICODE版は別仕様としてしまうのか?

使用できる正規表現自体が別物なので BREGEXP.DLLCBregexp::MakePattern()でよいかとーザーを驚かさないための変更なので.\r にマッチすることを期待していた人以外に影響はないつもりでいる

<追記>ANSI+bregonig.dll向けのパッチを用意したので別仕様は ANSI+(BREGEXP.DLL/bregonig.dll)Unicode+bregonig.dllの間または ANSI+BREGEXP.dll (ANSI/Unicode)+bregonig.dllの間のどちらでも選べるBREGEXP.DLLのサポトするオックスな(戻り読みをサポトしない)正規表現で$を改行直後の行文字列終端にマッチさせない方法が見つからない限り BREGEXP.DLL対応は無理。</追記>

<追記>BREGEXP.DLL版も用意した>_ANSI.rev2 >_ANSI.rev3</追記>

 3.$ が改行なし最終行のEOF手前ともマッチするように改善すること
 $ を (?=\r\n?|(?<!\r)\n|(?<[^\r\n])$) に置き換える方法を試してみたけどエラーで動きませんでした。

肯定の戻り読みは (?<=) でした(なにせ使用経験がないもので)気を取り直してパターンを (?=\r\n?|(?<!\r)\n|(?<=[^\r\n])$)* に置き換えたところ検索は予想通り最終行がEOFのみの場合を除いて文書末にマッチするようになったのだけど置換が行われない(以前は行われていたのだろうか? マッチのインデックスが文書の長さと同じ(=1つはみ出した状態)になっているはずだから特別な対処が必要なのだろ)

「以前は行われていたのだろうか?< 行われていなかったなら(間違ってるけど)おいておこう

 4.検索強調表示が検索時の選択反転表示と一致すること
 $ を (?=\r\n?|(?<!\r)\n) に置き換えた版で $ を検索すると、改行文字自体は選択反転表示にはならない(マッチしない)のに検索強調表示されている。
 また、なぜか上方向検索では改行文字自体にマッチしたかのように選択反転表示になる。

$で検索したときに改行文字が強調表示されるのは0のハイラトには意味がないので実用面から今のように最低でも幅 1を保つべきだと思っていた

上検索で改行が選択されてしまうのは間違いなので修正したいこれまでが知らず $ が改行にマッチする仕様に依存していたのかもしれずこういう修正は正しい方向に向かうためのものだと考えている

修正した(rev4)無限ループを避けるためにマッチ幅が 0のときに検索開始位置を特別にインクリメトするんだけどそのタイミングが悪くて検索開始位置だけでなくマッチの範囲までがインクリメトされていたのが原因

 5.正規表現キーワードでの $, . 指定も検索・置換と挙動が一致すること
 現状、正規表現キーワードには $, . に検索・置換でやっているような細工が入っておらず、素の正規表現ライブラリ挙動になっている模様。
 検索・置換時の . の細工([^\r\n]への置換)が追加されると、今よりも差異が大きくなって混乱しそう。

すでに書いたように.\r にマッチすること$CRLF の真ん中にマッチすることを期待していた人(いるのか?)以外は違いに気付かないだろう

\r\n$ みたいな書き方をしていた場合にマッチしなくなるこのケースはなくはないかも

 6.検索・置換や正規表現キーワードの複数行対応への順応性

ーチックsフラグが含まれる( . があらゆる文字にマッチするようになる)ときには . を置き換えないようにするmフラグが含まれない( ^$ が行頭行末にマッチしなくなる)ときには $ を置き換えないようにするとか?


>fix_cr_handling_of_regex.rev4sakuraW.rev4.zip


2ch民は 1.6.5.0をつかうのね♥マークはいらないんだConsolasも使いたくないんだ(これは俺の理由だけ) r1663を使おうぜ


 @2009-09-28

UnicodeRevision1662>http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&sortby=date&revision=1662

AnsiPatch>http://sourceforge.net/tracker/?func=detail&aid=2869238&group_id=12488&atid=312488


勘違いしていたUnicode版のサクラエタで使用できる正規表現ライブラリは bregonig.dll(Unicode)だけだという事実がいつの間にかbregonig.dllUnicode版専用だという思い込みにすり替わっていた

ったら採用の可否はともかくAnsi(trunk2(Release|Debug)_Ansiドのことでなく trunkのビド産物のことだろう)向けのパッチを作成する意味はあるわけだCBregexpのイスタスがその寿命を通じて 1つの DLLだけを扱うのであればトを初回に払うだけで処理の振り分けを行うことができるっちかな?

>>> DLL初期化時に呼ばれる仮想関数がありました(そのたびにチックを行えばいい実際は 1回しか呼ばれないだろ)


CheckRegexpSyntax() は癌だ検索ボタンを押すたびに DLLのロドからはじめて文法をチックしたら使い捨てるって何事文法チックは Compile()で十分その後の Match()のための準備にもなってちょうどいいもろもろの手順を共通化したいのなら引数として CBregexpを受け取るべきだ正規表現のチックをしたい(=正規表現を利用したい)部分ではもちろん CBregexpなりなんなりをすでに持っているだろうCheckRegexpSyntax()がこんな重量級のローカル変数をもつ必要はない無効な検索パターンを履歴に追加したくないがために検索の主体でない検索ダイアログが利用しているのかもしれないけど


 @2009-09-29

っつけで一応これで昨日書い「コトを初回に払うだけで処理の振り分けを行うことができるが事実になった昨日の段階では検索ボタンを押すたびに DLLがサポトする文法をチックする関数が実行されていた(初回どころではない)これでもまだ検索ボタンを押すたびに Compile()2回走るのは変わっていない

おまけとしてbregexp.dllだけが sakura.exeの隣にある状態でエタを起動しその後 bregonig.dllを配置したとき検索ダイアログでは bregonig.dll Ver....と表示されbregonig.dllしかサポトしない戻り読みを使用しても正規表現エラーにはならないものの実際の検索には bregexp.dllが使用されるためだろう戻り読みが機能していればマッチするはずの条件でもマッチ無しになってしまうこういう説明もややこしい起こりづらい状況が起こらなくなる(文法チックと実際の検索が CBregexpの同じイスタスによって行われるようになるか)

本当は CBregexpCDllHandlerを継承するのをやめて分離して1つの CDllHandler(DLLスタ)を多数の CBregexp(BREGEXP構造体)から参照するのがいいのかもっといえばBREGEXP構造体もコンパイル済みパターンとマッチ結果に分離したいサポトする文法の情報はもちろん DLL付きの情報CDllHandlerは汎用的すぎるからその任にはCDllHandlerを継承したいまの CBregexpから BREGEXP構造体だけを追い出したものを充てればいい

いまの CBregexpInitDll()を呼び出されて途中で違う正規表現ライブラリを読み込まされたときコンパイル済みの BREGEXP構造体を正しく解放できるのだろうか?


 @2009-10-01

BREGEXP.DLLでも .$ を置き換えるようにしてみた > fix_cr_handling_of_regex_ANSI.rev2(下に rev3)

副作用があってXYZ(CR)(LF) という行に対して XYZを検索すると XYZ(CR)(LF) がマッチするッチ結果が改行に隣接しているとき改行がマッチに含められます。$を検索すると (CR)(LF) がマッチするのは以前からの通りここが変わらないのは一括置換での過剰な置換を防ぐ手立てがこれしか BREGEXP.DLLからは与えられていないということ

ついでに気になった\r\n を検索したときステータスバーに 1 bytes selected. と表示されるのを修正>fix_selection_area_and_selected_byte_count_ANSI 選択領域が中途半端なサイズだったのも直ったそれもこれも CLayoutEOLの長さを常に 1とカウトしていたせいッチ範囲が勝手に 1切り詰められていた

表示としては ↵ も ⇠ も ⇣ も同じ一字だから CLayoutのすることにも一理あるのかもしれないそれなら改行文字の部分の選択領域をせめて全角幅にして検索結果のハイラト部分と大きさをそろえよう

ANSI版の View関連のソースを見てたら気が遠くなるUnicode版で

  • CRLFを全角幅で表示
  • CRLFCRLFのみハイラ選択
  • LFCRの全角表示全角幅選択(or半角幅ハイラ)
  • 行頭マッチ(^)でキャレト描画

あたりなんとかならんかな検索結果の選択範囲とハイラト領域のずれが気になる


 @2009-10-03

ANSI版を BREGEXP.DLLと組み合わせているときに不必要に改行が検索結果に含まれてしまう場合を rev2より大幅に減らした意地悪なパターンを与えられたときにどうなるかは把握しきれていない

> fix_cr_handling_of_regex_ANSI.rev3(rev2rev3にバグ発覚rev4)


fix_cr_handling_of_regex_ANSI.rev4

どういうバグだったかというと一括置換をしたときに改行や行文字列末尾付近で過剰に置換が行われないように戻り読みが使えない BREGEXP.DLLのときは検索パターンと置換文字列に細工を施すのだけど検索パターンの置き換え方がまずかった

 誤: /A|B/ -> /A|B((?:\r\n?|\n\r?)?)/
 正: /A|B/ -> /(?:A|B)((?:\r\n?|\n\r?)?)/

選択 | の結合順位は一番低いのでした


バグは CBregexp.cppを好き勝手にいじっていた結果をテトしている最中にたまたま見つかった

  • メンバ関数に constをつけたり
  • 正規表現フラグを指定する引数の型を intから専用のものに変えたり
  • CBregexp::IsLookAhead(const char *pattern)が内部状態を変更してCBregexp::Match()の結果に意図しない影響を与える可能性を排除したり

していたこれは単なる自己満足


 @2009-10-04

不必要に選択範囲が改行にかかっていたケースををさらに減少> fix_cr_handling_of_regex_ANSI.rev5 検索パターンが LF直前や文字列末尾に幅0ッチしそうなときにだけ細工を行うことにしたなんというか盆栽趣味?

バイナリ>sakura.zip


 @2009-11-25

AINI版では LFCRLFCRの間に幅0ッチしそうなときも細工を行わないといけないだろうなやらないけど(LFCR?なにそれ?という立)

* あえて (?<=[^\r\n])$ を使ったつもりでいたけど実は (?<![\r\n])$ の方が最適だった可能性二者の違いは>[[20080528p01]]ただしサクラエタ的には EOFのみの行は存在しない(行番号も表示しない)ものらしいのでどちらのパターンを使っても実際の違いは生じない

 扱うファイルが ASCII onlyという可能性FontLinkッチ<https://sourceforge.net/tracker/?func=detail&aid=1832567&group_id=12488&atid=312488>を自分で当てている可能性はある