「編集モードの自動選択」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
ページを新規作成
 
MSY-07 (トーク | 投稿記録)
正規表現を修正(エラーが出るため)
 
(3人の利用者による、間の28版が非表示)
1行目: 1行目:
「'''編集モードの自動選択'''」 または 「'''書き換え禁止で開く'''」
== 概要 ==
拡張子で適切に判別できないファイルの「編集モード」を、ファイル名で自動割り振りします。


「ファイルを開いたとき」専用のイベントマクロです。
また、普段は再編集の必要がないファイルをファイル名で自動割り振りして「書き換え禁止」で開くようにします。


拡張子で適切に判別できないファイルの「編集モード」を、ファイル名で自動割りふりします。<br>
※「書き換え禁止」はMery上で編集禁止(仮ロック)にする機能で、[編集] メニューの項目「書き換え禁止」で解除できます。ファイル属性を「読み取り専用」にするわけではありません。
また、ふだんは再編集の必要がないファイルをファイル名で自動割りふりして「書き換え禁止」で開くようにします。


※「書き換え禁止」は Mery 上で編集禁止(仮ロック)にする機能で、 [編集]メニューの項目「書き換え禁止」で解除できます。ファイル属性を「読み取り専用」するわけではありません。
== 注意事項 ==
: ''c.f. '' 「[[マテリアルデザインっぽいアイコンと『小マクロ集』#属性変更|属性変更]]」マクロ
「ファイルを開いた時」専用のイベントマクロです([[ヘルプ:マクロ#カスタマイズ|カスタマイズ]]を参照)。


== ソースコード ==
== コマンドラインオプション ==
ファイル名や編集モード名はサンプルですので、ご利用の環境にあわせて適宜書き換えてください。
マクロ上でMeryの[[ヘルプ:目次#コマンドラインオプション|コマンドラインオプション]]指定に相当する記述法は以下の通りになります。
*ファイル名は、"正規表現で部分一致させる" パターンと "ファイル名を小文字で列挙する" パターンとを利用できます。
* ファイル名の日本語/全角文字の部分はそのまま記述します。
<source lang="javascript">
#title = "編集モードの自動選択"
// または
// "書き換え禁止で開く"
// 「ファイルを開いたとき」専用のイベントマクロ


// document.Mode = "HOGE"; // 「編集モード名」を指定する (表示メニューのアイテム)
※このページのソースコードに書き足す場合は「document.」の部分は省略可。
// document.ReadOnly = true; // 「書き換え禁止」にする (編集メニューのアイテム)


* document.[[マクロリファレンス:Document_インターフェイス#ReadOnly プロパティ|ReadOnly]] '''= true;'''
** コマンドラインオプション (<u>Mery.exe'''/r'''</u>)
** 書き換え禁止に設定します
* document.[[マクロリファレンス:Document_インターフェイス#Mode_プロパティ|Mode]] '''= "ModeName";'''
** コマンドラインオプション (<u>Mery.exe'''/m''' ''"ModeName"''</u>)
** 編集モードを指定します


// 【■正規表現でファイル名に「部分一致」させるパターン】と【■"ファイル名" を小文字で列挙するパターン】にファイル名を追加してご利用ください
== ソースコード ==
with ( document ) {
<syntaxhighlight lang="javascript" copy>
#title = "編集モード自動判別"
#tooltip = "表示モード自動判別"


  // ■正規表現でファイル名に「部分一致」させるパターン
// -----------------------------------------------------------------------------
  // ※フラグ i を設定しているばあい、大文字と小文字が区別されない
// ファイル名に含まれる特定ワードで表示モードを変更するマクロ
// イベント実行「ファイルを開いた時」または「アクティブな文書が変更された時」
// -----------------------------------------------------------------------------
const type = {
n: document.Name,
f: document.FullName
};


  if ( Name.match( /read ?me|eula|COPYING/i ) ) { // ReadMe ファイルなど
//-----------------------------------設定------------------------------------
    ReadOnly = true;
const n = type.f; // 検索対象の種類:type.n:ファイル名と拡張子  type.f:フルパス
    Quit();
const RO = "書禁"; // 書き換え禁止フラグ名(編集モード名と被る場合に変更してください)
  }
const m = [
  if ( Name.match( /正規表現.*\.txt/ ) ) { // 正規表現のリファレンスなど
// [/ファイル名(正規表現可)/検索フラグ(省略可), "編集モード名(省略可)", "書禁フラグ(省略可)"],
    Mode = "Reg_Exp"; // 「JaneStyle (正規表現用)」から間引きした構文ファイル
[/(readme|README)\.txt$/, "Markdown"],
    ReadOnly = true;
[/青空文庫|[\\\/]book[\\\/]/i, "書禁"],
    Quit();
[/\\Mery\\Macros\\.+\.js$/i, "Mery_Macro_JS"],
  }
];
  if ( Name.match( /Mery_小マクロ集/i ) ) { // 『Mery_小マクロ集』
    Mode = "JavaScript";
    ReadOnly = true;
    Quit();
  }
 
 
  // ■"ファイル名" を小文字で列挙するパターン
 
  switch ( Name.toLowerCase() ) {
 
    case "mery.txt": // ReadMe ファイルなど
    case "host": // ふだんは書き換えの必要のないシステムファイルなど
      ReadOnly = true;
      break;
 
    case "replacestr.txt": // Jane系2ちゃんブラウザの設定ファイル
    case "imageviewurlreplace.dat":
    case "urlexec.dat":
    case "command.dat":
      Mode = "JaneStyle (正規表現用)" // 構文ファイル「JaneStyle (正規表現用)」
      break;
 
    default:
      break;
  }


//-----------------------------------本体------------------------------------
for (let i = 0, imax = m.length; i < imax; i = (i + 1) | 0) {
if (n.match(m[i][0])) {
if (m[i][1] != RO) {
editor.ActiveDocument.mode = m[i][1];
if (m[i][2] === RO) {
editor.ActiveDocument.ReadOnly = true;
}
} else {
editor.ActiveDocument.ReadOnly = true;
}
break;
}
}
}
</source>
</syntaxhighlight>
 
== 書き換え禁止 ON/OFF ==
おまけです。
<source lang="javascript">
#title = "書き換え禁止 ON/OFF"
#tooltip = "書き換え禁止 ON/OFF"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",36
if ( document.ReadOnly )
  document.ReadOnly = false;
else  document.ReadOnly = true;
</source>

2026年9月11日 (金) 08:23時点における最新版

概要[編集]

拡張子で適切に判別できないファイルの「編集モード」を、ファイル名で自動割り振りします。

また、普段は再編集の必要がないファイルをファイル名で自動割り振りして「書き換え禁止」で開くようにします。

※「書き換え禁止」はMery上で編集禁止(仮ロック)にする機能で、[編集] メニューの項目「書き換え禁止」で解除できます。ファイル属性を「読み取り専用」にするわけではありません。

注意事項[編集]

「ファイルを開いた時」専用のイベントマクロです(カスタマイズを参照)。

コマンドラインオプション[編集]

マクロ上でMeryのコマンドラインオプション指定に相当する記述法は以下の通りになります。

※このページのソースコードに書き足す場合は「document.」の部分は省略可。

  • document.ReadOnly = true;
    • コマンドラインオプション (Mery.exe/r)
    • 書き換え禁止に設定します
  • document.Mode = "ModeName";
    • コマンドラインオプション (Mery.exe/m "ModeName")
    • 編集モードを指定します

ソースコード[編集]

#title = "編集モード自動判別"
#tooltip = "表示モード自動判別"

// -----------------------------------------------------------------------------
// ファイル名に含まれる特定ワードで表示モードを変更するマクロ
// イベント実行「ファイルを開いた時」または「アクティブな文書が変更された時」
// -----------------------------------------------------------------------------
const type = {
	n: document.Name,
	f: document.FullName
};

//-----------------------------------設定------------------------------------
const n = type.f; // 検索対象の種類:type.n:ファイル名と拡張子  type.f:フルパス
const RO = "書禁"; // 書き換え禁止フラグ名(編集モード名と被る場合に変更してください)
const m = [
//	[/ファイル名(正規表現可)/検索フラグ(省略可), "編集モード名(省略可)", "書禁フラグ(省略可)"],
	[/(readme|README)\.txt$/, "Markdown"],
	[/青空文庫|[\\\/]book[\\\/]/i, "書禁"],
	[/\\Mery\\Macros\\.+\.js$/i, "Mery_Macro_JS"],
];

//-----------------------------------本体------------------------------------
for (let i = 0, imax = m.length; i < imax; i = (i + 1) | 0) {
	if (n.match(m[i][0])) {
		if (m[i][1] != RO) {
			editor.ActiveDocument.mode = m[i][1];
			if (m[i][2] === RO) {
				editor.ActiveDocument.ReadOnly = true;
			}
		} else {
			editor.ActiveDocument.ReadOnly = true;
		}
		break;
	}
}
スポンサーリンク