キャレット位置の単語がデフォルトに設定されない検索コマンド

提供: MeryWiki
移動先: 案内検索

概要[編集]

文字列が選択されていない状態で「Ctrl + F」を押すとキャレット位置の単語が選択された状態で検索ウィンドウが表示されますが、それを前回検索した文字列が選択された状態にして検索ウィンドウを表示するマクロです。

「Ctrl + F」キーに割り当ててお使いください。

動作[編集]

このマクロは下記のように動作します。

  1. 文字列が選択されていない場合
    前回の検索文字列が入力されている状態で検索ウィンドウを表示
  2. 単一行内で文字列が選択されている場合
    選択した文字列が入力されている状態で検索ウィンドウを表示(Mery準拠)
  3. 複数行に渡って文字列が選択されている場合
    選択文字列の開始位置の単語が設定されている状態で検索ウィンドウを表示(Mery準拠)

注意点[編集]

  • 副作用で1の場合に元に戻す(Redo)の履歴が消えます。

更新履歴[編集]

  • 2018/05/25 初版

ソースコード[編集]

#title = "キャレット位置の単語がデフォルトに設定されない検索コマンド"

/**
 * 下記のように動作する検索コマンドです。
 * 1. 文字列が選択されていない場合
 *      → 前回の検索文字列が入力されている状態で検索ウィンドウを表示
 * 2. 単一行内で文字列が選択されている場合
 *      → 選択した文字列が入力されている状態で検索ウィンドウを表示(Mery準拠)
 * 3. 複数行に渡って文字列が選択されている場合
 *      → 選択文字列の開始位置の単語が設定されている状態で検索ウィンドウを表示(Mery準拠)
 * 
 * 【注意点】
 * ・副作用で1の場合に元に戻す(Redo)の履歴が消えます。
 */

// 1. 文字列が選択されていない場合
if (document.selection.Text == "") {
    // 現在の変更状態を取得
    var isSaved = document.Saved;
    // 現在のキャレット位置を保持
    var pointX = document.selection.GetActivePointX(mePosLogical);
    var pointY = document.selection.GetActivePointY(mePosLogical);
    // 現在のキャレット位置に空行追加
    // (キャレット前方に空白か改行がある状態で検索ウィンドウを開くと前回の検索文字列が入力されている動作を利用)
    document.selection.LineOpen();
    // 検索ウィンドウを表示
    editor.ExecuteCommandByID(2133);
    // 追加した空行を削除
    document.Undo();
    // キャレット位置を復元
    document.selection.SetActivePoint(mePosLogical, pointX, pointY, false);
    // 変更状態を元に戻す
    document.Saved = isSaved;
}
// 2. 単一行内で文字列が選択されている場合
// 3. 複数行に渡って文字列が選択されている場合
else {
    // 検索ウィンドウを表示
    editor.ExecuteCommandByID(2133);
}
スポンサーリンク