MeryToys

提供: MeryWiki
ナビゲーションに移動 検索に移動

概要[編集]

Mery の隠しオプションを簡単に設定できるマクロです。

注意事項[編集]

  • Mery Ver 3.7.17 以降で動作します。
  • 一部の設定は、Mery の再起動が必要です。

使い方[編集]

  1. マクロを実行します。
  2. ポップアップ メニューが表示されるので、設定したい項目を選択します。
  3. 値を切り替えるか、必要に応じて入力します。
  4. 設定内容によっては、Mery を再起動する必要があります。設定が反映されていない場合は、Mery を再起動してみてください。

ソースコード (MeryToys.js)[編集]

#title = "MeryToys"

var options = [
	{
		name: "基本",
		items: [
			{
				name: "折り返しモードを同期する",
				section: "General",
				ident: "SyncWrap",
				default: 0,
				description: "0: なし, 1: 同期, 2: すべて",
			},
			{
				name: "システム ダーク モードを使用する",
				section: "General",
				ident: "UseSysDarkMode",
				default: true,
			},
			{
				name: "行番号の増分",
				section: "General",
				ident: "LineNumbersCountBy",
				default: 10,
			},
			{
				name: "従来のルーラーを使用する",
				section: "General",
				ident: "UseClassicRuler",
				default: true,
			},
			{
				name: "IME 候補ウィンドウの位置を後ろにする",
				section: "General",
				ident: "ImeCandidatePos",
				default: false,
			},
			{
				name: "Alt + Tab キーの動作を改善",
				section: "General",
				ident: "AltTabFix",
				default: false,
			},
			{
				name: "Ctrl + ホイールでフォント サイズを変更",
				section: "General",
				ident: "WheelFont",
				default: true,
			},
			{
				name: "文字単位で元に戻す",
				section: "General",
				ident: "UndoCharByChar",
				default: false,
			},
			{
				name: "ファイルから検索のスレッド数",
				section: "General",
				ident: "MaxThreads",
				default: 4,
			},
		]
	},
	{
		name: "ファイル",
		items: [
			{
				name: "無題のタブの名前",
				section: "General",
				ident: "Untitled",
				default: "",
			},
			{
				name: "無題の文書に連番を付ける",
				section: "General",
				ident: "UntitledSeqNum",
				default: true,
			},
			{
				name: "初期フォルダー",
				section: "File",
				ident: "InitialFolder",
				default: "",
			},
			{
				name: "ファイル監視を使用する",
				section: "File",
				ident: "UseFileWatcher",
				default: false,
			},
			{
				name: "ファイル名をフルパスで表示",
				section: "File",
				ident: "ShowFullPath",
				default: true,
			},
			{
				name: "非アクティブ時フルパスにしない",
				section: "File",
				ident: "NoFullPathIfNotActive",
				default: true,
			},
		]
	},
	{
		name: "タブ/インデント",
		items: [
			{
				name: "従来のタブ幅を使用する",
				section: "General",
				ident: "UseLegacyTabWidth",
				default: false,
			},
		]
	},
	{
		name: "検索",
		items: [
			{
				name: "厳密な検索",
				section: "Search",
				ident: "FindStrict",
				default: true,
			},
			{
				name: "厳密な置換",
				section: "Search",
				ident: "ReplaceStrict",
				default: true,
			},
		]
	},
	{
		name: "表示",
		items: [
			{
				name: "Zen モード",
				items: [
					{
						name: "行番号を非表示",
						section: "View",
						ident: "HideLineNumbers",
						default: true,
					},
					{
						name: "ルーラーを非表示",
						section: "View",
						ident: "HideRuler",
						default: true,
					},
					{
						name: "記号を非表示",
						section: "View",
						ident: "HideMarks",
						default: true,
					},
					{
						name: "文字数を非表示",
						section: "View",
						ident: "HideWordCount",
						default: true,
					},
				]
			},
			{
				name: "-"
			},
			{
				name: "文字最小幅",
				section: "Display",
				ident: "CharacterMinWidth",
				default: 0,
				description: "px",
			},
			{
				name: "DirectWrite の文字幅を GDI 互換にする",
				section: "Display",
				ident: "GdiCompatible",
				default: false,
			},
			{
				name: "正規表現モード",
				section: "Display",
				ident: "RegExMode",
				default: 0,
				description: "0: 従来, 1: 柔軟, 2: 厳密",
			},
			{
				name: "上マージン",
				section: "Display",
				ident: "TopMargin",
				default: 0,
				description: "px",
			},
			{
				name: "左マージン",
				section: "Display",
				ident: "LeftMargin",
				default: 0,
				description: "px",
			},
			{
				name: "右マージン",
				section: "Display",
				ident: "RightMargin",
				default: 3,
				description: "文字",
			},
			{
				name: "カーソル幅",
				section: "Display",
				ident: "CaretWidth",
				default: 0,
				description: "px",
			},
			{
				name: "カーソル高",
				section: "Display",
				ident: "CaretHeight",
				default: 0,
				description: "px",
			},
			{
				name: "カーソル幅 (IME 有効)",
				section: "Display",
				ident: "ImeCaretWidth",
				default: 0,
				description: "px",
			},
			{
				name: "カーソル高 (IME 有効)",
				section: "Display",
				ident: "ImeCaretHeight",
				default: 0,
				description: "px",
			},
			{
				name: "テキスト カーソル インジケーターを有効にする",
				section: "Display",
				ident: "CursorIndicator",
				default: false,
			},
		]
	},
	{
		name: "スクロール",
		items: [
			{
				name: "システム スクロール バーを使用する",
				section: "Scroll",
				ident: "UseSystemScrollBar",
				default: false,
			},
			{
				name: "タイプライター スクロール オフセット",
				section: "Scroll",
				ident: "TypewriterScrollOffset",
				default: 0,
				description: "行",
			},
		]
	},
	{
		name: "ウィンドウ",
		items: [
			{
				name: "ダイアログ",
				items: [
					{
						name: "フォント名",
						section: "MainForm",
						ident: "FontName",
						default: "",
					},
					{
						name: "フォント サイズ",
						section: "MainForm",
						ident: "FontSize",
						default: 8,
						description: "pt",
					},
				]
			},
			{
				name: "アウトプット バー",
				items: [
					{
						name: "フォント名",
						section: "ChildForm",
						ident: "OutputBarFontName",
						default: "",
					},
					{
						name: "フォント サイズ",
						section: "ChildForm",
						ident: "OutputBarFontSize",
						default: 8,
						description: "pt",
					},
				]
			},
			{
				name: "-"
			},
			{
				name: "スクリーンの縁にスナップ",
				section: "ChildForm",
				ident: "ScreenSnap",
				default: false,
			},
			{
				name: "スクリーンスナップの距離",
				section: "ChildForm",
				ident: "SnapBuffer",
				default: 8,
				description: "px",
			},
		]
	},
	{
		name: "スペル チェック",
		items: [
			{
				name: "大文字小文字を区別しない",
				section: "File",
				ident: "IgnoreUpperCase",
				default: true,
			},
		]
	},
	{
		name: "自動保存",
		items: [
			{
				name: "遅延",
				section: "AutoSave",
				ident: "AutoSaveDelay",
				default: 1000,
				description: "ms",
			},
			{
				name: "保存しないで終了する場合、最後に自動保存されたバージョンを残す",
				section: "AutoSave",
				ident: "AutoSaveKeepUnsavedChanges",
				default: true,
			},
		]
	},
	{
		name: "バックアップ",
		items: [
			{
				name: "最大数",
				section: "Backup",
				ident: "BackupMaxCount",
				default: 0,
			},
		]
	},
	{
		name: "履歴",
		items: [
			{
				name: "クリップボード履歴の遅延",
				section: "History",
				ident: "ClipbrdDelay",
				default: 200,
				description: "ms",
			},
			{
				name: "クリップボード履歴の最大文字数",
				section: "History",
				ident: "ClipbrdMaxLength",
				default: 0,
			},
		]
	},
	{
		name: "アウトライン",
		items: [
			{
				name: "フォント名",
				section: "Outline",
				ident: "FontName",
				default: "",
			},
			{
				name: "フォント サイズ",
				section: "Outline",
				ident: "FontSize",
				default: 8,
				description: "pt",
			},
			{
				name: "文字色",
				section: "Outline",
				ident: "ForeColor",
				default: "",
				description: "#RGB, #RRGGBB",
			},
			{
				name: "背景色",
				section: "Outline",
				ident: "BackColor",
				default: "",
				description: "#RGB, #RRGGBB",
			},
		]
	},
];

var commandId = 1;
var commandMap = {};

function addMenuItems(items, parentMenu) {
	for (var i = 0; i < items.length; i++) {
		var item = items[i];
		if (item.items && item.items.length > 0) {
			var subMenu = CreatePopupMenu();
			addMenuItems(item.items, subMenu);
			parentMenu.AddPopup(item.name, subMenu);
		} else if (item.name === "-") {
			parentMenu.Add("", 0, meMenuSeparator);
		} else {
			var d = item.default;
			switch (typeof d) {
				case "boolean":
					d = Boolean(editor.ReadSettingInteger(item.section, item.ident, Number(d)));
					break;
				case "number":
					d = editor.ReadSettingInteger(item.section, item.ident, d);
					break;
				case "string":
					d = editor.ReadSettingString(item.section, item.ident, d);
					break;
				default:
					break;
			}
			parentMenu.Add(item.name + ": " + d, commandId);
			commandMap[commandId] = {
				section: item.section,
				ident: item.ident,
				value: d,
				name: item.name,
				description: item.description
			};
			commandId++;
		}
	}
}

var menu = CreatePopupMenu();
for (var i = 0; i < options.length; i++) {
	var option = options[i];
	var subMenu = CreatePopupMenu();
	addMenuItems(option.items, subMenu);
	menu.AddPopup(option.name, subMenu);
}
var result = menu.Track(mePosMouse);
if (result !== 0) {
	var d = commandMap[result];
	switch (typeof d.value) {
		case "boolean":
			editor.WriteSettings();
			editor.WriteSettingInteger(d.section, d.ident, Number(!d.value));
			editor.ReadSettings();
			break;
		case "number":
			var s = prompt(d.name + (d.description ? " (" + d.description + "):" : ":"), d.value);
			if (s !== null) {
				s ? (!isNaN(s) && (editor.WriteSettings(), editor.WriteSettingInteger(d.section, d.ident, Number(s)), editor.ReadSettings())) : editor.DeleteSetting(d.section, d.ident);
			}
			break;
		case "string":
			var s = prompt(d.name + (d.description ? " (" + d.description + "):" : ":"), d.value);
			if (s !== null) {
				s ? (editor.WriteSettings(), editor.WriteSettingString(d.section, d.ident, s), editor.ReadSettings()) : editor.DeleteSetting(d.section, d.ident);
			}
			break;
		default:
			break;
	}
}

ToDo[編集]

  • 各オプションの説明 (うーん、できれば避けたいお仕事)
  • Mery の再起動が必要なときに、それっぽく教えてくれるやつ?
  • Mery のバージョンチェック (正直やりたくないし、どのバージョンで作ったかも忘れた)

スペシャルサンクス[編集]

本マクロの制作にあたり、開発者さえ忘れていた隠しオプションについては、MSY-07 さんが作成された「隠しオプション一覧」を参考にさせていただきました。MSY-07 さんの詳細な記事に深く感謝しつつ、このマクロをお届けします。

スポンサーリンク