テキストエディター「Mery」ベータ版 Ver 3.0.4 を公開、矩形編集とマルチカーソルに対応

テキストエディター「Mery」リリース候補版 Ver 3.0.4 を公開、矩形編集とマルチカーソルに対応

自粛ムードも徐々に緩和されつつあるようですが、まだまだ油断はできません。大変な時期ではありますが、テキストエディター「Mery」の動作検証、開発支援にご協力いただきありがとうございます。

正式版のリリースに向けて調整中につき、大きな機能追加や仕様変更は行っていませんが、そこそこ良い感じに仕上がってきたのでリリース候補版ということで公開してみます。

雑談

ところで最近、マイクロソフトが Win32 と UWP を統合するという計画「Project Reunion」を発表したとのことで話題になっていました。

Windows 8 以降、Win32 アプリをクラシックアプリなんていう悲しい名前で呼んだり、OS の新しい機能を UWP アプリからしか使わせなかったりとひどい扱いをしてきたにもかかわらず、「やっぱ Win32 アプリいるわ」と手のひらを返したマイクロソフト。

そう思ったのかどうかは知りませんが、従来は UWP アプリからしか使えなかった WinUI を Win32 アプリからも使えるようにして、自ら終わらせようとしていた Win32 アプリを復活させるという。

例えばモダンなデザインのボタンやチェックボックス、ダークモードや Fluent Design System のような OS の機能などが Win32 アプリから簡単に利用できるようになるのは興味深いところです。

かくいう Mery も Win32 アプリですが、Vista のときや 8 のときでマイクロソフトの方針変更についていくのには懲りたということもあって、Windows の新しい機能をなるべく盛り込まないようにしていて正解でした。

とはいえ、若干、ダークモードを自前で実装しつつあったので危ないところでした。

ブロックス BJV44

ブロックス BJV44
マテル(MATTEL)
テレビゲームに飽きちゃったらコレ。室内で、家族で遊べる思考型戦略ゲーム。
Amazon で探す 楽天市場で探す

スポンサーリンク

矩形編集に対応

矩形選択は従来からできましたが、あまり表に出ていない機能なのでご存じないかたもいらっしゃると思います。

矩形編集の使い方

矩形 (くけい) 選択は箱型選択やボックス選択、ブロック選択などとも呼ばれ、横書きのテキストを横方向ではなく縦方向に選択するための機能です。

ちなみに、矩形 (くけい) というのは長方形のことで、「短形 (たんけい)」ではありません。

矩形編集の使い方 1

矩形で選択するには、Altを押しながらマウスで範囲を選択するか、Shift+Altと方向キーでカーソルを移動します。

矩形の選択範囲は、テキストを縦方向に切り取ったり貼り付けたり、すべての行頭の文字を削除したりなどの操作ができます。

が…、ここまでは従来のバージョンでもできました。

矩形編集の使い方 2

本バージョンでは矩形選択の状態で文字を入力または削除したときに、選択範囲に含まれるすべての行を同時に編集できるようになりました。

コピーしたテキストの貼り付けやマクロを使った文字入力などの操作も、それぞれの箇所に対して同時に行うことができます。

矩形選択した状態での [選択した範囲のみ] の置換も正確にできるようになりました。

矩形選択の操作

矩形選択

  • マウス: Altを押しながらドラッグ
  • キーボード: Shift+Alt+ or or or

矩形選択の解除

  • マウス: どこでも良いのでクリック
  • キーボード: 方向キーなどで移動すると自動的に解除されます

行末を超えて移動

  • マウス: Altを押しながらクリック
  • キーボード: Alt+ or or or

カーソルが行末を超えた状態で文字を入力すると、行末を超えた桁数のぶんだけ半角スペースが挿入されます。

矩形選択や編集などの操作は等幅フォントの使用が前提となっています。プロポーショナルフォント (文字によって幅が異なるフォント) の場合、矩形が乱れたり、桁数が合わなかったりします。

マルチカーソルに対応

マルチカーソルというのは、画面上に複数のカーソルを表示して複数の箇所を一度の操作で同時に編集できる機能です。

マルチカーソルの使い方

マルチカーソルの使い方 1

Ctrlを押しながらクリックすると、新たなカーソルが追加されます。

複数のカーソルは連動して動作しますが、単語ごとの移動や行末への移動などの操作はそれぞれがテキストの内容に応じて独立して動作します。

例えば、複数のカーソルが配置されている状態でCtrlを押しながらを押すと、それぞれのカーソルが現在位置の単語の左・右に移動します。

なんだかグラディウスのオプションのように追従してくる複数のカーソルに最初は戸惑ってしまうかもしれませんが、慣れてくると 1 度の操作で複数の箇所を同時に編集できる感覚はテトリスの棒を落としたときのような快感になります。

マルチカーソルは複数の選択範囲を作成することもできます。

操作は簡単。これも先ほどと同じで、Ctrlを押しながらいつもどおりマウスで範囲を選択するだけです。

マルチカーソルの使い方 2

行番号をクリックする行選択、単語をダブルクリックする単語選択、先ほど紹介した矩形選択、選択範囲を縦断するような選択など、様々な選択範囲を自由に組み合わせることもできます。

複数の選択範囲は [選択した範囲のみ] の置換にも対応していますので、あらかじめ選択範囲を複数作っておいてその部分だけをまとめて置換、のような使い方も便利です。

マルチカーソルの使い方 3

キーボードを使ってカーソルを追加することもできます。

Ctrl+Alt+またはで、現在のカーソル位置の上、または下に新たなカーソルが追加されます。

メインメニューでは [編集] の中の [前の行にカーソルを追加][次の行にカーソルを追加] に該当します。

行き過ぎたときはCtrl+Uで 1 つ前の状態に戻すことができます。

Ctrl + U のショートカットキーは、以前のバージョンでは [大文字に変換] に割り当てられています。Mery を以前のバージョンからアップデートした場合、ショートカットキーの設定はそのまま残りますので、[大文字に変換] と [選択範囲を元に戻す] のショートカットキーが重複することがあります。必要に応じて [大文字に変換] か [選択範囲を元に戻す] のショートカットキーの設定を変更してください。
Ctrl + Alt + ↑ or ↓ のショートカットキーは、お使いのグラフィックボードのドライバーによっては、画面の回転などに割り当てられている場合がありますのでご注意ください。そのときは、Mery のショートカットキーの割り当てを変更するか、お使いのグラフィックボードの設定でホットキーを無効にすることで回避することができます。

外部リンク 「Ctrl + Alt + 矢印」を押しても画面が回転しないようにする - 知らなきゃ絶対損する PC マル秘ワザ

マルチカーソルの操作

カーソルの追加

  • マウス: Ctrlを押しながらクリック

選択範囲の追加

  • マウス: Ctrlを押しながらドラッグ

マルチカーソルの解除

  • マウス: どこでも良いのでクリック
  • キーボード: Esc

追加したカーソル、追加した選択範囲のキャンセル

  • マウス: Ctrlを押しながら、カーソルまたは選択範囲をクリック

選択範囲を行に分ける

  • キーボード: Ctrl+Alt+L

前の行にカーソルを追加

  • キーボード: Ctrl+Alt+ (縦書きのときは)

次の行にカーソルを追加

  • キーボード: Ctrl+Alt+ (縦書きのときは)

すべて検索して選択

  • キーボード: Shift+Ctrl+A

選択範囲に次の候補を追加

  • キーボード: Ctrl+D

スキップして次の候補を追加

  • キーボード: Shift+Ctrl+D

選択範囲を元に戻す

  • キーボード: Ctrl+U

選択範囲をやり直し

  • キーボード: Alt+U
これらのショートカットキーは新規インストールの場合の初期値です。Mery を以前のバージョンからアップデートした場合、ユーザー設定されたショートカットキーはそのまま残りますので、上記のショートカットキーと重複する場合があります。必要に応じてショートカットキーの割り当てを変更してください。
[前の行にカーソルを追加][次の行にカーソルを追加] のキーボード操作は、横書きのときは Ctrl + Alt + ↑ or ↓、縦書きのときは Ctrl + Alt + ← or → となっていますが、ショートカットキーを割り当てた場合は横書き・縦書きにかかわらず固定となります。

ちょっと便利な機能

すべて検索

検索ダイアログに [すべて検索] というボタンが追加されました。

すべて検索

置換ダイアログの [すべて置換] と似たようなボタンですが、検索のみを行い、一致した箇所を選択範囲として追加します。

マルチカーソルですから、そのまま編集すれば一致したすべての箇所を同時に変更できますし、ステータスバーから一致した数を確認する、といった用途にも使えます。

マーカ機能と組み合わせる

マルチカーソルはマーカー機能と組み合わせても便利です。

複数の選択範囲を一括でマーカーに登録したり、マーカーに登録されている単語を [すべて検索] することで複数選択の状態にしたりすることもできます。

マーカ機能と組み合わせる

選択範囲に次の候補を追加

「マルチカーソルの操作」のセクションで少し触れましたが、Ctrl+Dでカーソル位置の単語を次々に選択していくことができます。

選択範囲に次の候補を追加

例えば、変数名の修正や HTML タグの一括変更などを、置換ダイアログを表示することなく行うことができます。

メインメニューでは [検索] の中の [選択範囲に次の候補を追加] という項目に該当します。

この操作も行き過ぎたときは [選択範囲を元に戻す] で 1 つ前の状態に戻すことができます。

スキップして次の候補を追加

[選択範囲に次の候補を追加] は次に一致する単語を選択範囲に追加しますが、1 つスキップしたいときもありますよね。

スキップして次の候補を追加

Shift+Ctrl+Dは、上記の [選択範囲に次の候補を追加] の後に実行することで、その候補を飛ばして次の候補を選択範囲に追加します。

メインメニューでは [検索] の中の [スキップして次の候補を追加] という項目に該当します。

マルチカーソルを有効にする

シンプル志向のテキストエディターにマルチカーソルなんて必要ないと思われるかたもいらっしゃると思います。

それからマクロの仕様について、従来のマクロがそのままマルチカーソルで使えるようになるわけではないため、既存のマクロとの互換性が心配といったご意見を何件かいただいております。

この記事でマルチカーソルに興味を持っていただけたら嬉しいところですが、本バージョンではそういった理由からマルチカーソルは初期状態で [無効] となっています。

マルチカーソルを [有効] にするには、メニューから [ツール] の中の [オプション] を開き、[基本] カテゴリの右下あたりにある [マルチ カーソルを有効にする] のチェックをオンにしてください。

マルチカーソルを無効にする

なお、新機能の 1 つめで紹介した矩形編集ですが、こちらはマルチカーソルを無効にした状態でもお使いいただけます。

それと、もともとその位置にあった [常に最上位の状態を保存] の項目は [ウィンドウの位置とサイズを復元] の右側にある [...] ボタンの中に移動しました。

仕様上の制限事項

矩形編集やマルチカーソルに慣れてくると色々な使い方を試したくなってくると思いますが、以下は仕様上の制限事項となっていますのであらかじめご了承ください。

  • 矩形選択 Alt やマルチカーソル Ctrl のキーボード割り当ては変更できません

    Alt は矩形選択に割り当て済みだったのでマルチカーソルは Ctrl にしました。

  • いくつかのマクロメソッドはマルチカーソルに対して動作しますが、現状、マクロとプラグインの仕様はマルチカーソルを考慮していません

    document.selection.Text = "";document.selection.Delete();のような文字列を編集する操作、document.selection.CharRight();のようなカーソルを移動する操作はそれぞれのカーソルに対して動作します。

    document.selection.SetActivePos(0, true);など、カーソル位置を絶対値で指定する操作はマルチカーソルを解除して動作します。

  • ワークスペース機能の [元に戻す情報を保持する] で復元した場合、復元されるデータにマルチカーソルの情報は含まれません

    [元に戻す]、[やり直し] の操作自体は可能です。技術的にはワークスペースの一時ファイルにマルチカーソルの情報を含めることも可能ですが、従来のバージョンとの互換性が失われるので今回は見送りました。

  • DirectWrite を有効にすると動作速度が遅くなります

    なるべく再描画を抑えるよう工夫はしていますが、カーソルの数が増えると再描画される行が増えるため動作速度が遅くなります。

    Ver 3.0.1 で再描画を抑える処理は廃止しました。画面の再描画は安定しますが、DirectWrite を有効にすると描画速度に影響があります。

  • すべての機能がマルチカーソルに対応しているわけではありません

    例えば、以下の機能はカーソルや選択範囲が複数ある状態では動作しません。

    • [自動マーカー]
    • [対応する括弧を強調する]
    • [変換中の文字列を挿入モードで入力]
    • ルーラーの [カーソル位置]
    • スクロールバーの [カーソル位置]
    • 選択範囲のドラッグアンドドロップ

変更ログ

本バージョンではいくつかの不具合修正や機能改善が含まれています。現在お使いのバージョンで問題がある場合はバージョンアップで改善されるかもしれません。

3.0.4 (2020-06-23)

  • [ファイルから検索] で [検索するフォルダー] に | が含まれるときにステータスバーに文字が表示されていたのを修正

    フォーラム 検索機能につきまして

  • [大きいフォントサイズ]、[小さいフォントサイズ] でステータスバーにフォントサイズを表示するようにした
  • DirectWrite 有効で画面の DPI が 100% より大きいときに絵文字がずれることがあった問題を修正

    フォーラム 絵文字の下半分が欠けて表示される。

  • マクロの ScrollY プロパティとプラグインの Editor_SetScrollPos、Editor_GetScrollPos メソッドにスクロールマージンを含めないようにした

    オーバースクロールやタイプライタースクロールでもスクロール位置の保存、復元ができるようになりますが、副作用でアウトラインプラグインにおけるジャンプ先はスクロールマージンが含まれない位置となります。

    フォーラム 【要望】オーバースクロールとマクロリファレンスの対応

  • 選択範囲がある場合の [単語の削除] で選択終了位置を基準にするようにした
  • 選択範囲がある場合の単語選択で選択終了位置を基準にするようにした
  • 選択範囲がある場合の DuplicateLine の後のカーソル位置を選択終了位置を基準にするようにした
  • マクロの LineEnding プロパティを変更したときに変更マーク (*) を付けるようにした
  • マーカーバーのボタンをクリックしたときにマーカーの文字列で検索ハイライトをつけるようにした

    フォーラム マーカー機能のスクロールバーマーカー対応

  • 禁則処理で行頭に半角スペースが来るのをなるべく防ぐようにしてみた

    ワードパッドのように絶対に行頭に来ないわけではなく、メモ帳の [右端で折り返す] ように場合によっては行頭に来ることもあります。

    フォーラム 【質問】英文テキストで行頭に半角スペースが来るのを回避する方法について

オプションに [タブとウィンドウ] カテゴリを追加

  • [タブを閉じた時]

    タブを閉じた時にアクティブにするタブを設定します。

  • [閉じるボタン]

    閉じるボタンの表示方法を設定します。従来どおりですが [基本] カテゴリから移動しました。

  • [タブにアイコンを表示する]

    タブにアイコンを表示するかどうかを設定します。

  • [タブを複数行にする]

    タブの数が増えたときに右端で折り返して複数行で表示します。従来どおりですが [基本] カテゴリから移動しました。

  • [タブの幅を調節する]

    タブの幅を設定します。0 を入力するとファイル名が長い場合に省略して自動調整、0 より大きい値を入力すると固定幅となります。従来どおりですが [基本] カテゴリから移動しました。

  • [タブ有効時にウィンドウの位置とサイズを保存、復元する]

    タブが有効になっている場合に終了時のウィンドウの位置とサイズを保存、復元します。タブが無効 (SDI モード) の場合は Windows のデフォルトを使用します。

  • [起動時にウィンドウの位置とサイズを復元する]

    タブの有効・無効にかかわらず起動時にウィンドウの位置とサイズを指定した位置に復元します。従来のバージョンとの互換性維持のため、上記のオプションよりもこちらが優先されます。[...] ボタンから座標を入力できます。

    従来は 0 を入力した項目は終了時の座標を保存、復元していましたが、座標として 0 を使用することができなかったため、すべて 0 の場合のみ終了時の座標を保存、復元するよう仕様変更しました。

  • [次の文書コマンドで最後に使用した文書を表示する]

    [次の文書] コマンド (初期設定では Ctrl + Tab) で最後に使用した文書を表示します。オフの場合はタブの順番どおりに表示します。

  • [常に最上位の状態を保存する]

    従来どおりですが [基本] カテゴリから移動しました。

3.0.3 (2020-04-05)

3.0.2 (2020-03-28)

IME 有効/無効でキャレットの色を変更できる機能を標準機能にした

隠しオプションで実装していたキャレットの色変更ですが、Windows のシステムキャレットは背景色に対しての反転色となるため、黒背景の場合に設定がやや困難でした。

そこで、背景色を反転したものからシステムキャレットの色を逆算することで、黒背景でも好みの色を選択できるようにしてみました。

設定は [オプション] の [表示] カテゴリで [表示項目] の一覧で [カーソル][カーソル (IME 有効)][背景色] から変更できます。

IME 有効/無効でキャレットの色を変更できる機能を標準機能にした

隠しオプションで設定されている場合は、お手数をおかけしますが改めて画面上から設定しなおしてください。

なお、キャレットの幅と高さは引き続き隠しオプションのままです。

フォーラム キャレットの色

しかし、標準機能にしてしまうと次は [カーソルのある行] や [水平罫線] の色も IME 有効/無効で切り替えたいとか、マルチカーソルのときに [カーソル (プライマリ)] と [カーソル (セカンダリ)] で色を分けたいといったご要望もありそうですね。

行コピーの形式を VisualStudioEditorOperationsLineCutCopyClipboardTag に対応

フォーラムでご報告をいただきまして、[行コピー] の仕様を改めて調査してみましたところ、なかなか奥が深いことが分かりました。

Mery の行コピーは MSDEVLineSelect というクリップボード形式を使っていますが、この形式は Visual Studio 2008 以前で使われていて、この形式に対応しているエディター間であれば互換性があります。

Visual Studio 2010 以降は VisualStudioEditorOperationsLineCutCopyClipboardTag という形式に変更されたようで、MSDEVLineSelectを使っているエディターは少なくなっていました。

どちらもの形式も、選択範囲がない状態Ctrl+Cで [行コピー] 、Ctrl+Vで [行貼り付け] となり、行頭からの貼り付けるという動作は同じです。

しかし、選択範囲がある状態で貼り付けたときの動作が異なっており、MSDEVLineSelectを使っている Visual Studio 2008 では選択範囲を削除した後、行頭からの貼り付けとなりますが、VisualStudioEditorOperationsLineCutCopyClipboardTagを使っている Visual Studio 2019 では行貼り付けをせず、選択範囲を書き換えるだけの通常の貼り付けとなっていました。

Mery では Visual Studio 2019 の動作に合わせるようにしてみました。

フォーラム テキストを選択しての「貼り付け」

その他

  • 色選択ダイアログで未作成の色に対して数値が反映されない現象の対策をしてみた

    根本的には対策できておらず、対症療法なので環境によってはうまく行かないかもしれません。

  • それに伴い、行貼り付けの動作を Visual Studio 2019 の動作に合わせた

    行コピー、行貼り付けの改善に伴う仕様変更です。

  • DuplicateLine の後のカーソル位置を行コピー貼り付けの動作に合わせた

  • 1 行だけ行コピーした状態で複数選択して貼り付けたときにエラーが出ていたのを修正

  • IME から入力したときに上書きモードが動作しなかったのを修正

    フォーラム 上書きってできませんか?

  • その他、細かい修正

あつまれ どうぶつの森|オンラインコード版

あつまれ どうぶつの森|オンラインコード版
任天堂
室内に飽きたら。さぁ、はじめよう!現実と同じ時間が流れる、のんびり無人島生活。

3.0.1 (2020-03-22)

  • [文字色]、[背景色] の色選択ダイアログで数値項目に入力した値が反映されないことがあった問題を修正

    10 年以上前の、一番初めのバージョンから抱えていた問題。

  • [保存する前に改行文字の前にある空白文字を削除] と [保存する前にファイルが改行で終了するようにする] で [元に戻す] 情報をなるべく保持するようにした

    EditorConfig の trim_trailing_whitespace や insert_final_newline を使用したときに [元に戻す]、[やり直し] でカーソル位置を維持できるようになりました。EditorConfig プラグインを更新する必要はありません。

    フォーラム EditorConfigの挙動

  • [変換中の文字列を挿入モードで入力] における前後フィードバックの精度を改善

    トゥルーインライン入力の場合、入力中の文字も前後フィードバックに反映していましたが、どうやら変換精度が落ちるようなので対策を行いました。また、前後フィードバックに渡す文字数を増やしたので通常入力の場合でも変換精度が若干向上すると思います。

  • 高速化のため再描画を抑制していたのを廃止

    マルチカーソルを使うと複数行を同時に再描画する必要があるので高速化のための対策のつもりでしたが、特定の条件下で再描画が行われないという問題があり、すべてのパターンを想定することは厳しいと判断し、廃止に至りました。

    体感速度としては、DirectWrite オフだとそれほど速度の低下を感じませんが、DirectWrite オンでカーソルの数を増やすとそれなりにモッサリします。

    フォーラム マルチカーソル関係の動作について

  • [すべて検索] で Migemo を使えるようにした

    使い道があるかどうかはわかりませんが…

  • 複数選択で隣り合った選択範囲を結合しないようにした

    複数選択における選択範囲の仕様は奥が深いです。Adobe Brackets 方式でしたが、Microsoft Visual Studio Code 方式に仕様変更してみました。

    フォーラム 「すべて検索」の不具合?仕様?

  • [マクロ] の [記録/停止] で [すべて検索] を記録/実行できるようにした

    document.selection.FindのフラグはmeFindAllです。

  • [マクロ] の [記録/停止] で [すべて置換] の [選択範囲の先頭を行頭とみなさない] と [選択範囲の終端を行末とみなさない] を記録できるようにした

    document.selection.ReplaceのフラグはmeFindNotBOLmeFindNotEOLです。

  • マクロの 0 行目で発生したスクリプトエラーがキャッチできなかったのを修正

    盛大なかっこの閉じ忘れなどがキャッチできるようになりました。

  • マクロの document.selection.Mode で画面を再描画するようにした

    選択範囲の色をしたゴミが残ることがあったのを改善しました。

  • マクロで "型が一致しません" エラーをキャッチするようにした

    このエラー以外にもスクリプトエンジンで何らかのエラーが発生したときに、なるべく Mery が道づれにならないように対策を行いました。

    フォーラム alert メソッドの引数に ActiveXObject を渡すと落ちる

  • マクロの Find、Replace、FindInFiles、ReplaceInFiles に検索ダイアログの文字列、オプション項目を保持できるフラグ meFindKeepOptions を追加

    document.selection.Findメソッドなどは Office スクリプトの仕様を意識しているので検索ダイアログのオプション項目を書き換える仕様となっていますが、フラグにmeFindKeepOptionsを含めることでオプション項目を維持するようにしました。

    フォーラム [要望]マクロから Find メソッド実行後の検索フラグ状態の復元

    フォーラム マクロのSelection.Replace()について

  • マクロの Replace にフラグ meFindNotBOL (選択範囲の先頭を行頭とみなさない)、meFindNotEOL (選択範囲の終端を行末とみなさない) を追加

    フォーラムでご意見をいただいたので対応しました。テーマの設けられていないトピックなのでフォーラムへのリンクは割愛させていただきました。

  • マクロの以下のメソッドに省略可能な引数を追加

    • document.selection.GetActivePointX(Flags [, Sel = -1]): Sel は複数選択の 0 から始まるインデックスを指定します。省略した場合は従来どおりです。
    • document.selection.GetActivePointY(Flags [, Sel = -1])
    • document.selection.GetActivePos([Sel = -1])
    • document.selection.GetAnchorPointX(Flags [, Sel = -1])
    • document.selection.GetAnchorPointY(Flags [, Sel = -1])
    • document.selection.GetAnchorPos([Sel = -1])

    試験的な実装です。フォーラムでマクロを使ったマルチカーソルの操作についてのご意見をいただいたり、試行錯誤したりしていますが、ある程度動くものがあったほうが分かりやすいと思うので実装してみました。

    これらのメソッドは従来のマクロと互換性がありますが、実装が確定されたものではありません。

  • マクロに以下のメソッドを追加

    • document.selection.AddPoint(Flags, StartX StartY, [, EndX = 0, EndY = 0]): StartX、StartY は選択開始位置、EndX、EndY は選択終了位置を指定して複数選択を追加します
    • document.selection.AddPos(StartPos [, EndPos = -1]): StartPos は選択開始位置、EndPos は選択終了位置を指定して複数選択を追加します
    • document.selection.Clear(): 複数選択と選択範囲をすべてクリアします
    • window.AddUndo(): [元に戻す] のデータに現在の選択範囲を追加します

    試験的な実装です。マルチカーソルを操作するために用意したメソッドで、これらのメソッドは従来のマクロには存在しません。

    window.AddUndo()はマルチカーソルとは関係なくて、ただのオマケです。選択範囲を変更しただけだと [元に戻す] に記録が残りませんが、window.AddUndo()を使えば選択範囲を [元に戻す] ことができます。

  • マクロに以下のプロパティを追加

    • document.selection.TextLength: 選択範囲の文字数を取得します
    • document.TextLength: テキストの文字数を取得します

    テキストの長さを高速に取得する機能が欲しかったので用意しました。document.selection.TextLengthは選択範囲の開始位置と終了位置によって正の値、負の値または 0 を返します。

    document.TextLengthはテキストの文字数を WideChar を 1 文字として返します。

    フォーラム Mery 3 !!!

  • IME 有効/無効でキャレットを変更できる隠しオプションを追加。Mery.ini の [Display] セクションに以下の項目を追記します。それぞれ、項目を省略した場合は標準の値が使用されます

    • CaretColor=#00FF00: IME 無効時のキャレットの色を HTML カラーまたは HSL カラーで指定します
    • CaretWidth=0: IME 無効時のキャレットの幅を 0 より大きい値で指定します。0 以下の値を指定すると標準の幅、最大値を超える場合はフォントの平均幅となります
    • CaretHeight=0: IME 無効時のキャレットの高さの比率を -100 から 100 の間の 0 ではない値で指定します。0 を指定すると標準の高さ、最大値を超える場合はフォントの高さ、正の数を指定すると下から表示、負の数を指定すると上から表示となります
    • ImeCaretColor=#FF0000: IME 有効時のキャレットの色を指定します。省略した場合は CaretColor ではなく標準のキャレットの色が使用されます
    • ImeCaretWidth=0: IME 有効時のキャレットの幅を指定します。省略した場合は CaretWidth ではなく標準のキャレットの幅が使用されます
    • ImeCaretHeight=0: IME 有効時のキャレットの高さを指定します。省略した場合は CaretHeight ではなく標準のキャレットの高さが使用されます

    フォーラムでご要望をいただきました。IME の有効・無効に応じてキャレットの色を変更するソフトというものがありまして、通常、こういったソフトは Windows のシステムキャレットに対してのみ有効です。

    システムキャレットというのは Windows の仕様上、1 つのコントロールに 1 つしか配置できないため、Mery のマルチカーソルは独自描画のキャレットを使用しています。

    そのため、こういったソフトに対応させることが技術的に難しいため、今回、Mery 側の機能としてキャレットの色を変更できるオプションを用意してみました。

    フォーラム キャレットの色

3.0.0 (2020-03-14)

  • マルチカーソルを実装
  • 矩形選択における文字の入力/削除を各行に対して操作できるようにした
  • キャレットの幅を Per-Monitor DPI に対応させた
  • Zen モード切替時にマクロの PopupMenu.Track のメニューが消える問題を修正
  • [選択した範囲のみ] の正規表現置換で [選択範囲の先頭を行頭とみなさない] と [選択範囲の終端を行末とみなさない] のオプションを追加
  • [変更行を強調表示] で行が折り返されているときの挙動を修正
  • トレイアイコンを右ダブルクリックで新しいウィンドウで新規作成するようにした
  • オプションの [スクロール] カテゴリに [タイプライタースクロールを有効にする] を追加
  • コマンドラインオプション /fd と /rd で [ファイルの種類] も渡せるようにした。例) Mery.exe /fd "C:\Mery\*.txt"
  • マクロの Window、Editor、Document オブジェクトに Tag プロパティを追加
  • マクロの SetAnchorPoint、SetAnchorPos の挙動がおかしかったのを修正
  • スクロールバーのサイズを Windows 側の設定に合わせるようにした
  • [大文字に変換] のショートカットキーを Shift+Ctrl+U に変更。Ctrl+U は [選択範囲を元に戻す] に割り当てた
  • 日本語入力の [元に戻す] を文字単位から入力単位にした
  • [上書] モードのキャレット幅を文字幅に合わせるようにした
  • ルーラーのサイズを Per-Monitor DPI に対応させた
  • [元に戻す] で変更していない状態まで戻したときに変更マーク (*) を消すようにした
  • その他、細かい修正

補足

選択範囲の先頭を行頭とみなさない、選択範囲の終端を行末とみなさない

選択範囲の置換で正規表現を使用する場合、選択範囲の先頭を^、終端を$に一致させるかどうかを選択できるようになりました。

初期値はどちらもオフ (みなす) になっており、動作は従来どおりです。

それぞれ、「みなさない」ようにするには、置換ダイアログで [正規表現を使用する] と [選択した範囲のみ] にチェックを入れた状態で [検索する文字列] の右側にある [>] ボタンをクリックして表示されるポップアップメニューから選択します。

選択範囲の先頭を行頭とみなさない、選択範囲の終端を行末とみなさない

[選択範囲の終端を行末とみなさない] は隠しオプションで用意していた OnigOptionNotEOL に該当しますので、すでに隠しオプションで設定されているかたは何もしなくても設定内容が反映された状態になります。

Window、Editor、Document オブジェクトの Tag プロパティ

従来、マクロにはグローバルな変数を保持しておく仕組みがなく、マクロが終了するとすべての変数は破棄されていたため、マクロが終了しても変数を保持しておきたい場合は外部のファイルに書き出すなどの対応が必要でした。

Window、Editor、Document オブジェクトの Tag プロパティはマクロが終了しても破棄されない変数となっており、用途は自由です。

プロパティ有効範囲破棄されるタイミング
Window.Tagアプリケーション全体アプリケーション終了時 (常駐している場合は常駐終了時)
Editor.Tagエディターウィンドウエディターウィンドウを閉じたとき
Document.Tagタブタブを閉じたとき

一般的に Tag プロパティと言えば数値型やオブジェクト型で定義されていることが多いのですが、その場合、document.tag = 1;のように初期化されると他のマクロで使っていた変数が上書きされてしまいます。

そこで、フォーラムでご提案いただいた読み取り専用の Dictionary 型を採用しました。

フォーラム マクロ用の変数の要望

変数の初期化は Mery 側で行っており、読み取り専用なのでdocument.tag = 1;のような初期化はできません。

マクロ
if (!document.tag.exists("key1")) {
	document.tag("key1") = "Hello World";
}
alert(document.tag("key1"));

このようにキーと値を組み合わせて使用します。

数値型や文字列型などを比較的自由に格納できますが、キーが重複した場合は上書きされてしまいますのでご注意ください。

Dictionary 型を自前で実装するというのも検討したのですが、JavaScript や VBScript から使いやすいよう COM オブジェクトの Scripting.Dictionary で実装しました。

つまり、AddExistsなど Scripting.Dictionary のメソッドと (ほぼ) 互換性があるので扱いやすいのですが、RemoveAllも使えてしまうのですべて削除されてしまう可能性は残ります。

それと、グローバル変数のように使えますがグローバル変数ではありません。スクリプトエンジンはマクロを実行するたびに初期化されますので、マクロが終了した後に消えてしまうオブジェクトを格納しても次の実行時に参照することはできません。

マクロ
if (!document.tag.exists("key2")) {
	document.tag("key2") = function() { alert("Goodbye World"); };
}
document.tag("key2")(); // エラー: 解放されたスクリプトからコードを実行できません。

[大文字に変換] のショートカットキーを Shift + Ctrl + U に変更

Ctrl+Uはマルチカーソルの [選択範囲を元に戻す] に割り当てました。

以前のバージョンでは Ctrl+Uのショートカットキーは [大文字に変換] に割り当てられています。

Mery を以前のバージョンからアップデートした場合、ショートカットキーの設定はそのまま残るので、[大文字に変換] と [選択範囲を元に戻す] のショートカットキーが重複することがあります。

必要に応じて [大文字に変換] か [選択範囲を元に戻す] のショートカットキーの設定を変更してください。

ショートカットキーの重複チェックはメニューから [ヘルプ] の中の [キーボードマップ] を開き、[現在のキー] のカラムをクリックして並べ替えれば確認しやすいです。

重複が見つかった場合など、ショートカットキーの変更はキーボードマップの画面で項目をダブルクリックすれば、すぐに設定画面にジャンプできます。

日本語入力の [元に戻す] を文字単位から入力単位にした

[元に戻す] でどこまで戻すかという点はテキストエディターの仕様において非常に重要です。

メモ帳のように [元に戻す] が 1 度しかできない場合はある程度のまとまりで元に戻す必要がありますし、テキストエディターのように何度でも [元に戻す] ができる場合は細かく刻めたほうが柔軟性があります。

Mery は 1 文字ずつ元に戻す仕様でした。

ところで、Windows 10 以降では絵文字が一般的になり、 スタート+. (ドット) で [絵文字パネル] なるものが起動するようになりました。

この絵文字パネルからの入力がどうも IME の API を使って飛んでくるようで、これを丁寧に 1 文字ずつ元に戻すと接合された絵文字が中途半端なところで分断されてしまうため、その対策としての仕様変更です。

参考 テキストエディター「Mery」ベータ版 Ver 2.6.11 を公開、より多くの絵文字に対応

しかし、接合された絵文字に限らず、サロゲートペアや IVS、結合文字などを IME から入力した場合でも同じ問題が発生していたわけですね。

従来どおり 1 文字ずつ元に戻せたほうがいい、という場合は一応、隠しオプションで戻せるようにしています。

INI
[General]
UndoCharByChar=1

この仕様変更につきましては IME 関連の修正が絡んでいますので、環境によっては問題が発生する可能性があります。

今まで普通に使えてたのにおかしくなった!とか、Google 日本語入力や ATOK だと動かない、などの問題がございましたらご報告いただけると助かります。

[上書] モードのキャレット幅を文字幅に合わせるようにした

ほとんど使われることのなさそうなInsertキーによる [上書] モードの改善です。

[上書] モードに切り替えるとキャレットの幅が太くなるのですが、従来は平均的なフォント幅の半分のサイズに固定されていました。

本バージョンではキャレットの幅を文字の幅に合わせるようにしたので、上書きされる箇所がわかりやすくなりました。

[上書] モードのキャレット幅を文字幅に合わせるようにした

変更していない状態まで戻したときに変更マーク (*) を消すようにした

従来は [元に戻す] で未変更の状態まで戻したときに変更マーク (*) が消えない仕様でした。

理由は、[上書き保存] の仕様に関係します。

テキストエディターの仕様として、[上書き保存] がいつでもできるものと、未変更の状態では [上書き保存] ができないものがあります。

メモ帳のように [上書き保存] がいつでもできるものはCtrl+Sを連打する癖があると余計な上書き保存が走って精神衛生上、好ましくありません。

そういったときは、未変更の状態 (保存した状態から変更されていない状態) では [上書き保存] をできなくするという仕様のものが有効です。

Mery は後者の仕様で、保存した直後は [上書き保存] をできなくしています。

しかし、保存した後に何らかの編集を行い、[元に戻す] の操作で保存した状態まで戻したときは未変更ではなく変更済みとし、[上書き保存] をできるようにしていました。

これは、内容を変更せずにファイルを更新するための抜け道でした。

アプリケーションサーバーでページのキャッシュを再生成するときなど、タイムスタンプのみを更新する必要があったためこのような仕様にしていましたが、[元に戻す] で保存した状態まで戻しても変更マーク (*) が消えないというお問い合わせ、または変更マーク (*) を消したいというご要望をいただくことが増えてきたので、今回、仕様変更に至りました。

仕様変更に伴い、いつでも上書き保存できるような仕様を試してみたものの、先にも述べたようにCtrl+Sを連打してしまうので止めました。

個人的には残念な仕様変更ですが、一般的な仕様のほうが初心者さんにも優しいと思うので、10 年越し (それ以上?) のご要望対応です。

ダウンロード

レジストリを一切使用しない ZIP 版、レジストリを使用しますが導入が簡単なインストーラー版、設定ファイルを外部に作成しないポータブル版を用意しています。

ZIP 版

アーカイブを解凍するだけですぐに使える ZIP 版です。

Mery Ver 3.0.4 (32 ビット版) ZIP Mery Ver 3.0.4 (64 ビット版) ZIP

インストーラー版

解凍などの作業が必要なく簡単に使えるインストーラー版です。

Mery Ver 3.0.4 (32 ビット版) インストーラー Mery Ver 3.0.4 (64 ビット版) インストーラー
VirusTotal で誤検出されたり SmartScreen で保護されたりしますが、もちろんウイルスではありません。ご心配なかたは正式版が Vector さんか窓の杜さんで公開されるまでお待ちください。

ポータブル版

インストールは不要。通常の ZIP 版と異なり設定ファイルを外部に作成しないので USB メモリに保存して持ち歩けますし、PC 環境を汚すこともありません。

Mery Ver 3.0.4 (32 ビット版) ポータブル Mery Ver 3.0.4 (64 ビット版) ポータブル
ポータブル版は解凍したフォルダの中に、設定ファイルなどのすべてのデータを保存しますので、必ずアクセス権のあるフォルダに配置してください。

おわりに

今回は矩形選択における編集操作の改善のみを予定していたのですが、さすがにそれだけというのもいまさら感あるなぁと思いましてマルチカーソルに挑戦してみました。

Mery のマルチカーソルはプログラマーさんだけでなく、文章を書くときにも気軽に使えるシンプルな操作感を心掛けたつもりです。

矩形選択はAlt、マルチカーソルはCtrl、これだけです。

それでは最後にマルチカーソルを使った操作の小技をご紹介します。

矩形選択をストリーム選択に展開する

矩形選択はマルチカーソルによる複数選択を行うとストリーム選択 (普通の選択) に展開されます。

これを利用して、Ctrlを押しながら矩形選択の操作 (Altを押しながらマウスで範囲を選択) をすると、矩形選択はすぐにストリーム選択に展開されますので、縦方向にまとめてカーソルを配置することもできます。

おわりに 1

マルチカーソル貼り付け

マルチカーソルを使った [コピー] と [貼り付け] の動作も面白いです。

マルチカーソルの状態で [コピー] の操作を行うと、クリップボードには複数の選択箇所が改行区切りの文字列として保持されます。

通常、[貼り付け] の操作はマルチカーソルの状態でも、それぞれのカーソルの位置に同じクリップボードの文字列が貼り付けられるだけです。

それはそれで「まぁ、そうなるよね」といった感じですが、コピーした行数とマルチカーソルの数が一致している場合は、それぞれのカーソルの位置にクリップボードの各行が上から順番に貼り付けられます。

とりあえず、この動作を [マルチカーソル貼り付け] と呼んでおきます。

おわりに 2

[マルチカーソル貼り付け] を応用すると、こんなこともできます。

従来からある機能ですが、何も選択していない状態で [コピー] の操作を行うと行コピーとなっており、クリップボードに特殊な形式 (MSDEVLineSelect) で保持されます。

用途としては、何も選択していない状態でCtrl+CCtrl+Vでカーソルのある行を複製するときなどに使えます。

この操作に対しても [マルチカーソル貼り付け] は有効です。

マルチカーソルで複数の箇所にカーソルを配置して行コピペの操作を実行すると…。

おわりに 3

このようにそれぞれの行が複製されるというわけです。

マルチカーソルと [選択範囲の変換]

マルチカーソルは [選択範囲の変換] の操作にも対応しているので、[マルチカーソル貼り付け] と組み合わせると以下のようなこともできます。

おわりに 4

先頭が小文字の単語の 1 文字目を [大文字に変換] して、Shift+Endで選択したあとにCtrl+Cでコピーします。

あとは普通に入力していきますが、もちろんEnterキーも入力できます。そして最後にコピーした内容をCtrl+Vで貼り付けました。

さて、マルチカーソル、いかがだったでしょうか?

私は最初、マルチカーソルや複数選択なんて使わなくない?と思っていましたが、実際に使ってみるとこれが想像を超えた便利さで衝撃を受けました。

マルチカーソルと言えばコードエディターのように重量級なアプリに搭載されていることが多いので、Mery が重くなるのでは?と心配されているかたもいらっしゃるかもしれません。

おわりに 5

ご安心ください。

Mery のマルチカーソルの実装はとてもシンプルです。

機能としては大きなものですが、本体のファイルサイズは前のバージョンからほぼ肥大化することなく実装することができました。

とは言え、冒頭で申しましたとおり今回はエディターコンポーネントの大規模なカスタマイズがともなっています。

毎度のことではありますが、すぐにバグが出ると思いますのでそのときは温かい目で見守っていただき、ご都合がよろしければ動作検証にご協力いただけると幸いです。

みなさん自粛生活の中、本当に大変だと思います。くれぐれもご健康とメンタルにお気をつけいただき、明るい日常をお過ごしくださいませ。

CASIO(カシオ) 32ミニ鍵盤 電子キーボード SA-46 [ミニキーボード]

CASIO(カシオ) 32ミニ鍵盤 電子キーボード SA-46 [ミニキーボード]
CASIO(カシオ)
いつ始めたっていいじゃない。遊ぼう、音楽で。
Amazon で探す 楽天市場で探す

スポンサーリンク

関連する記事

フォローする