sakura-editor / sakura

SAKURA Editor (Japanese text editor for MS Windows)
https://sakura-editor.github.io/
Other
1.24k stars 162 forks source link

カラーマーカー(SourceForgePRからのコンフリクト解消とマージ) #789

Open xsd512 opened 5 years ago

xsd512 commented 5 years ago

SourceForge PR

SAKURA Editor / PatchUnicode / #1069 カラーマーカー https://sourceforge.net/p/sakura-editor/patchunicode/1069/

詳細

Creator: Moca Created: 2016-04-29 Updated: 2017-03-04

カラーマーカーを実装します。
マーカー情報に従い任意のテキスト範囲、行全体、行番号の色スタイルを変更します。

最終patch

v0.14 (2017-03-04)

コンフリクト修正
メニューアップデートのバージョンを2から3へ変更
英語リソース文字列微修正
https://sourceforge.net/p/sakura-editor/patchunicode/_discuss/thread/cd54d216/9e28/attachment/skrw_new_color_marker_v0_14.patch

v0_14用ツールバーアイコン
https://sourceforge.net/p/sakura-editor/patchunicode/_discuss/thread/cd54d216/63e3/attachment/mytool.bmp

その他

かなり大きいパッチなので難しいとは思いますが、何とか取り込めないものでしょうか…。
当方C++素人なので作業できませんが、暇な時にで構いませんので、どうかよろしくお願いいたします。

参考

KENCHjp commented 5 years ago

@xsd512 さん、Issue投稿ありがとうございます。 こういう投稿歓迎します。 今リリースに向けて動こうとしておりますが、軽いかどうか判断の取り組み優先度決めれればと思います。

usagisita commented 5 years ago

みなさんはじめまして。 とりあえず、カラーマーカーのパッチを手動であてて、コンフリクトの解消と一部関連バグを修正したものをこさえてみました。 https://github.com/usagisita/sakura ヘルプが未整備です。あと、データを修正した時に、マーカーがずれる件は未解決のままです。 AppVeyorも登録したのでバイナリ―のテストもできると思います。ご入用であれば参考にどうぞ。

berryzplus commented 5 years ago

はじめまして~:smile: github appveyor チラ見してきました。 結構な修正量で、ええええ~~~っ!と思いました。 対応ありがとうございます。

いま、リリース向けのHTML Helpコンパイルに問題が出ていて、目下その対策にかかりっきりです。 v2.4.0は問題が片付き次第リリースとしたいですが、あと半年はかかると踏んでいます。

その間、他の機能追加は何もせずぼーっとしとくのもアレなので、 新機能取り込みの検討は進めてしまってよいと思います。

個人的に、元のパッチにはいくつか疑問を持っていました。 けっこう「そもそも~」な疑問なので、解消してから導入判断をしたいです。

なんとなく、検索語句の強調機能やブックマーク機能に近いものだと思っていますが、あえて完全新規機能として作りこんだ経緯が分かってないので「何故だ!」と思っています。作ったのもかさんだから、既存に似た機能があるの知らんわけないですし:cry:

usagisita commented 5 years ago

まず、これ(=この機能)何?

指定した任意の文字列や行全体、行番号に色やスタイルをほぼ無条件に指定できます。 例えば、テキスト原稿があって、その人が気になった場所を黄色背景にします。 そして他の人が気になった場所をピンク背景にします。 そのカラーマーカー情報もファイルで保存して渡せば、文章校正などの補助として使えます。 自分一人でもカラーのメモを書いたり、太字で強調したりもできます。 簡易ワープロ機能だと思ってもいいです。文字の大きさ斜体取り消し線などはできませんけど。 検索機能と連携してローカル変数の色分けなどもできますし、カラーコードのサンプル表示もできます。マクロを書けばですけど(以前サンプルとして添付されていました)。 ブックマーク機能は近いんですが、行内のどこかは示すことができません。また複数色種類を設定できないので、不便な場合が多々あります。 検索機能は単語の時だけ5色指定できますが、単語以外には無力です。 何か検索して色をつけて、そのまま「追加で他の文字列を検索したい」なんかのニーズにも使えます。 正規表現キーワードでも色は付けられますが、色数などの上限、ファイル毎ではなくタイプ全体になってしまう、シンタックスハイライトに影響する(任意に設定できない、コメント中の色分けなどは不可能)など、制限があります。 新機能にせずブックマークと統合することも可能ではありますが、そうしない理由はよくわかりません。 ただ既存機能を拡張すると、ゆがみが出たり、互換性を取りづらかったりしそうです。 例えばブックマークはブックマークとして使っているのに、カラーマーカーを使ったらそれも一緒に表示されたら邪魔だと思います。

現状のパッチをほぼそのまま動くようにはしましたけど、細かい仕様、本当にマージするのかなどは検討したほうがいいでしょう。 なおHTML出力、印刷などには未対応です。そもそもサクラの印刷には背景色が適用されていませんので、やるならそこからです。 マーカーの保存読み込み機能はありますが、標準では自動保存はありません。(もっともマクロを書けばできます)

マージは現状では無理だろうし、気長に待つか、別にすぐマージする必要はないと思っているので、その辺はのんびりやればいいと思います。

「とりあえず」です。現状のものでも使いたい人がいれば、どうぞ、という感覚です。 あと手動でマージしたので、漏れミスなんかがあるかもしれません。

他には、こういう意見もありますね。 https://twitter.com/super_rti/status/814879830399299584 ただしマクロで特定位置にマーカーを挿入する機能はあります。 文字列と一緒にHTMLタグみたいにマーカーを設置する便利機能はないです。 InsTextとかInsTextBox?、Outputマクロを拡張するといいかもしれません。 なんか長くなってすみません。動画はどう取ったらいいかよくわからないので、今はちょっと用意できないのでご容赦ください。

arigayas commented 5 years ago

動画は画面キャプチャするソフトで録画してgifアニメとして保存した物を このコメント欄にドラッグアンドドロップすればOKです。

私はこのソフト(ScreenToGif)を使ってGitHubに動画を投稿してます。

xsd512 commented 5 years ago

@usagisita ありがとうございます。今度余裕ある時にバイナリ使ってみます。


これ(=この機能)があると何が嬉しいですか?

私がこの機能を必要とする理由は色々ありますが、重要なことだけ簡潔に説明したいと思います。

一番分かりやすく、使用頻度の高いのが 検索マーク切り替え5色 です。 これは厳密にはカラーマーカー自体の機能ではありませんが、 当時一緒に配布されていた カラーマーカー補助プラグイン (*1) に含まれていたもので、 複数の検索結果を別のハイライト色で強調表示することができます。

検索マーク切り替え5色

{
    var set = Editor.GetCookieDefault("window", "select_hilight_ex", "0") - 0;
    set++;
    set = set % 5;
    Editor.SetCookie("window", "select_hilight_ex", set);
    Editor.SearchClearMark();
    Editor.ColorMarkerDelExtValue(id0 + set);
    // "" で現在の選択文字列をハイライト
    // 0x1000 = オプションを元に戻す
    Editor.ColorMarkerSearchStr("", 0x1000, colorInfo[set] + (id0 + set).toString(16));
}

私にとって、カラーマーカーは、既存の機能と組み合わせることで、サクラエディタの使い勝手を大幅に高めてくれるものです。

これ(=この機能)がないと何が困りますか?

これは 風呂に浴槽が無いと困るか? というような問題になってきます。 BugFixではないので、そもそも使ったことがない人にとっては無くても問題無いとも言えますが、 私にように愛用している者としては、無くなると困ると言えます。


私はどうしてもこの機能が必要なので2016年版を使い続けていますが、最新の更新に追従できないのが辛いので、私は本体に入れば一番嬉しいなと思っております。 自分でコードを書ければ良いのですが、知識・経験が圧倒的に足りなく無力で…よろしくお願いします。

usagisita commented 5 years ago

本題とはずれるしマーカーが必要だと言っておいてなんではありますが、選択5色マクロは単語単位という制約の上でなら、既存機能でも実現できるような気がします。 強調したい単語を選択してマクロを実行を複数回してください。強調の解除は未選択でマクロ実行です。 検索履歴に強調単語リストが登録されたり単語がいつもONになる、他のウィンドウでは黄色になってしまったりいまいちではあるけど、なんとかこんな感じでしょうか。 F3の「次検索」が全ての強調色で移動するなども違います。 これの利点はカラーマーカーと違いコードとか文書を書き換えても色がずれたりおかしくならないところです。 マーカーでも似たようにして検索文字列を覚えておいて、再設定再描画コマンドがあれば、ずれる問題を緩和できるんじゃないかと思います。 本家の正式リリースしか使えないよ!!!みたいな人はこちらをどうぞ。sakura2.2.0.1とかでもたぶん動くと思います。

// 選択単語単位5色
// select_highlight_ex2(検索マーク切り替え5色)を改造して使っています。
function select_highlight_words()
{
    if( Editor.GetSelectedString(0).length == 0 ){
        Editor.SearchClearMark();
        Editor.SetCookie("window", "select_hilight_words_color", "0");
        Editor.SetCookie("window", "select_hilight_words_str", "");
        return;
    }
    var set = Editor.GetCookieDefault("window", "select_hilight_words_color", "0") - 0;
    var nextSet = (set + 1) % 5;
    Editor.SetCookie("window", "select_hilight_words_color", nextSet);
    var searchWords = Editor.GetCookieDefault("window", "select_hilight_words_str", "");
    var searchWordsArray = searchWords.split(' ');
    var newWord = Editor.ExpandParameter("$C");
    searchWordsArray[set] = newWord;
    searchWords = searchWordsArray.join(' ');
    Editor.SetCookie("window", "select_hilight_words_str", searchWords);
    Editor.Left();
    Editor.SearchNext(searchWords, 1);
    return;
}
select_highlight_words();
xsd512 commented 5 years ago

ありがとうございます。 個人的に細かいプラグインを書いているのですが、説明が難しいので、分かりやすい例として検索を挙げました。

部分的に見た目を再現できるというのは、最初の機能説明コメントでusagisitaさんが書いておられる通りだと思います。 同時に、既存の機能を組み合わせただけでは柔軟性に欠ける、というのも指摘されている通りです。

うーん、例が悪かったかもしれませんね。 その他具体例は説明が難しいので、代わりに何が欲しいのか、要件を上げたいと思います。

usagisita commented 5 years ago

@arigayas ありがとうございます。gif動画にしました。 自分が使ってる範囲の一部のうれしい感じ動画を載せます。ちょっと大きくなってしまいました。すみません。 sakura_test_colormaker sakura_test_colormaker2 こんな感じに、いろいろなパターンの色をつけたりがマクロを駆使すれば一発でだいたいできます。 もちろん標準機能を使って手動でワープロっぽくぽちぽちして色つけもできます。 使い方は発想しだいで応用が広いと思います。 こういうことは既存機能ではカバーできないです。

xsd512さん説明ありがとうございます。僕はわりと説明下手なので助かります。pluginを作っているなら色々できますね。

berryzplus commented 5 years ago

みなさま、解説ありがとうございました。 ぼくの中の「そもそも、これ何?」の疑問は解消しました。 次のフェーズに進んでもよい状態だと思います。

PRで新機能を提案するときの通常の流れはこんなんです。 1、新機能の目的を理解してもらう(何が嬉しいか、導入しないと何に困るかを説明する) 2、新機能が目的を果たしているかをみんなで評価する(明らかに足りない機能はここで補う) 3、既存機能と結合して試用してみる(現プロジェクトではココでマージしちゃってます)

フェーズ2はスキップされてるケースが多い気がします。 カラーマーカーについてもスキップでいいと思います。 歴史のあるプロジェクトだとこのほかにテストコードやドキュメントを整備するフェーズがあるんですが、そのへんもスキップでよいと思います。(良くなかったらここにレスが付くでしょう・・・w

あとはPRさえ出れば、しょーもないレビュー突っ込みがいくつか付いたあと、マージされてく認識です。原則として「既存コードに類するもの」としてレビューすることになると思っています。