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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
Ucky (トーク | 投稿記録)
編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
テーマをキーボードショートカットなどでトグルできるようになるマクロです。[https://www.haijin-boys.com/discussions/6141#discussion-6151 フォーラム]でucky様が作成されたものですが、フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。
テーマをキーボードショートカットなどでトグルできるようになるマクロです。[https://www.haijin-boys.com/discussions/6141#discussion-6151 フォーラム]でucky様が作成されたものですが、フォーラムだけだと埋没してしまい検索に苦労したので、こちらにも記載させていただきました。
== 動作環境 ==
Mery Ver 3.7.14 以降で使用できます。
== 使用方法 ==
あらかじめ [オプション] ダイアログの [表示] カテゴリの [テーマ] で切り替え用1・切り替え用2・切り替え用3というテーマ名で切り替えたいテーマを「名前を付けて保存」してからマクロを実行してください。
切り替えるテーマの数や保存する名前を変更したい場合は switch 文を編集してください。下記は FavoriteTheme1 と FavoriteTheme2 の二つのテーマを切り替える例です。
<syntaxhighlight lang="javascript" copy>
switch (currentTheme) {
case "FavoriteTheme1":
newTheme = "FavoriteTheme2";
break;
default:
newTheme = "FavoriteTheme1";
}
</syntaxhighlight>
最初から入っているテーマを使用したい場合でも「名前を付けて保存」で別途保存してください。
テーマの仕様変更で追加された項目を反映させたい場合はテーマを保存しなおす必要があります。


== 変更履歴 ==
== 変更履歴 ==
* 2025-12-12
** テーマの項目を INI ファイルから取得するようにした(pizz さんが作成された「[[テーマの自動変更]]」マクロのアイデアを参考にさせていただきました)
** ディレクティブ(<code>#fonticon</code>と<code>#title</code>)を追加
* 2025-05-03
* 2025-05-03
** Mery 3.7.13 時点の仕様に合わせて項目を追加
** Mery 3.7.13 時点の仕様に合わせて項目を追加
16行目: 41行目:
== ソースコード ==
== ソースコード ==
<syntaxhighlight lang="javascript" copy>
<syntaxhighlight lang="javascript" copy>
if ("ReadSettings" in editor) {
#fonticon = "\uE790", #4d82b8, #dddddd
  var currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
#title = "テーマのトグル"
  var newTheme;
 
var currentTheme = editor.ReadSettingString("Themes", "ThemeName", "");
var newTheme;
 
switch (currentTheme) {
case "切り替え用1":
newTheme = "切り替え用2";
break;
case "切り替え用2":
newTheme = "切り替え用3";
break;
default:
newTheme = "切り替え用1";
}


  // あらかじめ [オプション] ダイアログの [表示] カテゴリの [テーマ] で
var getItems = function () {
  // 切り替え用1・切り替え用2・切り替え用3というテーマ名で切り替えたいテーマを「名前を付けて保存」しておきます
var iniFullName = editor.FullName.replace(/\.exe$/i, ".ini");
  switch (currentTheme) {
if (!shell.FileExists(iniFullName)) {
    case "切り替え用1":
iniFullName = shell.GetEnv("APPDATA") + "\\Mery" + iniFullName.slice(iniFullName.lastIndexOf("\\"));
      newTheme = "切り替え用2";
}
      break;
var iniText = shell.Exec("cmd.exe /k", "type \"" + iniFullName + "\"", true).stdOut;
    case "切り替え用2":
var sectionStart = iniText.indexOf("\r\n[Theme\\" + newTheme + "]\r\n");
      newTheme = "切り替え用3";
if (sectionStart === -1) {
      break;
return false;
    default:
}
      newTheme = "切り替え用1";
var sectionEnd = iniText.indexOf("\r\n\r\n", sectionStart);
  }
var items = iniText.slice(sectionStart, sectionEnd).split("\r\n").slice(2);
for (var i = 0; i < items.length; i++) {
items[i] = items[i].slice(0, items[i].indexOf("="));
}
return items;
};


  // Mery 3.7.13 時点での項目
var items = getItems();
  // テーマの仕様変更の際には項目を見直す必要があると思います
  var items = [
    "GeneralForeColor",
    "GeneralBackColor",
    "GeneralStyle",
    "SelectionForeColor",
    "SelectionBackColor",
    "SelectionStyle",
    "MultiSelectionForeColor",
    "MultiSelectionBackColor",
    "MultiSelectionStyle",
    "CaretColor",
    "ImeCaretColor",
    "CurrentLineForeColor",
    "CurrentLineBackColor",
    "CurrentLineStyle",
    "EvenLinesForeColor",
    "EvenLinesBackColor",
    "EvenLinesStyle",
    "HyperlinkForeColor",
    "HyperlinkBackColor",
    "HyperlinkStyle",
    "ColorStringForeColor",
    "ColorStringBackColor",
    "ColorStringStyle",
    "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",
    "SelectedLineNumbersForeColor",
    "SelectedLineNumbersBackColor",
    "SelectedLineNumbersStyle",
    "LineNumbersLineForeColor",
    "LineNumbersLineBackColor",
    "LineNumbersLineStyle",
    "RulerForeColor",
    "RulerBackColor",
    "RulerStyle",
    "RulerLineForeColor",
    "RulerLineBackColor",
    "RulerLineStyle",
    "VerticalLineForeColor",
    "VerticalLineBackColor",
    "VerticalLineStyle",
    "IndentGuidesForeColor",
    "IndentGuidesBackColor",
    "IndentGuidesStyle",
    "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.WriteSettings();
ShowTip("テーマ切り替え中...しばらくお待ちください", meShowTipPosMouse);
editor.WriteSettings();


    editor.WriteSettingString("Themes", "ThemeName", newTheme);
editor.WriteSettingString("Themes", "ThemeName", newTheme);


    // テーマを「名前を付けて保存」したときに設定ファイルに追加される
// テーマを「名前を付けて保存」したときに設定ファイルに追加される
    // [Theme\テーマ名] セクションを読んで [Display] セクションの該当する項目を書き換える
// [Theme\テーマ名] セクションを読んで [Display] セクションの該当する項目を書き換える
    for (var i = 0; i < items.length; i++) {
for (var i = 0; i < items.length; i++) {
      editor.WriteSettingString("Display", items[i],
editor.WriteSettingString("Display", items[i],
        editor.ReadSettingString("Theme\\" + newTheme, items[i], "")
editor.ReadSettingString("Theme\\" + newTheme, items[i], "")
      );
);
    }
}


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

2025年12月12日 (金) 23:53時点における版

概要

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

動作環境

Mery Ver 3.7.14 以降で使用できます。

使用方法

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

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

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

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

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

変更履歴

  • 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
#title = "テーマのトグル"

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

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

var getItems = function () {
	var iniFullName = editor.FullName.replace(/\.exe$/i, ".ini");
	if (!shell.FileExists(iniFullName)) {
		iniFullName = shell.GetEnv("APPDATA") + "\\Mery" + iniFullName.slice(iniFullName.lastIndexOf("\\"));
	}
	var iniText = shell.Exec("cmd.exe /k", "type \"" + iniFullName + "\"", true).stdOut;
	var sectionStart = iniText.indexOf("\r\n[Theme\\" + newTheme + "]\r\n");
	if (sectionStart === -1) {
		return false;
	}
	var sectionEnd = iniText.indexOf("\r\n\r\n", sectionStart);
	var items = iniText.slice(sectionStart, sectionEnd).split("\r\n").slice(2);
	for (var i = 0; i < items.length; i++) {
		items[i] = items[i].slice(0, items[i].indexOf("="));
	}
	return items;
};

var items = getItems();

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

	editor.WriteSettingString("Themes", "ThemeName", newTheme);

	// テーマを「名前を付けて保存」したときに設定ファイルに追加される
	// [Theme\テーマ名] セクションを読んで [Display] セクションの該当する項目を書き換える
	for (var i = 0; i < items.length; i++) {
		editor.WriteSettingString("Display", items[i],
			editor.ReadSettingString("Theme\\" + newTheme, items[i], "")
		);
	}

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