「テーマのトグル」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
ページの作成:「== 概要 == https://www.haijin-boys.com/discussions/6141 テーマをキーボードショートカットなどでトグルできるようになるマクロです。 フォーラム上でusky様が作成されたものですが、 フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。 == ソースコード == 2021年6月26日 21:21 | ucky 様 <syntaxhighlight lang="bs"> if ("ReadSett…」
 
Ucky (トーク | 投稿記録)
編集の要約なし
 
(2人の利用者による、間の21版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
https://www.haijin-boys.com/discussions/6141
テーマをキーボードショートカットなどでトグルできるようになるマクロです。[https://www.haijin-boys.com/discussions/6141#discussion-6151 フォーラム]でucky様が作成されたものですが、フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。


テーマをキーボードショートカットなどでトグルできるようになるマクロです。
== 動作環境 ==
フォーラム上でusky様が作成されたものですが、
* Mery Ver 3.8.0 以降
フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。
* Windows 7 以降
 
== 使用方法 ==
あらかじめ [オプション] ダイアログの [表示] カテゴリの [テーマ] で切り替え用1・切り替え用2・切り替え用3というテーマ名で切り替えたいテーマを「名前を付けて保存」または「インポート」してからマクロを実行してください。
 
切り替えるテーマの数や使用するテーマを変更したい場合は switch 文を編集してください。下記は FavoriteTheme1 と FavoriteTheme2 の二つのテーマを切り替える例です。
 
<syntaxhighlight lang="javascript" copy>
switch (currentTheme) {
case "FavoriteTheme1":
newTheme = "FavoriteTheme2";
break;
default:
newTheme = "FavoriteTheme1";
}
</syntaxhighlight>
 
最初から入っているテーマを使用したい場合でも「名前を付けて保存」で別途保存してください。
 
テーマの仕様変更で追加された項目を反映させたい場合はテーマを保存しなおす必要があります。
 
== 変更履歴 ==
* 2026-03-27
** テーマ切り替え中にステータスバーにメッセージを表示しないようにした
* 2026-01-11
** QuickJS で実行するようにした
* 2025-12-26
** パフォーマンスの改善
* 2025-12-19
** テーマ切り替え中にステータスバーとツールチップにメッセージを表示するようにした
* 2025-12-12
** テーマの項目を INI ファイルから取得するようにした(pizz さんが作成された「[[テーマの自動変更]]」マクロのアイデアを参考にさせていただきました)
** ディレクティブ(<code>#fonticon</code>と<code>#title</code>)を追加
* 2025-05-03
** Mery 3.7.13 時点の仕様に合わせて項目を追加
* 2024-12-29
** Mery 3.7.9 時点の仕様に合わせて項目を追加
* 2024-04-09
** メニュー等から変更した INI ファイルに書き込まれる前の設定が破棄されるのを修正
* 2024-03-03
** Mery 3.7.0 時点の仕様に合わせて項目を追加
* 2021-06-26
** 新規作成


== ソースコード ==
== ソースコード ==
2021年6月26日 21:21  |  ucky 様
<syntaxhighlight lang="javascript" copy>
<syntaxhighlight lang="bs">
#fonticon = "\uE790", #4d82b8, #dddddd
#language = "quickjs"
#title = "テーマのトグル"
 
const currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
let newTheme;


if ("ReadSettings" in editor) {
switch (currentTheme) {
  var currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
case "切り替え用1":
  var newTheme;
newTheme = "切り替え用2";
break;
case "切り替え用2":
newTheme = "切り替え用3";
break;
default:
newTheme = "切り替え用1";
}


  switch (currentTheme) {
const getItems = () => {
    case "切り替え用1":
let iniFullName = editor.FullName.replace(/\.exe$/i, ".ini");
      newTheme = "切り替え用2";
if (!shell.FileExists(iniFullName)) {
      break;
iniFullName = shell.GetEnv("APPDATA") + "\\Mery" + iniFullName.slice(iniFullName.lastIndexOf("\\"));
    case "切り替え用2":
}
      newTheme = "切り替え用3";
const iniText = shell.Exec(`cmd.exe /c type "${iniFullName}"`).stdOut;
      break;
const iniLines = iniText.split("\r\n");
    default:
const sectionStart = iniLines.indexOf(`[Theme\\${newTheme}]`);
      newTheme = "切り替え用1";
if (sectionStart === -1) {
  }
return;
}
const sectionEnd = iniLines.indexOf("", sectionStart);
return iniLines.slice(sectionStart + 1, sectionEnd).map(item => item.split("="));
};


  var items = [
const items = getItems();
    "GeneralForeColor",
    "GeneralBackColor",
    "GeneralStyle",
    "SelectionForeColor",
    "SelectionBackColor",
    "SelectionStyle",
    "MultiSelectionForeColor",
    "MultiSelectionBackColor",
    "MultiSelectionStyle",
    "CaretColor",
    "ImeCaretColor",
    "CurrentLineForeColor",
    "CurrentLineBackColor",
    "CurrentLineStyle",
    "HyperlinkForeColor",
    "HyperlinkBackColor",
    "HyperlinkStyle",
    "StringForeColor",
    "StringBackColor",
    "StringStyle",
    "CommentForeColor",
    "CommentBackColor",
    "CommentStyle",
    "ScriptForeColor",
    "ScriptBackColor",
    "ScriptStyle",
    "BracketForeColor",
    "BracketBackColor",
    "BracketStyle",
    "TagForeColor",
    "TagBackColor",
    "TagStyle",
    "Keyword1ForeColor",
    "Keyword1BackColor",
    "Keyword1Style",
    "Keyword2ForeColor",
    "Keyword2BackColor",
    "Keyword2Style",
    "Keyword3ForeColor",
    "Keyword3BackColor",
    "Keyword3Style",
    "Keyword4ForeColor",
    "Keyword4BackColor",
    "Keyword4Style",
    "Keyword5ForeColor",
    "Keyword5BackColor",
    "Keyword5Style",
    "Keyword6ForeColor",
    "Keyword6BackColor",
    "Keyword6Style",
    "Keyword7ForeColor",
    "Keyword7BackColor",
    "Keyword7Style",
    "Keyword8ForeColor",
    "Keyword8BackColor",
    "Keyword8Style",
    "CRLFForeColor",
    "CRLFBackColor",
    "CRLFStyle",
    "WrapForeColor",
    "WrapBackColor",
    "WrapStyle",
    "TabForeColor",
    "TabBackColor",
    "TabStyle",
    "EOFForeColor",
    "EOFBackColor",
    "EOFStyle",
    "CaretForeColor",
    "CaretBackColor",
    "CaretStyle",
    "LineNumbersForeColor",
    "LineNumbersBackColor",
    "LineNumbersStyle",
    "ChangedLineNumbersForeColor",
    "ChangedLineNumbersBackColor",
    "ChangedLineNumbersStyle",
    "RulerForeColor",
    "RulerBackColor",
    "RulerStyle",
    "VerticalLineForeColor",
    "VerticalLineBackColor",
    "VerticalLineStyle",
    "SBAlphabeticForeColor",
    "SBAlphabeticBackColor",
    "SBAlphabeticStyle",
    "SBNumberForeColor",
    "SBNumberBackColor",
    "SBNumberStyle",
    "SBSymbolForeColor",
    "SBSymbolBackColor",
    "SBSymbolStyle",
    "SBKatakanaForeColor",
    "SBKatakanaBackColor",
    "SBKatakanaStyle",
    "SBSpaceForeColor",
    "SBSpaceBackColor",
    "SBSpaceStyle",
    "DBAlphabetForeColor",
    "DBAlphabetBackColor",
    "DBAlphabetStyle",
    "DBNumberForeColor",
    "DBNumberBackColor",
    "DBNumberStyle",
    "DBSymbolForeColor",
    "DBSymbolBackColor",
    "DBSymbolStyle",
    "DBHiraganaForeColor",
    "DBHiraganaBackColor",
    "DBHiraganaStyle",
    "DBKatakanaForeColor",
    "DBKatakanaBackColor",
    "DBKatakanaStyle",
    "DBKanjiForeColor",
    "DBKanjiBackColor",
    "DBKanjiStyle",
    "DBSpaceForeColor",
    "DBSpaceBackColor",
    "DBSpaceStyle",
    "BookmarkForeColor",
    "BookmarkBackColor",
    "BookmarkStyle",
    "SpellForeColor",
    "SpellBackColor",
    "SpellStyle",
    "SearchStringForeColor",
    "SearchStringBackColor",
    "SearchStringStyle",
    "AutoMarkerForeColor",
    "AutoMarkerBackColor",
    "AutoMarkerStyle",
    "Marker1ForeColor",
    "Marker1BackColor",
    "Marker1Style",
    "Marker2ForeColor",
    "Marker2BackColor",
    "Marker2Style",
    "Marker3ForeColor",
    "Marker3BackColor",
    "Marker3Style",
    "Marker4ForeColor",
    "Marker4BackColor",
    "Marker4Style",
    "Marker5ForeColor",
    "Marker5BackColor",
    "Marker5Style",
    "Marker6ForeColor",
    "Marker6BackColor",
    "Marker6Style",
    "Marker7ForeColor",
    "Marker7BackColor",
    "Marker7Style",
    "Marker8ForeColor",
    "Marker8BackColor",
    "Marker8Style",
    "IndicatorModifiedForeColor",
    "IndicatorModifiedBackColor",
    "IndicatorModifiedStyle",
    "IndicatorSavedForeColor",
    "IndicatorSavedBackColor",
    "IndicatorSavedStyle",
    "ScrollBarModifiedForeColor",
    "ScrollBarModifiedBackColor",
    "ScrollBarModifiedStyle",
    "ScrollBarSavedForeColor",
    "ScrollBarSavedBackColor",
    "ScrollBarSavedStyle",
    "ScrollBarBookmarkForeColor",
    "ScrollBarBookmarkBackColor",
    "ScrollBarBookmarkStyle",
    "ScrollBarFoundForeColor",
    "ScrollBarFoundBackColor",
    "ScrollBarFoundStyle",
    "ScrollBarCaretForeColor",
    "ScrollBarCaretBackColor",
    "ScrollBarCaretStyle",
    "ForeignForeColor",
    "ForeignBackColor",
    "ForeignStyle",
    "OtherForeColor",
    "OtherBackColor",
    "OtherStyle",
    "ControlForeColor",
    "ControlBackColor",
    "ControlStyle",
    "InvalidForeColor",
    "InvalidBackColor",
    "InvalidStyle"
  ];


  if (editor.ReadSettingString("Theme\\" + newTheme, "GeneralForeColor", "") !== "") {
if (items) {
    editor.WriteSettingString("Themes", "ThemeName", newTheme);
ShowTip("テーマ切り替え中...しばらくお待ちください", meShowTipPosMouse);
editor.WriteSettings();


    for (var i = 0; i < items.length; i++) {
editor.WriteSettingString("Themes", "ThemeName", newTheme);
      editor.WriteSettingString("Display", items[i],
for (const [ident, value] of items) {
        editor.ReadSettingString("Theme\\" + newTheme, items[i], "")
editor.WriteSettingString("Display", ident, value);
      );
}
    }


    editor.ReadSettings();
editor.ReadSettings();
  } else {
ShowTip("", meShowTipHide);
    alert(newTheme + " という名前でテーマを保存してください");
  }
} else {
} else {
  alert("Version " + editor.Version + " では使えません");
Alert(`${newTheme} という名前でテーマを保存してください`);
}
}
</syntaxhighlight>
</syntaxhighlight>

2026年3月27日 (金) 20:59時点における最新版

概要[編集]

テーマをキーボードショートカットなどでトグルできるようになるマクロです。フォーラムでucky様が作成されたものですが、フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。

動作環境[編集]

  • Mery Ver 3.8.0 以降
  • Windows 7 以降

使用方法[編集]

あらかじめ [オプション] ダイアログの [表示] カテゴリの [テーマ] で切り替え用1・切り替え用2・切り替え用3というテーマ名で切り替えたいテーマを「名前を付けて保存」または「インポート」してからマクロを実行してください。

切り替えるテーマの数や使用するテーマを変更したい場合は switch 文を編集してください。下記は FavoriteTheme1 と FavoriteTheme2 の二つのテーマを切り替える例です。

switch (currentTheme) {
	case "FavoriteTheme1":
		newTheme = "FavoriteTheme2";
		break;
	default:
		newTheme = "FavoriteTheme1";
}

最初から入っているテーマを使用したい場合でも「名前を付けて保存」で別途保存してください。

テーマの仕様変更で追加された項目を反映させたい場合はテーマを保存しなおす必要があります。

変更履歴[編集]

  • 2026-03-27
    • テーマ切り替え中にステータスバーにメッセージを表示しないようにした
  • 2026-01-11
    • QuickJS で実行するようにした
  • 2025-12-26
    • パフォーマンスの改善
  • 2025-12-19
    • テーマ切り替え中にステータスバーとツールチップにメッセージを表示するようにした
  • 2025-12-12
    • テーマの項目を INI ファイルから取得するようにした(pizz さんが作成された「テーマの自動変更」マクロのアイデアを参考にさせていただきました)
    • ディレクティブ(#fonticon#title)を追加
  • 2025-05-03
    • Mery 3.7.13 時点の仕様に合わせて項目を追加
  • 2024-12-29
    • Mery 3.7.9 時点の仕様に合わせて項目を追加
  • 2024-04-09
    • メニュー等から変更した INI ファイルに書き込まれる前の設定が破棄されるのを修正
  • 2024-03-03
    • Mery 3.7.0 時点の仕様に合わせて項目を追加
  • 2021-06-26
    • 新規作成

ソースコード[編集]

#fonticon = "\uE790", #4d82b8, #dddddd
#language = "quickjs"
#title = "テーマのトグル"

const currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
let newTheme;

switch (currentTheme) {
	case "切り替え用1":
		newTheme = "切り替え用2";
		break;
	case "切り替え用2":
		newTheme = "切り替え用3";
		break;
	default:
		newTheme = "切り替え用1";
}

const getItems = () => {
	let iniFullName = editor.FullName.replace(/\.exe$/i, ".ini");
	if (!shell.FileExists(iniFullName)) {
		iniFullName = shell.GetEnv("APPDATA") + "\\Mery" + iniFullName.slice(iniFullName.lastIndexOf("\\"));
	}
	const iniText = shell.Exec(`cmd.exe /c type "${iniFullName}"`).stdOut;
	const iniLines = iniText.split("\r\n");
	const sectionStart = iniLines.indexOf(`[Theme\\${newTheme}]`);
	if (sectionStart === -1) {
		return;
	}
	const sectionEnd = iniLines.indexOf("", sectionStart);
	return iniLines.slice(sectionStart + 1, sectionEnd).map(item => item.split("="));
};

const items = getItems();

if (items) {
	ShowTip("テーマ切り替え中...しばらくお待ちください", meShowTipPosMouse);
	editor.WriteSettings();

	editor.WriteSettingString("Themes", "ThemeName", newTheme);
	for (const [ident, value] of items) {
		editor.WriteSettingString("Display", ident, value);
	}

	editor.ReadSettings();
	ShowTip("", meShowTipHide);
} else {
	Alert(`${newTheme} という名前でテーマを保存してください`);
}
スポンサーリンク