Sakura: ダブルクリックして選択範囲と同じ単語をハイライトしてほしい

Created on 28 Sep 2018  ·  6Comments  ·  Source: sakura-editor/sakura

サクラエディタのマクロの機能で実現可能なのですが、標準の機能として実装して欲しいです。
ダブルクリックして選択範囲と同じ単語をハイライト - Macro/投稿/116 - SakuraEditorWiki

このマクロの不満点としては、検索履歴にどんどん残っていくのが不満なのです。
設定で

  • ダブルクリックして選択範囲と同じ単語をハイライトするか否か
  • 検索履歴に残すか``残さないか

を決めることが出来たら嬉しいのです。

サクラエディタのマクロ

sakuraeditor_doubleclick

Notepad++ダブルクリックして選択範囲

notepad doubleclick

比較として Notepad++ を挙げましたが、こちらはハイライトした単語だけが
検索文字列として配置されるだけで検索履歴には残りませんでした。

あとマクロで実現していますが、
全角スペースや半角スペースやTabスペース等がわかると嬉しいので、
空白文字はハイライトされて欲しいことも明言しておきます。

document enhancement

Most helpful comment

使い回しのやっつけですがこういうことではないのですか?

// 【FindNextSelected.js】
// Visual Studio の[編集.次を検索選択範囲(Ctrl+F3)]もどき

var SearchFlag = {
    WORD_ONLY:1, CASE_SENSITIVE:2, USE_REGEX:4, SHOW_NOTFOUNDMSG:8,
    AUTOCLOSE_DIALOG:16, RETRY_FROMTOP:32, RETRY_FROMBOTTOM:32
};

function QuoteRegexMeta(str)
{
    return str.replace(/[\\[\](){}*+?.^$]/g, "\\$&");
}

function main()
{
    var mysetting = SearchFlag.WORD_ONLY | SearchFlag.USE_REGEX |
        SearchFlag.AUTOCLOSE_DIALOG | SearchFlag.RETRY_FROMTOP;

    if (! Editor.IsTextSelected()) {
        Editor.SelectWord();
//      return;
    }
    var searchstr = (mysetting & SearchFlag.USE_REGEX ? QuoteRegexMeta : String)(Editor.GetSelectedString());
    Editor.Left();
    Editor.SearchNext(searchstr, mysetting|0x800);
//  Editor.CurLineCenter();
}

main();

検索履歴と、検索文字列入力欄の初期値は区別する必要があるみたいです。

All 6 comments

@arigayas さん、Issue立てありがとうございます。
1点

全角スペースや半角スペースやTabスペース等がわかると嬉しいので、

こちらについては、各々タイプ別設定のカラーで、TAB記号、半角空白、日本語空白で色付けすると、判別可能ですが、こちらで代替えできますでしょうか?

長文のドキュメントを編集する時(1)に
通常時は空白文字の色と背景色が普通が良くて(
2)
image
スクリーンショットの説明:_半角スペース2個、Tabスペース、abc abc def ghi jkl、半角スペース1個・・・_

ダブルクリックで(TAB記号、)半角空白、日本語空白がハイライトされると
空白文字で字下げが統一されているのかどうか一目でわかったり、
余計な空白文字があるのかどうかわかるので代替えはちょっと考えにくいです・・・。
image

*1:例えばニコニコ大百科など多人数で編集するサイト
*2:色のセンスが無くてゴチャゴチャしてしまうのでなるべく使用される色数は少ない方が読みやすいですし。

@arigayas さん
ありがとうございます。前向きに検討させていただきます。

だんだんと「欲しい機能」をあげていただけるようになってきたように感じています。
とても嬉しい限りです。

実装できるメンバーもレビューできるメンバーも限られているので
実現に向けてすぐに動けないのが 「まだまだだね」なところです。

Macro/投稿/116 - SakuraEditorWiki

このマクロの不満点としては、検索履歴にどんどん残っていくのが不満なのです。

ちょっとだけ中身見ました。
っていうかこれ、.macファイルですね・・・(PPA機能廃止すると使えなくなるじゃん :cry:

検索履歴に残らないようにする方法がありそうだったので
ちょっとだけ追ってみましたところ、壊れてるみたいでした。
C++側修正しないと履歴には残る感じです。

検索機能には近々手を入れますんで一緒に対応しようと思います。
もうしばらくお待ちください。


以下、調査で発覚したバグの内容説明です。

マニュアルに従って、履歴に登録しない版javascriptマクロを書くとこんな感じになります。
コードなのでリンク効いてないですが、サクラエディタにコピペすれば(ry

// 現在位置の単語選択
// https://sakura-editor.github.io/help/HLP000045.html
SelectWord();

// 検索マークの切替
// https://sakura-editor.github.io/help/HLP000136.html
//SearchClearMark(); // ←元マクロはこれになってた

// 現在の選択状態を取得
// https://sakura-editor.github.io/help/HLP000268.html#IsTextSelected
if (IsTextSelected() == 1) {
  // 選択中文字列を取得
  // https://sakura-editor.github.io/help/HLP000268.html#GetSelectedString
  var word = GetSelectedString();
  // 次を検索(オプション:単語単位+履歴に登録しない)
  // https://sakura-editor.github.io/help/HLP000061.html
  SearchNext(word, 0x01 | 0x800);
}

これを動かしてみたところ、検索履歴にシッカリ登録されてしまいました。
マクロからの「検索」機能には、「検索履歴に登録しない」オプションがあるはずですが、
どうも動作していないっぽいです。


原因としては、ここのパラメータの取り方が間違ってそうです。

https://github.com/sakura-editor/sakura/blob/e6115a8c81368c07158ddb5a4204fbd6745e16b5/sakura_core/macro/CMacro.cpp#L753-L754

また、以下のコードにより検索ワードは履歴に登録される仕様に変わった模様です。

https://github.com/sakura-editor/sakura/blob/e6115a8c81368c07158ddb5a4204fbd6745e16b5/sakura_core/cmd/CViewCommander_Search.cpp#L117-L118

う~む。

前向きに検討していただきありがとうございます!!
恐らく次の2.4.0がリリースされたら機能追加要望が増えると思います。

使い回しのやっつけですがこういうことではないのですか?

// 【FindNextSelected.js】
// Visual Studio の[編集.次を検索選択範囲(Ctrl+F3)]もどき

var SearchFlag = {
    WORD_ONLY:1, CASE_SENSITIVE:2, USE_REGEX:4, SHOW_NOTFOUNDMSG:8,
    AUTOCLOSE_DIALOG:16, RETRY_FROMTOP:32, RETRY_FROMBOTTOM:32
};

function QuoteRegexMeta(str)
{
    return str.replace(/[\\[\](){}*+?.^$]/g, "\\$&");
}

function main()
{
    var mysetting = SearchFlag.WORD_ONLY | SearchFlag.USE_REGEX |
        SearchFlag.AUTOCLOSE_DIALOG | SearchFlag.RETRY_FROMTOP;

    if (! Editor.IsTextSelected()) {
        Editor.SelectWord();
//      return;
    }
    var searchstr = (mysetting & SearchFlag.USE_REGEX ? QuoteRegexMeta : String)(Editor.GetSelectedString());
    Editor.Left();
    Editor.SearchNext(searchstr, mysetting|0x800);
//  Editor.CurLineCenter();
}

main();

検索履歴と、検索文字列入力欄の初期値は区別する必要があるみたいです。

@ds14050 さん
検索履歴に残らないけど検索文字列入力欄にダブルクリックして選択した文字列が入るマクロを
作成していただき誠にありがとうございます!!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

kobake picture kobake  ·  50Comments

arigayas picture arigayas  ·  34Comments

EldersJavas picture EldersJavas  ·  33Comments

m-tmatma picture m-tmatma  ·  59Comments

KENCHjp picture KENCHjp  ·  41Comments