最終更新: 2012-11-01T13:41+0900
説明が面倒なのと誰も知りたくないだろうから適当に、備忘のためだけに。
%{literal}
の literal
部分で \{
や \}
を使う人間がいるとは思わなかだのに Ruby1.9の rake.rbにこんなパタ
%r{[*?\[\{]}
%r{余分な開き括弧{。間違いはインタープリタを通す前から目立つように}
2のは Rubyインタ
最終更新: 2014-01-02T18:04+0900
なんてことをこの日記の冒頭に掲げたもんだから自分でや
既存アプリに影響があるので良くないけど、bregonigへの暫定的な変更はこう。
} else { /* ERROR */ onig_err_to_bregexp_msg(err_code, NULL, msg); - return -1; + return err_code == ONIG_MISMATCH_INPUTSHORTAGE ? 0 : -1; }
入力が足りなくてマ
鬼車(5.9.2)に「K.Takata's software : bregonig.dll」で手に入る onig-5.9.2-mod.diffを適用したものをさらに変更。マ
や
なんのことはない、影響を受ける既存アプリにはサクラエデ
一行検索(従来動作)してみて、マ
実装は CSearchAgent::SearchWord()に。これ
バstd::wstring("hoge") == L"hoge"
を使
[\s\S]*$
というパタ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が設定されてる場合は無視するとして、そうでないときは入力の長さとマ
そうそう。これこそが hitEnd()の使い道 >Check if string is a prefix of a Javascript RegExp - Stack Overflow コメントの最後に見たことのある名前が☺
PCRE(現在 ver. 8.10)は戻り読みも再帰も(パタ
最終更新: 2010-06-26T01:41+0900
たんなる自己弁護に終始するのでここに書くけど、
他アプリケ
ーシ ョンを見ても、...の使い方はかなり恣意的な様です
だからこそ俺はガイドライン(を紹介するコラム)を紹介したし、MSのアプリしか参考にしてないし、俺判断が入り込まないようにできるだけ緩くガイドラインを適用⁑してはみだした部分だけを指摘したつもりだけど、それでも現状最高うぜ
別コメントへの反応。ダイアログのモ
ああ、いやいや、モ
ツ
こうなると複数あるかもしれないコマンドの使途ではなく、コマンドの名前から主目的を一つ判断して点々の有無を決めることになるだろう。してみると「コマンド名に『アウトライン解析』を選んでいるからには、点々を付けるべきではない」と主張すべきだ
「指定行へジ
アウトライン解析
最終更新: 2016-11-30T10:20+0900
標準では Ctrl+Shift+E。俺は Ctrl+Deleteに割り当てた。
で、使
削除前に一瞬、行全体が選択されるように見えるので、このときにスクロimprove_delete_line.patch(5.2KiB)
実際は削除に使
improve_delete_line.rev1_1.patch(5.5KiB)
フラグ自体は立
最終更新: 2012-10-27T00:23+0900
その一(20090808p03)がだらだら長くな
ひどい。「/*」を入力して後ろの行がコメント色一色にな
行をまたぐ色分けに問題があ
脳log[2009-08-08-p03] サクラエデって、たとえば一画面に収まらない長大な複数行文字列があ ったとして、何度も上下にスクロ ールしたり改行を入力したりするだけで色分けが変わ ってしま っていた ィタの正規表現キ ーワ ードを SHJS相当にしたい。 @2010-04-14 バグ修正
本当にそうなら、泥縄式バグ潰し無間地獄へ突入ですな。消火行為が点火に直結した効率のいいマ
まさしく > たぶんこれが関係する。
そのときの変更にこんなコメントが添えられているのを発見した。「IsInsideKeyword()から呼ばれたときは精算したらダメ
別の場所で不必要にキ
変わりうる。一行の色分けは一時(いちどき)に、他の行の色分けを挟んだりせずに終わらせなければいけない。正規表現キ
最終更新: 2011-01-02T16:45+0900
SAKURA Development BBS (ANSI)のログが 10ペ
過去ログを見つけた。>http://groups.yahoo.co.jp/group/sakura-editor/files/User/bbs-log/
Subversionが最初からあ
S:27,*,01/02/11,10:49,, T:横スクロール時の動作 N:げんた M: 現在のこのエディタはWM_HSCROLLが来たら横スクロール量を決定して画面全体を書き直す動作を行います。もし、画面全体を書き直す代わりに新規部分のみを書き直せば高速化すると思われるかも知れませんがそうはいきません。 なぜなら、このエディタは色分け情報をメモリ上に保持していないため、描画の都度行の先頭から調べて色を決定しているからです。その際キーワードの検索も行います。たぶん、これがかなりの処理を必要としているのだと思います。 横スクロール速度を劇的に改善しようと思ったら色分けを予め行ってその情報をメモリに保持するようにしないと難しいのではないでしょうか。
gdippを使
S:114,*,01/03/02, 2:32,, T:コントロールプロセスの起動方法 N:げんた E:genta@i.am M: 外部エディタを監視するプログラムからテキストエディタを使うとき、エディタが常駐していないと起動したプロセスは管理プロセスとなってエディタ画面は別プロセスで動作するため、編集終了の検出が正しく行えない場合があります。 自分が管理プロセスになるのではなく管理プロセスを別に起動して起動完了まで待機するような作りにできればこの問題が解決できるなぁと思いました。
タブモ
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が管理すれば良いような気がします. 上記内容を納得した上で私が確認した限りでは特に問題はないように思います. --- 実装に入る前に設計に対する議論を行うことは有意義だと思います.これまでは議論する相手がいなかったので...(;_;)
タイプ別設定を共有メモリから追い出すアイデ
設定の場所を隠蔽するクラスも構想されている。それのメリ
の 3を、2との差分とすることで基本的な設定の共通化(基本設定による)を図りつつ、設定の読み出しを一本化できること。
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.選択を解除したあとは普通にカーソル移動 (省略)
フ
S:1759,*,02/03/23,11:01,, T:バックアップごみ箱問題 N:みく M: ネットワークドライブまたはリムーバブルドライブのファイルを ごみ箱に放り込むとOSの仕様により消滅してしまいます。 バックアップしたつもりがされてないという現象を避けるため、 これらのドライブの場合はごみ箱に放り込まないようにしました。 次回版にでも取り込んでください。 どうしてもごみ箱に放り込みたい場合は、 「指定のフォルダに作成する」でフォルダにローカルドライブのフォルダを 指定し、さらに「バックアップをごみ箱に放り込む」を指定してください。 (指定のフォルダにごみ箱を直接指定することはできません)
最近見かけたリム
自分はバ
>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'
たかだかテキストフ
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に)固定されるという機能があるから (省略)
なんぞそれ>「実行フ
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直打ちに近いブログに投稿する以外に、正規表現キ
それにしてもこの wmlhq(自称)という人は……。掲示板の閲覧者はする~かが試されている(笑) 関わりたくはないけど知識とエネルギ
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)」になるだけでも十分ではないのかなあ。
$
が行文字列末尾にマ(?:)
が改行文字の後ろにマ調子に乗
みたいにしてできるかも。複数行検索モ
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も見つけ出してきた。
「COOLなURLは変わらない」ということを、リンク切れを発見するたびに思い出す。この二つの 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であ//k
が入力必須で面倒だ//k
を自動付加するようにしてみたけどまだ \
にエスケ@
や %
などパタ
* BREGEXPの Bは BASP21の Bと同じ BABAの Bのはずで、BASP21は WSHから利用できるオ
最終更新: 2011-01-12T18:23+0900
CShareData::IsPathOpened()が、起動している他のエデ
長々と色分けをしてるのがビジ
SendMessage()の怖さを語
最終更新: 2011-01-02T16:57+0900
/* 現在位置より前の位置を検索する */ 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に書いた*結果の一部が上のコ
gotoを使
まあ、bRedoはわからなくもない。いや、使われている部分を確認しないとわからないのだが、retriedだ
あ、上のコ
もうひとつ問題が見つか
CViewSelectの修正がないと、マ
範囲選択中でないときは幅0マ
「aaaaaaa...」というテキストを、F6による選択ロ
誤) SEARCH_PREV, SEARCH_NEXT
正) Command_SEARCH_PREV, Command_SEARCH_NEXT
すべて置換の無限置換対策として「m_pCommanderView->GetDrawSwitch() // 全て置換の実行中じ
CViewSelectの変更がステ
F6でロ単語文字列をデフ
CViewSelect.IsTextSelected()には、0文字選択を含むのか含まないのかは
そもそも、keepCurrentSelectionの条件に CViewSelect.IsTextSelected()は不要に思えるのでこれを外すことで対処。元のソ
「末尾から再検索しました」が表示されないのは、条件が「先頭から再検索しました」と同じにな
「CViewSelect.cppの修正は、幅0なら何もしないのではなく、 (略)」 else節で「pSelect->Set(ptCaretPos);」と同じことをしていたつもりです。また「m_nLastSelectedByteLen = 0; // 前回選択時の選択バイト数」の扱い方がわか
コメントで指摘されて rev2で導入した sel.IsTextSelected()を sel.IsTextSelecting()に変更したのは、CViewSelectの変更を取り消したことによ
「本の虫: シンタ
ifの条件文に && や || が 3つも 4つも連な
http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&revision=1724
とにかく無限ル
* 「# 幅0の上検索がいつまでもその場足踏みしてないで上へ進むように修正。
# キ
⁑ CViewSelect.IsTextSelected() -> return CLayoutRange m_sSelect.IsValid() -> return CLayoutPoint m_ptFrom.BothNatural() && CLayoutPoint m_ptTo.BothNatural()。BothNaturalという名前だけど、実際は xと yが共に 0以上かどうかをテストしている。選択範囲の始点と終点の X,Y座標がすべて 0以上のとき CViewSelect.IsTextSelected()は trueを返す。
♭ ななしfix_searchword_selection_with_selectinglock_on 置換前:$ 置換後:..
♭
ななしてけと
♭ ななしや、 3158: (sel.IsTextSelected() && matchLayoutRange.GetF..
♭ ななしrev2 「先頭(末尾)から再検索する」をONにしているのに、 末尾から再検索しても「▲末尾から再検索しました」 が..
♭ ななし「選択幅ゼロ」は自明なので一切表示しなくていいと思います。
♭ ななしCViewSelect.cppの修正は、 幅0なら何もしないのではなく、 以下のようにしたほうが良くないですか? ..
♭ ななしrev2です。 abc というテキストで、 置換前:abc 置換後:xyz 先頭(末尾)から再検索する:ON 置換対..
♭ ななし※同じく、置換後を abcxyz、置換対象を[選択文字(0)]としても起きた
最終更新: 2010-04-08T22:28+0900
参照(説明の丸投げ)> 萌デ
SHJSと萌デ
SHJSの場合は、JavaScriptであることと eval()で評価されることを利用して、ネイテ
今日試しにダウンロ
・<<(["'`]?)(\w+)\1 .... ^$2$ ヒアドキュメント1。後ろのディスクリプターは行内に唯一でなければ ならない。
右側の検索文字列には、後方参照が使えます。 左側で()でくく
ってグル ーピングしたマ ッチ文字列を、 右側の検索文字列の中で取得できます。 取得するには、 K2Editorの置換機構の 後方参照と同じように、$1,$2などを使います。
\1、\2でなくて $1、$2だから、右側のパタ
SHJS(と萌デ
formatted_text = <<TEXT.strip.gsub(/\t/, " "*8) TEXT
texts = [<<TEXT1, <<TEXT2] TEXT1 TEXT2
こんなんどうする?
最終更新: 2009-12-06T02:34+0900
たとえば、http://sakura.qp.land.to/?Junk%2F31 で展開されている GNU Global対応。息の長い支持があるが本体に取り込まれてはいない。こういう万人向けでない機能がプラガブルにな
プラグイン化を推し進めると、不要な機能をそぎ落として、メニ
い
なんでもできるエデ
でも実際は、エデ
という要素を自分は求めている(らしい。サクラエデ
この展開の着地点を Windows ということにしてみよう。エデ
最終更新: 2009-11-19T05:26+0900
すくなくとも幅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; }
隠し機能がでてきましたよ。>「矩形選択時のSPACE/TAB動作に手を入れる場合、実装上、>>dev:4103 あたりのSPACE/TABインデント仕様を実現するための実装部が絡んできそうです。」
これだから迂闊なことはできない。自分用だと自分が使う範囲で問題がない限り気にしないで済むけど。
リンク先で議論されている桁揃えのためのインデント(条件によりタブやスペ
矩形選択はつ
挿入位置の文字の末尾が矩形選択範囲に含まれていないときにインデント用の文字を入力しないことで、インデント揃えができるように追加修正した版 > fix_indentation (4.1KiB, diff to trunk2@1674)
矩形選択時、その範囲内に文字がない状態でインデントすると桁が揃うようにスペ
hor氏のヘルプースを補完します。それ以外の場合、範囲内に文字のない行はインデント対象外になります。
「範囲内に文字のない行」は考慮外だ
あいう abc
というテキストの一桁目(「あ」の前半と「a」)や、
^ ABC DEF
というテキストの一桁目(タブの前半と「D」)を矩形選択してタブやスペ
一応入力された文字の幅を考慮して右移動しているけど、右移動を行うのが選択範囲の一行目だから、この場合一回右移動するだけで行き過ぎてしまう。
それも修正 > fix_indentation.rev2 (5.3KiB, diff to trunk2@1674)
問題の存在がわかれば叩きようも考えられるけど、それがわからなければ手の打ちようがない。テスト重要。
どうして、(幅のある)文字の先頭部分が矩形選択範囲に含まれているときだけインデント用の文字を挿入、ではなく文字の末尾が含まれているときだけ、なのかといえばおそらく、そうでないとインデントの桁揃えができないから。実際に試してみればすぐわかるけど、文字の先頭を条件にするとほとんど常にインデント文字が挿入されてしま
現在認識している問題点。
入力がインデント用の文字のときにも矩形選択の幅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に変更してしま
指摘を受けて修正。原因は rev2のタイポ。指摘を受けたケ
本腰を入れて読んでいなか
つ
あいうえお 1かきくけこ
という行で幅1矩形選択をしてインデント用の文字を入力するとおかしな事になる。文字を挿入するときは幅0選択でいいじ
「ptLayoutNewを使
オプシ
とりあえずインデント文字のうちスペ
また従来は矩形選択範囲が折り返し桁に達した場合、行番号はそのままで選択範囲が行頭に移動して循環していたが、折り返し桁でとどまるようにな
折り返しといえば
1|ABC< 2|DEF< 3|GHI<
CFIを矩形選択して _を入力したとき、_が Fと Iの直前に入力されるわけではないというのはどう考えられているのだろう。これがあるから矩形選択入力と折り返しを組み合わせてはいけない、どんな結果も期待してはいけない、と思
タブが入力されたときもおかしなことにならないように改善した。>fix_indentation.rev6 (8.4KiB, diff to trunk2@1674)
原因はインデント文字の入力をスキ
テスト。1行目と 2行目をどこでも幅1矩形選択してタブを入力する。最初に選択した文字が取り残されないことを確認する。
あいうえお 1かきくけこ
4タブ設定で「う」の前半と「き」の後半を幅1矩形選択してタブをいくつか入力したとき、初回だけ「う」が後ろに行きすぎる。これはもうあきらめている。
0123456789 あいうえお 1かきくけこ (TAB幅は4の設定) で、1行目の「4」の左から3行目の「き」の右までを矩形選択(幅1桁)して TABを3回入力すると、1行目の「4」の左右にTABが入ります。
これは、「これはもうあきらめている」(@2009-11-09)ケ
行番号が55行ほどずれてしま
っています...
う
Editor.Char(9) と Editor.IndentTab() の使い分け
すでに BOOL bIndent引数が存在するのだからこれを厳密に適用しようということですね。悪くないと思いますし、対象も重な
矩形選択範囲がタブ境界にあり、全角文字の前半分が範囲からはみ出しているときにタブを挿入すると、行によりタブの幅が最小と最大にな
あいうえお 1かきくけこ で、「い」の左から「き」の右まで矩形選択します。 まず、「さ」を入力します。 次に、「a」を入力します。 結果、1行目には「さ」の手前に「a」が入ってしまいます。
不安に思
TABを含めた文字列をクリ
ップボ ードから貼り付けた場合
この場合はインデントではありませんし、揃えることよりもクリ
'int' から 'CLayoutInt' に変換できません。
直しました。個人的にデバ
二、三日前から毎日これぞ決定版fix_indentation.rev8 (10.8KiB, diff to trunk2@1674)
selectionIsOutOfLineの判定条件が(たぶん)おかしいです。 (括弧が足りてない気がします)
詳細なレポ
一日を失う手痛いミス >fix_indentation.rev8.1 (10.8KiB, diff to trunk2@1674)
インデント揃えにからむ機能のオンオフを機能の割り付けでコントロ
タブインデントとタブ文字の入力を区別。>fix_indentation.rev9
矩形選択入力で、(TABインデントや SPACEインデントによらない)タブやスペ
rev9.1を眺めていて、従来の動作に疑問。テキストが選択されていなか
わか
矩形選択で、改行文字の手前にインデント用の文字(タブとスペ
ABC ABC
Cの後ろを幅0矩形選択してスペ
矩形選択範囲の先頭が全角文字やタブなど幅広の文字のとき、インデント用の文字の挿入が桁揃えのためにスキ
あいう abc
一桁目(あの前半とa)を矩形選択してスペ
矩形選択範囲が全角文字の前半ばかりを移動してしまい、スペ
あいうえお 1かきくけこ
1行目と 2行目をどこでも幅1矩形選択して、スペ
矩形選択してタブを入力したとき、最初に選択されていた文字を置いてきぼりにして選択範囲が後ろに移動したりしない。
あいうえお 1かきくけこ
1行目と 2行目をどこでも幅1矩形選択して、タブをいくつか入力し、最初に選択した文字が範囲内に残
(何人いるのかわからない)ななしさんに協力してもら
追加修正もあるようで、
元に戻
ダウンロ
「GNU patchが5年ぶりにバ
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 にまさにその手順が書かれていた。ぱ
♭
ななしデバ
♭
ななしrev8です。 あいうえお 1かきくけこ 0123456789 「い」の右側から、3行全部を0幅選択してスペ
♭ ななしrev8.1でOKな気がします。 いい感じ (^^)
♭
anonymouse「1文字のTAB/SPACE入力が必ずインデント扱いにな
♭
ななし念のため。 上記の、 ・タブキ
♭
ds14050ええと、具体的にどういう動作が不満で、どういう結果になるのがよいのでし
♭
ななし行末を超えた位置にも通常文字は入る。 SPACEキ
♭ ds14050この部分ですね。 ---- if( nDataLen == 1 && IsIndentChar( pData[0] ..
♭
ななしnDataLen == 1 && IsIndentChar( pData[0] ) なんていう条件だと、 クリ
♭
ななし> 選択範囲が一行だけだ
♭
ds14050>1字のSPACE/TABという条件は、コ
♭ ds14050どうしようもないな。「元の挙動を残し」た。<<<大嘘
♭
ds14050なんかもうぐだぐだだけど気づいてしま
最終更新: 2011-12-20T23:29+0900
発端はこれ > 「折り返ししている物理行末を、キ
折り返し桁に到達した瞬間、次の行の始めにキ
いいだし
ざ
いじ
矩形選択をキ
矩形選択を上下左右矢印で解除したときはカ
取り残されるよりはましだろうと思
別件。選択を矢印で解除するとき、右(左)矢印だ
さらに別件。キ
違うなあ。フ
した。
たぶん、二行下移動(そういうコマンドがあ
と思
ち
ツ
今のサクラで、選択を上下左右の矢印キ
ーで解除するときの挙動は、秀、Em、MS Wordなどと同じ動きです。
秀丸エデ
(折り返し位置の1字手前から次行に移動する)も、概ね多くのエデ
ィタと同じ動きだと思います。
これ、キ
書いてるうちにさらなるツ
通常選択や通常カ
ーソル移動の仕様変更するのは本末転倒かな。
「本末転倒」はそうだ
二人とも、矩形選択中にキ
自然にこうなるはずもなし。 先人の意向ということで。
レガシ
個人的な主張や好みはおいておいて、波状攻撃をくら
SourceForge.net: Sakura Editor: Modify: 2889930 - 矩形選択中にキ
最終更新: 2013-04-29T21:18+0900
いままでは、Alt+矢印で矩形選択モ
2000年にはそのための布石というか、コメントアウトされたプレ
Sakura Editor / PatchUnicode / #449 矩形選択移動コマンドの追加
俺みたいにありもののコマンドで間に合わせるのでなく、足りないコマンドの実装までされています。
今思うと矩形選択しながらの、(折り返しでない本当の)改行単位での行頭・行末移動は不要だ
残念なのは、既存ユ
最終更新: 2016-03-05T00:30+0900
経緯 > サクラエデ
差分 > fix_cr_handling_of_regex(下に修正版がある)
お試し > sakuraW.zip (547KiB)(下に修正版がある) (正規表現検索・置換を試すには bregonig.dll(Unicode対応版)が別途必要)
検索、置換を数度試したが機能しているみたい。ただ、$ が本当に改行の手前でマ
^.*$
を空文字列に置換するという最初に提起されたケ
^.+$
あるいは、エデ
.+
で良い。
「正規表現 - SakuraEditorWiki」を見ていて気付いた。\c[、\c]、\c$、\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
制御文字なんて扱
一括置換で $ が CRLFの CR直前、LF直前、LF直後(正規表現DLLに与えた文字列末尾)の三カ所にマ
逐一、置換を実行した場合は問題ないことを確認していたのだが、一括置換はライブラリに全部お任せで、検索開始位置を調整することもできないから動作が違
急いで修正 > fix_cr_handling_of_regex.rev2、sakuraW.rev2.zip (547KiB)(さらなる修正版 rev3が下に)
初めて戻り読みを使
\C-X、\M-X というのは Ruby向けなのかも。サクラエデ
対処 > fix_cr_handling_of_regex.rev3、sakuraW.rev3.zip
<追記>bregonig.dllでは \c\X が \cX の意味になるとか。もう知らね
個人プロジ
2.非対応となっているBREGEXP.DLL(ANSI版)への対処方法 ANSI版とUNICODE版は別仕様としてしまうのか?
使用できる正規表現自体が別物なので BREGEXP.DLLは CBregexp::MakePattern()でよいかと。ユ
<追記>ANSI版+bregonig.dll向けのパ
<追記>BREGEXP.DLL版も用意した。>_ANSI.rev2 >_ANSI.rev3</追記>
3.$ が改行なし最終行のEOF手前ともマッチするように改善すること $ を (?=\r\n?|(?<!\r)\n|(?<[^\r\n])$) に置き換える方法を試してみたけどエラーで動きませんでした。
肯定の戻り読みは (?<=) でした(なにせ使用経験がないもので)。気を取り直して、パタ
「以前は行われていたのだろうか?」< 行われていなか
4.検索強調表示が検索時の選択反転表示と一致すること $ を (?=\r\n?|(?<!\r)\n) に置き換えた版で $ を検索すると、改行文字自体は選択反転表示にはならない(マッチしない)のに検索強調表示されている。 また、なぜか上方向検索では改行文字自体にマッチしたかのように選択反転表示になる。
$で検索したときに改行文字が強調表示されるのは、幅0のハイライトには意味がないので、実用面から今のように最低でも幅 1を保つべきだと思
上検索で改行が選択されてしまうのは間違いなので修正したい。これまでが、知らず $ が改行にマ
修正した(rev4)。無限ル
5.正規表現キーワードでの $, . 指定も検索・置換と挙動が一致すること 現状、正規表現キーワードには $, . に検索・置換でやっているような細工が入っておらず、素の正規表現ライブラリ挙動になっている模様。 検索・置換時の . の細工([^\r\n]への置換)が追加されると、今よりも差異が大きくなって混乱しそう。
すでに書いたように、. が \r にマ
\r\n$ みたいな書き方をしていた場合にマ
6.検索・置換や正規表現キーワードの複数行対応への順応性
ノ
>fix_cr_handling_of_regex.rev4、sakuraW.rev4.zip
2ch民は 1.6.5.0をつかうのね。♥マ
Unicode版Revision1662>http://sakura-editor.svn.sourceforge.net/viewvc/sakura-editor?view=rev&sortby=date&revision=1662
Ansi版Patch>http://sourceforge.net/tracker/?func=detail&aid=2869238&group_id=12488&atid=312488
勘違いしていた。Unicode版のサクラエデ
だ
>>> DLL初期化時に呼ばれる仮想関数がありました。(そのたびにチ
CheckRegexpSyntax() は癌だ。検索ボタンを押すたびに DLLのロ
や
おまけとして、bregexp.dllだけが sakura.exeの隣にある状態でエデ
本当は CBregexpが CDllHandlerを継承するのをやめて分離して、1つの CDllHandler(DLLインスタンス)を多数の CBregexp(BREGEXP構造体)から参照するのがいいのかも。も
いまの CBregexpは InitDll()を呼び出されて、途中で違う正規表現ライブラリを読み込まされたとき、コンパイル済みの BREGEXP構造体を正しく解放できるのだろうか?
BREGEXP.DLLでも . と $ を置き換えるようにしてみた > fix_cr_handling_of_regex_ANSI.rev2(下に rev3)
副作用があ
ついでに気にな
表示としては ↵ も ⇠ も ⇣ も同じ一字だから CLayoutのすることにも一理あるのかもしれない。それなら改行文字の部分の選択領域をせめて全角幅にして検索結果のハイライト部分と大きさをそろえよう。
ANSI版の View関連のソ
あたり、なんとかならんかな。検索結果の選択範囲とハイライト領域のずれが気になる。
ANSI版を BREGEXP.DLLと組み合わせているときに、不必要に改行が検索結果に含まれてしまう場合を rev2より大幅に減らした。意地悪なパタ
> fix_cr_handling_of_regex_ANSI.rev3(rev2と rev3にバグ発覚。rev4へ)
fix_cr_handling_of_regex_ANSI.rev4
どういうバグだ
誤: /A|B/ -> /A|B((?:\r\n?|\n\r?)?)/ 正: /A|B/ -> /(?:A|B)((?:\r\n?|\n\r?)?)/
選択 | の結合順位は一番低いのでした。
バグは CBregexp.cppを好き勝手にいじ
していた。これは単なる自己満足。
不必要に選択範囲が改行にかか
バイナリ>sakura.zip
AINI版では LFCRの LFと CRの間に幅0マ
♭ FILEここにもありますよ。 http://sakura.qp.land.to/?OtherDoc%2FIncmLogsto..
♭ ds14050おお っ、2008年4月まである。楽しみが増えました。情報ありがとうございます。