「文書が変更されていなければ変更マークを消す」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
(間違えて編集してしまったため復元)
 
1行目: 1行目:
 
= 概要 =
 
= 概要 =
このプラグインを導入すると、文書を変更した際、保存済みデータと一致したときに変更マーク(タブに表示される「*」マーク)を自動的に消すことができます。
+
Meryでは一度編集してUndo等で元の状態に戻しても、変更マーク(タブに表示される「*」マーク)が消えない仕様になっています。
 +
このマクロを使用すると、結果変更されていないタブの変更マークを消すことができます。
  
[[少し便利な Undo/Redo]]のプラグイン版ですが、マクロと比べて下記の違いがあります。
+
[[少し便利な Undo/Redo]]でもUndo/Redoのタイミングで変更マークを消すことができますが、Undo/Redoの度に変更されているかチェックするには私のPCでは少し重かったため任意のタイミングで実行できるように切り出しました。
  
* Undo/Redo以外にも対応
+
= 注意点 =
** 1文字入力してBackSpaceで削除して元と同じ状態になっても変更マークが消えます。
+
[[includeライブラリ]]のIO.jsを使用しています。
* サイズが大きいファイルのときの動作が早い
+
このマクロを使用する前に[[includeライブラリ]]をダウンロードし、Macrosフォルダ内に配置してください。
** 変更の都度ファイルを読み込まず、キャッシュしているため、サイズが大きいファイルのときの動作が早いです。
 
* メモリの消費量が上がる
 
** 内部でキャッシュしているため、その分メモリを消費します。
 
  
= 動作環境 =
+
= ソースコード =
下記のランタイムがインストールされている必要があります。
 
* .NET Framework 4.5 以降
 
Windows 8以降であれば.NET Framework 4.5以降が標準でインストールされているはずですので、インストールは不要です(多分)。
 
  
Windows 10 Home 64bit(1803)とMery 2.8.4の32bit/64bitで動作確認を行っております。<br>
+
<source lang="javascript">
Windows 10以外でもVista, 7, 8であれば.NET Framework 4.5を利用できますので、動くかもしれません。<br>
+
#title = "文書が変更されていなければ変更マークを消す"
Windows XPは.NET Framework 4.5の対応が打ち切られていますので、動作対象外です。
+
#include "include/IO.js"
  
= ダウンロード =
+
// チェックする文書の最大文字数。マイナスを指定すると無制限。
;64ビット版
+
var maxLength = 10000000;
:[[ファイル:CheckModified-x64-1.0.0.zip]]
 
;32ビット版
 
:[[ファイル:CheckModified-x86-1.0.0.zip]]
 
  
= インストール =
+
for (var e = new Enumerator(editor.documents); !e.atEnd(); e.moveNext()) {
ダウンロードしたファイルを解凍して出てくるPluginsフォルダの中身すべてをMeryのPluginsフォルダに配置してください。
+
var d = e.item();
 
+
// 保存済みならスキップ
= 使い方 =
+
if (d.Saved) {
インストール直後はプラグインが有効になっていますので、普段の同じようにMeryをお使いください。<br>
+
continue;
文書を変更した際、元の文書から変更されていなければタブに表示される「*」マークを自動的に消します。<br>
+
}
<br>
+
// 未保存はスキップ
このプラグインを無効化する場合は、[ツール(T)] -> [プラグイン] -> [文書が変更をチェック]を選択してチェックが付いていない状態にしてください。
+
if (!d.FullName) {
このプラグインを再度有効化する場合は、[ツール(T)] -> [プラグイン] -> [文書が変更をチェック]を選択してチェックが付いている状態にしてください。
+
continue;
 
+
}
= オプション =
+
// サイズ制限
;チェックする文書の最大文字数
+
if (maxLength > 0 && d.Text.length > maxLength) {
:チェックする文書の最大文字数を指定します。編集している文書が指定した文字数以上の場合、変更されたかどうかのチェックをしません。マイナスを指定すると無制限です(初期値)。動作が重い場合やメモリ消費量を抑えたい場合は値を指定してください。
+
continue;
;遅延時間
+
}
:高速化のために遅延処理を入れています。動作が重い場合は値を増やしてみてください。その代わりに大きくすると、変更マークが消すのにかかる時間が増えます。
+
// テキストのロード
 +
var loadText = IO.LoadFromFile(d.FullName, d.Encoding);
 +
// 一致していれば変更マークを消す
 +
if (loadText === d.Text) {
 +
d.Saved = true;
 +
}
 +
}
 +
</source>
  
 
= 更新履歴 =
 
= 更新履歴 =
* 1.0.0 : 2019/09/08
+
* 2019/03/03 初版
** 初版
 

2019年9月8日 (日) 16:03時点における最新版

概要[編集]

Meryでは一度編集してUndo等で元の状態に戻しても、変更マーク(タブに表示される「*」マーク)が消えない仕様になっています。 このマクロを使用すると、結果変更されていないタブの変更マークを消すことができます。

少し便利な Undo/RedoでもUndo/Redoのタイミングで変更マークを消すことができますが、Undo/Redoの度に変更されているかチェックするには私のPCでは少し重かったため任意のタイミングで実行できるように切り出しました。

注意点[編集]

includeライブラリのIO.jsを使用しています。 このマクロを使用する前にincludeライブラリをダウンロードし、Macrosフォルダ内に配置してください。

ソースコード[編集]

#title = "文書が変更されていなければ変更マークを消す"
#include "include/IO.js"

// チェックする文書の最大文字数。マイナスを指定すると無制限。
var maxLength = 10000000;

for (var e = new Enumerator(editor.documents); !e.atEnd(); e.moveNext()) {
	var d = e.item();
	// 保存済みならスキップ
	if (d.Saved) {
		continue;
	}
	// 未保存はスキップ
	if (!d.FullName) {
		continue;
	}
	// サイズ制限
	if (maxLength > 0 && d.Text.length > maxLength) {
		continue;
	}
	// テキストのロード
	var loadText = IO.LoadFromFile(d.FullName, d.Encoding);
	// 一致していれば変更マークを消す
	if (loadText === d.Text) {
		d.Saved = true;
	}
}

更新履歴[編集]

  • 2019/03/03 初版
スポンサーリンク