簡単・便利！シンプルなテキストエディター「Mery」の最新版が遂に完成。

本バージョンでは、自動保存機能、バックアップ機能、変更行の強調表示機能など、以前からご要望の多かった機能を搭載しました。一緒に仕様を考えてくれたみなさん、ご意見を投稿してくれたみなさん、ご協力ありがとうございました！

今回の新機能は開発が大変すぎて、心が折れかけました。

本当はサクッと開発してキリッと公開したかったのですが、「もうやだー」と弱音を吐いたり「もうむりー」と諦めかけたりしているうちに前のバージョンの公開から 1 か月以上も時間が経っていました。

特に、変更行の強調表示機能の実装は難題で、メモリを節約しつつ動作速度への影響を最小限に抑えるために何度も最適化を繰り返し、夢の中にまでソースコードが出てきてうなされた夜もありました。

これ以上やったら Delphi 嫌いになるよ？

スポンサーリンク

新機能

今回の新機能である、自動保存機能とバックアップ機能は、フォーラムを使ってアンケートのような形でみなさんのご意見を参考に開発させていただきました。参加してくださったみなさん、ありがとうございました。

それと、変更行の強調表示機能ですが、これは以前から多くのご要望をいただいておりました。

テキストエディターコンポーネントの大幅な改修が必要になることと、私の技術力がその領域に達していないことから「将来的に対応できれば…」とお茶を濁していましたが、そろそろ逃げ切れなくなってきたので実装に至りました。

自動保存機能

編集中のファイルを一定の間隔で保存する自動保存機能は、予定外の PC の再起動や突然の停電などでデータが消えてしまうのを防ぎます。

自動保存の有効・無効は [ファイル] メニューの [自動保存] からいつでも簡単に切り替えることができます。

[自動保存] を有効にすると、初期状態では 10 分ごとに上書き保存が実行されるようになります。

[ツール] メニューの [オプション] を開いて、[自動保存] タブから設定を変更できます。

自動保存機能の有効・無効や、自動保存の間隔、自動保存先のフォルダーの変更などはここから行います。

オプションで設定できる項目はシンプルですが、組み合わせによって様々な自動保存の方式に対応できるようになっています。

自動保存する

自動保存機能の有効・無効を切り替えます。[ファイル] メニューの [自動保存] と連動しており、どちらからでも切り替えることができます。

自動保存機能の有効・無効を切り替えます。[ファイル] メニューの [自動保存] と連動しており、どちらからでも切り替えることができます。 分ごと

テキストに変更が発生すると、ここで指定した [分] 後に保存が実行されます。0 を指定した場合は変更とほぼ同時に保存が実行されます。

テキストに変更が発生すると、ここで指定した [分] 後に保存が実行されます。0 を指定した場合は変更とほぼ同時に保存が実行されます。 自動保存フォルダーに保存する

通常、自動保存は自動的に [上書き保存] を実行しますが、この項目にチェックを入れると [上書き保存] ではなく、指定した [自動保存フォルダー] にファイルを保存します。元のファイルに上書きしたくない、変更マーク (*) を解除されたくない、新規のテキスト (無題) も自動保存したい、などの場合に設定します。

通常、自動保存は自動的に [上書き保存] を実行しますが、この項目にチェックを入れると [上書き保存] ではなく、指定した [自動保存フォルダー] にファイルを保存します。元のファイルに上書きしたくない、変更マーク (*) を解除されたくない、新規のテキスト (無題) も自動保存したい、などの場合に設定します。 同名のファイルが存在する場合はファイル名を変更する

[自動保存フォルダーに保存する] と合わせて設定します。この項目を有効にすると、自動保存フォルダーに同名のファイルが存在する場合に別名で保存します。

[自動保存フォルダーに保存する] と合わせて設定します。この項目を有効にすると、自動保存フォルダーに同名のファイルが存在する場合に別名で保存します。 自動保存フォルダー

[自動保存フォルダーに保存する] と合わせて設定します。指定したフォルダーに自動保存のファイルが作成されますので、アクセス権のあるフォルダーを入力してください。また、自動保存されたファイルは、Mery 終了後も自動では削除されません。

ポイント Mery.ini の [AutoSave] セクションの AutoSaveDelay にミリ秒単位で数値を設定すると、[分ごと] に 0 を指定したときの遅延時間を微調整できます。

自動保存機能は、自動回復機能ではありません。データの回復は、設定された自動保存フォルダーから手動で行っていただく必要があります。

自動保存機能は、データの安全を保証するものではありません。ファイルの破損やデータの消失に備えてご自身でもデータのバックアップを行うことをお勧めします。

バックアップ機能

先ほどご紹介した自動保存機能は定期的に保存してくれる機能でしたが、これは意図しないタイミングでの保存ですので、「あの日、あの時のデータに戻したい！」なんていう用途には向いていません。

バックアップ機能はファイルを上書き保存する際に自動的に 1 つ前の状態のファイルをバックアップとして別名で保存します。

つまり、常に最新と 1 つ前の状態のファイルが保存されているので、誤って上書き保存してしまったときでも 1 つ前の状態に復元できるわけです。

バックアップ機能の設定も自動保存機能と同様、[ツール] メニューの [オプション] を開いて、[自動保存] タブから行います。

バックアップファイルの作成先などの設定を行うことでバックアップ機能が有効になります。

オプションで設定できる項目は下記のとおりです。

バックアップフォルダーに保存する

バックアップファイルを指定したフォルダーに保存します。

バックアップファイルを指定したフォルダーに保存します。 保存するファイルと同じフォルダーに保存する

バックアップファイルを編集中のファイルと同じフォルダーに接頭辞 "Backup-" を付けて保存します。[バックアップフォルダーに保存する] と同時に設定することもできます。

バックアップファイルを編集中のファイルと同じフォルダーに接頭辞 "Backup-" を付けて保存します。[バックアップフォルダーに保存する] と同時に設定することもできます。 同名のファイルが存在する場合はファイル名を変更する

[バックアップフォルダーに保存する] と合わせて設定します。この項目を有効にすると、バックアップフォルダーに同名のファイルが存在する場合に別名で保存します。

[バックアップフォルダーに保存する] と合わせて設定します。この項目を有効にすると、バックアップフォルダーに同名のファイルが存在する場合に別名で保存します。 バックアップフォルダー

[バックアップフォルダーに保存する] と合わせて設定します。指定したフォルダーにバックアップファイルが作成されますので、アクセス権のあるフォルダーを入力してください。

[バックアップフォルダーに保存する] または [保存するファイルと同じフォルダーに保存する] のいずれかを有効にすることでバックアップ機能が有効になります。

自動保存機能と同時にバックアップ機能を使用することも可能です。その場合、自動保存フォルダーとバックアップフォルダーは別々のフォルダーを指定することをお勧めします。

[同名のファイルが存在する場合はファイル名を変更する] を有効にすることで、いわゆる「バージョン履歴」のように使うこともできます。

ポイント Mery.ini の [Backup] セクションの BackupMaxCount に 0 より大きい値を指定することで作成されるファイル数に上限を設け、サイクルバックアップのように古い世代のバックアップを自動で削除できます。

変更行の強調表示

変更した行の行番号を太字にしたり、行番号の左端に保存前、保存後の目印を表示できるようになりました。

もちろん目印のオン・オフ切り替えは簡単です。

煩わしいと思ったらオフ、ちょっと気になったらオン、なんていう使い方も可能です。

変更行の "目印" は、[表示] メニューから [記号] の中の [変更行を強調表示] にチェックを入れると表示されます。(初期値はオフ)

変更行の "行番号" を太字にしたり背景色を設定したりすることもできますが、こちらは [変更行を強調表示] とは連動しません。

これらの設定は [ツール] メニューから [オプション] を開いて [表示] タブの [表示項目] で個別に変更できます。

[表示項目] の中で [行番号 (変更行)]、[変更行 (保存前)]、[変更行 (保存後)] の 3 つが今回追加された項目です。

例えば、変更行の行番号を太字にする場合は [行番号 (変更行)] を選択して [太字] をオンに。もっと目立たせたい場合は [背景色] を設定することもできます。

変更行の目印は [変更行 (保存前)]、[変更行 (保存後)] で設定します。

例えば、保存後の目印が不要な場合は [変更行 (保存後)] で [背景色] を "透明" にします。

これらの目印は [ブックマーク] や [行番号 (変更行)] の上に描画されますので、テーマをカスタマイズするときはご注意ください。

変更行の強調表示機能の追加にともない、101 個のテーマファイルも更新しておきましたので、必要に応じてお使いのテーマファイルを差し替えてください。

更新

コマンドラインオプション "/ff" (ファイルから検索, grep) を追加

コマンドラインから呼び出すときに "/ff" オプション (Find in Files) を指定することで [ファイルから検索] 機能を直接実行できるようになりました。

ファイルから検索

Mery.exe /ff "FindWhat" /fm /fr /fx /fw /fn /cp "FindPath"

[ファイルから検索] は以下のオプションを組み合わせることができます。

/fm 大文字と小文字を区別する

/fr サブフォルダーも検索する

/fx 正規表現を使用する

/fw 単語のみ検索する

/fn ファイル名のみ表示する

/cp エンコード

"FindWhat" は検索する文字列、"FindPath" は "C:\Temp\*.txt" のように記述することで "C:\Temp\" が検索するフォルダー、"*.txt" がファイルの種類として認識されます。

ファイルから置換

Mery.exe /ff "FindWhat" /fm /fr /fx /fw /fn /cp "FindPath" /rw "ReplaceWith" /bk

[ファイルから置換] は以下のオプションが使用可能です。

/fm 大文字と小文字を区別する

/fr サブフォルダーも検索する

/fx 正規表現を使用する

/fw 単語のみ検索する

/fn ファイル名のみ表示する

/cp エンコード

/rw ファイルから置換する

/bk バックアップを保存する

"FindWhat" は検索する文字列、"FindPath" は "C:\Temp\*.txt" のように記述することで "C:\Temp\" が検索するフォルダー、"*.txt" がファイルの種類として認識されます。"ReplaceWith" は置換後の文字列を記述します。

コマンドラインから [ファイルから置換] を実行する場合、確認のダイアログは表示されません。事前にバックアップを取ったり、"/bk" オプションが指定されていることを確認するなどして、データの紛失にはくれぐれもご注意ください。

更新内容

新機能以外にも、多くの改善や不具合の修正が含まれています。お使いのバージョンで問題が発生している場合は新しいバージョンに更新することで改善されることもあります。

C#、JavaScript、HSP の強調文字列、単語補完辞書を更新

編集モードの C#、JavaScript、HSP における強調文字列と、単語補完辞書を更新しました。C# はコンテキストキーワードの追加、JavaScript は差し替え、HSP は 3.51 プロ生ちゃんエディションに更新しました。

フォーラム デフォルトの構文定義の拡充について

[EOF] (ファイルの終端) を「←」表記に変更

ファイルの終端記号 [EOF] が少々時代遅れな感じがしたので「←」記号に変更しました。従来の [EOF] 表記が良い場合は [表示] メニューの [記号] から [CR と LF を区別して表示] にチェックを入れることで [EOF] 表記になります。

マクロバーに [編集] の項目を追加

登録しているマクロを 1 クリックで起動できるマクロバーですが、マクロのボタン上で右クリックから [編集] を呼び出せるようになりました。

マーカーバーに [単語のみ] [大文字小文字を区別] [正規表現] の項目を追加

登録しているマーカーを便利に使えるマーカーバーですが、マーカーのボタン上で右クリックから [単語のみ] [大文字小文字を区別] [正規表現] の設定を変更できるようになりました。

外部ツールの [アウトプットバーを使用する] で入力が [選択テキスト] [文書] [カスタム] の場合、標準入力を自動で閉じるようにした

外部ツールでコマンドラインツールを使用するときに、[選択テキスト] [文書] [カスタム] を標準入力に自動的に入力することができるのですが、入力後に標準入力をクローズしないと動作しないアプリケーションがあったので対応しました。

アウトプットバーにおけるリダイレクト処理の安定性を向上

外部ツールの [アウトプットバーを使用する] で環境によっては標準出力が拾いきれないことがあったので安定性を向上しました。

読み直しの際に、できるだけスクロールバーの位置を保持するようにした

[読み直し] や、編集中のファイルが他のエディターで変更されたときの読み直しで、スクロールバーの位置を "できるだけ" 保持するようにしました。

"できるだけ" というのは、編集中のファイルが他のエディターで変更されたときの読み直しでは、内容が変更されているためスクロールバーの位置を復元してもキャレット位置が編集エリア外に行ってしまうことがあるため、その場合はキャレット位置に追従するというわけです。

フォーラム ファイル再読み込み時にスクロール位置を復元する

[編集] カテゴリに [最後に編集した位置へ移動] を追加

せっかく変更行の強調表示が搭載されたのだから、それを利用した機能が 1 つでもあったほうがいいのではないかというコメントをいただきましたので実装してみました。

デフォルトでは Ctrl + Shift + Z に割り当てられていますが、これ、予想以上に使えそうな機能です。

Python のマクロで window の confirm と prompt が動作しなかった問題を修正

以前に掲載した "知っておくと便利なテキストエディター「Mery」の 10 個の小技" という記事で、マクロは Python でも書けます！(キリッ) とか書いておきながら、Python だと 2 つのメソッドがプログラムミスで動作しませんでしたので修正しました。

フォーラム PythonScript で Prompt 他が呼び出せない

エディターの右端におけるサロゲートペアの描画を修正

サロゲートペアや IVS が画面の右端に描画されるときに、フォントのサイズやウィンドウ幅によって稀に描画されなくなることがあった問題を修正しました。

フォーラム 【要望2件】更新行のマーク表示・UNICODEサロゲートペアのエディター右端の表示

縦書きで行間が 0 のときに傍線が切れていたのを修正

縦書きで行間を 0 に設定していてフォントサイズが小さい場合に、傍線の部分が再描画されず残骸が残ることがあったので傍線の位置を微調整しました。

コマンドラインオプションの処理を CommandLineToArgvW を使って作り直した

コマンドラインオプション "/ff" の機能追加に伴う仕様変更です。

従来は Delphi の ParamStr メソッドを使用していましたが、コマンドラインオプションで "" (空文字) を取得できず、/rw "" のような空文字への置換が実行できなかったため、仕様を全面的に見直しました。

この仕様変更にともない、今度は CommandLineToArgvW API の仕様上の制限が発生します。

具体的には、CommandLineToArgvW は二重引用符で区切られた引数の場合、引数の最後の文字が ￥ (円マーク) だと正常に動作しません。というか、￥ が次の文字をエスケープしていると認識される仕様のようです。

エクスプローラーからフォルダーをドロップした場合は最後に ￥ はつきませんので、普通に使っていると引数が "フォルダー名￥" となるケースはそれほどないと思いますが、コマンドラインから Mery.exe を直接機能を呼び出すときに何らかの理由でフォルダー名を渡す必要がある場合はご注意ください。

ダウンロード

2,804,082 バイト 2018/07/12

SHA256: 606e83d6dc85ef687fb9ad4b264a877873895d14c51c76a2bb06011ad9842003

対応 OS: Windows 10, 8, 7, Vista, XP (32 ビット, 64 ビット)

2,385,407 バイト 2018/07/12

SHA256: 802f580e57729da31c8c5a0777f49d5f06f16d72130a036a019f901e8727b66d

対応 OS: Windows 10, 8, 7, Vista, XP (32 ビット, 64 ビット)

3,558,805 バイト 2018/07/12

SHA256: 4e8e7780d25d4ad5a54a5ed234afd32708ca1abacc8fa95689c64b9d3224def0

対応 OS: Windows 10, 8, 7, Vista (64 ビット)

2,903,631 バイト 2018/07/12

SHA256: 627638881c6e1d79b7b7f708a908316b1064733a0be7b2edb88546d17c0b41f0

対応 OS: Windows 10, 8, 7, Vista (64 ビット)

VirusTotal で誤検出されたり SmartScreen で保護されたりしますが、もちろんウイルスではありません。ご心配な方は正式版が Vector さんか窓の杜さんで公開されるまでお待ちください。

おわりに

自動保存機能や、バックアップ機能は今の時代、フロッピーディスクの場合などを考えなくて良いので割と簡単に実装できました。仕様決めのほうに時間がかかりましたが…。

自動保存の遅延時間や、バックアップの世代数をオプション画面上に設けなかったのは設定をシンプルにしたかったのと、そこまでこだわる人なら INI ファイルでも気にしないだろうと思ったのと、オプション画面に余白がなかったからです。

え、オプション画面に余白あるって？そこはワークスペース機能の建設予定地です。ワークスペース機能というのは前回の状態を保存・復元するための機能で、レジューム機能と呼ばれたりもします。

自動保存関連のフォーラムでご要望があり、変更行の強調表示機能を実装しなければワークスペース機能を実装していたのですが、変更行の強調表示機能はどうしてもアンドゥ処理の仕様変更が必要で、その仕様次第でワークスペース機能のプログラムが変わってくるため、本バージョンでは実装を見送りました。

あと、バグのご報告やご意見・ご要望は優しくささやいていただけるとモチベーションが上がります。

スポンサーリンク

関連する記事

フォローする