Mery.iniのオプション値を取得

提供: MeryWiki
2019年3月10日 (日) 02:10時点におけるSukemaru (トーク | 投稿記録)による版 (メモ)
ナビゲーションに移動 検索に移動

GetIniOption() 関数

Mery.ini ファイル内の各行
 OptionName=value
の「項目名」の文字列を指定して「値」を取得するための 組み込み用関数 です。
includeライブラリMeryInfo.js とは異なり、Mery.ini の任意の項目名(左辺)で検索をかけて、生の値(右辺)をそのまま取得します。


組み込み関数本体 を任意のマクロのソースコード内にペーストして使用します。
使い方は 使用例 を参考にしてください。


  • このマクロは Mery.ini の内容を編集(書き換え)するものではありません。
  • 基本的に Mery.ini はオプション設定パネルを [OK] で閉じたときと Mery を終了したときにしか更新されず、標準メニューバー、ツールバーアイコン、右クリックメニュー、ショートカットキー、マクロ等でエディタの設定状態を変更しているばあい、INI の内容が最新の状態とはなりません。
    → かならずしもエディタの表示状態どおりの値を取得できるわけではない。

よって MeryInfo.js にはない項目として「行の表示方法」の取得ぐらいしか使い道がない…

  • Mery.ini の直接編集でオプションパネルから設定変更できない「隠し機能」項目をカスタマイズしている人なら、現在の設定値の確認などにも使えるかも?

ソースコード

// #title="Mery.ini のオプション値を取得"

/**
 * 組み込み関数 GetIniOption( array )
 * 引数で指定した任意の INI オプション項目の値を返す
 *
 * ※ 引数は INI オプション項目名を列挙した配列 [ "HogeHoge", "FugaFuga", "PiyoPiyo" ] を指定すること。
 * → 戻り値も INI オプション項目の値を並べた配列。(核要素は数値または文字列)
 *
 */
// ---------- 組み込み関数 ▼ ココから ▼ ----------

function GetIniOption( array ) {
  // var start = new Date();
  var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
  
  // Mery.ini を探す
  var iniPath = editor.FullName.replace( /\.exe$/i , ".ini" );
  if ( ! Fso.FileExists( iniPath ) ) {
    var WshShell = new ActiveXObject( "WScript.Shell" );
    iniPath = WshShell.ExpandEnvironmentStrings( "%APPDATA%\\Mery\\Mery.ini" );
  }
  // Mery.ini を読み込む
  var iniFile = Fso.OpenTextFile( iniPath, 1 );
  var iniText = iniFile.ReadAll();
  
  // 引数の配列をループ処理してオプションの値を取得する
  for ( var i = 0, dist = []; i < array.length; i ++ ) {
    var value = iniText.match( new RegExp( "^" + array[i] + "=.*$" , "igm" ) )
                       .shift()
                       .replace( /^.*?=(.*)/ , "$1" )
                       .replace( /[\r\n]*/g , "" );
    if ( value.match( /^[\-0-9]+$/ ) ) {
      value = Number( value )
    }
    dist.push( value );
  }
  
  iniFile.Close();
  // Status = ( ( new Date() - start ) /1000 ) +"秒";
  return dist;
}

// ---------- 組み込み関数 ▲ ココまで ▲ ----------

使い方

/**
 * 【使い方】
 *
 * GetIniOptions() 関数の使用は1回で済ませないと
 * その都度 INI ファイルの読み込みが発生し処理速度が落ちるので
 * 取得したい項目すべてをひとつの配列にまとめること
 *
 * ※ INI のオプション項目名の記述を間違えるとエラーになる
 */

// ① 取得したい INI オプション項目を ["配列"] に列挙する
var iniItem = [ "LineColumnView", "WrapMode", "QuoteCharacter", "TabColumns", "AutoIndent" ];

// または
var iniItem = new Array( "LineColumnView", "WrapMode", "QuoteCharacter", "TabColumns", "AutoIndent" );


// ② GetIniOption() 関数の引数に配列を指定する (※返り値も配列)
var iniValue = GetIniOption( iniItem );


// ③-1. (例)取得したオプションをダイアログで順々に表示する
for ( var i = 0; i < iniItem.length; i ++ ) {
  Alert( iniItem[i] + " = " + iniValue[i] );
}


// ③-2. (例)個々の値は戻り値の配列のインデックス番号で要素を指定する
var settings = {
  lineColumnView: iniValue[0],
  wrapMode: iniValue[1],
  quoteCharacter: iniValue[2],
  tabColumns: iniValue[3],
  autoIndent: iniValue[4]
};

Alert( "行の表示方法: " + 
  ( settings.lineColumnView == 1 ? "表示行" : "論理行" )
);


// ③-3. (注)取得したいオプション項目がひとつだけの場合も、["配列"] のかたちで記述すること
Alert( GetIniOption( ["LineColumnView"] ) );

メモ

  • 2019/03/10 sukemaru
将来的に、INI を最新の状態に強制更新したり INI の設定項目を取得できる専用メソッドが実装されるかもしれませんし、現状でも includeライブラリ(MeryInfo.js)でもある程度 INI へのアクセスはできますが…。
(また、includeライブラリ(IO.js)の使用のみでエディタの表示状態を変更するマクロの例として「折り返しトグル切り替え」などもあります。)
※ INI アクセスの専用メソッドについてはフォーラム内の「マクロコマンドから「表示」の「色の反転」を取得したい」のトピック内で検討・議論されていますので、ご参考まで。
スポンサーリンク