「ファイルを読み直す・開きなおす」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
第2版に更新。画像を追加
Sukemaru (トーク | 投稿記録)
Quit() メソッドを削除
25行目: 25行目:
'''ダウンロード''' >> 「[[ファイル:ファイルを読み直す・開きなおす.zip]]」(アイコン入り)
'''ダウンロード''' >> 「[[ファイル:ファイルを読み直す・開きなおす.zip]]」(アイコン入り)


2019/04/06: 「編集モードサブメニュー」を追加
2019/04/06: 「編集モードサブメニュー」を追加 <br>
2019/04/07: Quit() メソッドを削除




<source lang="javascript" style="height:100em; overflow:auto;">
<source lang="javascript" style="height:100em; overflow:auto;">
#title = "ファイルを読み直す・開きなおす"
#title = "ファイルを読み直す・開きなおす..."
#tooltip = "エンコード指定で読み直し/読み取り専用属性の変更"
#tooltip = "エンコード指定/読み取り専用属性/編集モードの変更"
#icon = "reload.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",262
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",262


36行目: 38行目:
  * ---------------------------------------------------------
  * ---------------------------------------------------------
  * ファイルを読み直す・開きなおす
  * ファイルを読み直す・開きなおす
  * sukemaru (2019/03/29 - 2019/04/06)
  * sukemaru (2019/03/29 - 2019/04/07)
  * ---------------------------------------------------------
  * ---------------------------------------------------------
* 標準ツールバーの「読み直し」アイコン(ファイルメニューの「読み直し」コマンド)
* のポップアップメニューを再現する。
* エンコードの選択肢のほかに以下の項目を追加した。
*
* ・「書き換え禁止」フラグの変更
* ・「読み取り専用属性」の変更(ファイルを開きなおす)
* ・ファイルを閉じて開きなおす
* ・「編集モードの設定」パネルを開く
* ・「編集モード」を変更する
*
* ※ 開きなおすと、拡張子ごとの既定の編集モードになる
* ※ 読み取り専用属性 ON を適用するときは、ファイルを保存して開きなおす
* ※ エンコード指定の読み直しには、ExecuteCommandByID() メソッドを使用する
*  (document.Encoding = xxx; よりも確実性が高い)
* ※「編集モード サブメニュー」は「編集モードの設定」どおりの並び順にはならない
*  (マクロから「編集モードの設定」にあるアイテムを取得する方法がないので、
*      追加/削除されたものに対応するには、マクロのソースコードの書き換えが必要
*    → 130行目 ~ 170行目 付近)
* ※ アクセラレータの重複でトグル移動してしまうときは、Enter キーで確定する
*
  */
  */


56行目: 78行目:
if ( ! document.FullName && ! viewModeMenuEnable ) {
if ( ! document.FullName && ! viewModeMenuEnable ) {
   Status = " 「無題」ドキュメントは読み直しできません。";
   Status = " 「無題」ドキュメントは読み直しできません。";
  Quit();
}
}
else {


// メニューに付けるチェックマークとグレーアウト設定
  // メニューに付けるチェックマークとグレーアウト設定
if ( document.FullName ) {
  if ( document.FullName ) {
  var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
    var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var f = Fso.GetFile( document.FullName );
    var f = Fso.GetFile( document.FullName );


  // 読み取り専用属性
    // 読み取り専用属性
  var attributeReadOnly = ( f.Attributes & 1 ? true : false )
    var attributeReadOnly = ( f.Attributes & 1 ? true : false )
  var aCheckFlags = attributeReadOnly ? meMenuChecked : 0;
    var aCheckFlags = attributeReadOnly ? meMenuChecked : 0;
  var aGrayFlags1 = attributeReadOnly ? meMenuGrayed : 0;
    var aGrayFlags1 = attributeReadOnly ? meMenuGrayed : 0;
  var aGrayFlags2 = attributeReadOnly ? 0 : meMenuGrayed;
    var aGrayFlags2 = attributeReadOnly ? 0 : meMenuGrayed;


  // 書き換え禁止フラグ
    // 書き換え禁止フラグ
  var rCheckFlags = document.ReadOnly ? meMenuChecked : 0;
    var rCheckFlags = document.ReadOnly ? meMenuChecked : 0;
  var rGrayFlags1 = document.ReadOnly ? meMenuGrayed : 0;
    var rGrayFlags1 = document.ReadOnly ? meMenuGrayed : 0;
  var rGrayFlags2 = document.ReadOnly ? 0 : meMenuGrayed;
    var rGrayFlags2 = document.ReadOnly ? 0 : meMenuGrayed;


  // エンコード
    // エンコード
  var dEnc = document.Encoding;
    var dEnc = document.Encoding;
  var utf8 = ( dEnc == meEncodingUTF8
    var utf8 = ( dEnc == meEncodingUTF8
            || dEnc == meEncodingUTF8BOM
              || dEnc == meEncodingUTF8BOM
            || dEnc == meEncodingUTF8NoBOM )
              || dEnc == meEncodingUTF8NoBOM )
    ? meMenuChecked : 0;
      ? meMenuChecked : 0;
  var utf16le = ( dEnc == meEncodingUTF16LE
    var utf16le = ( dEnc == meEncodingUTF16LE
              || dEnc == meEncodingUTF16LEBOM
                || dEnc == meEncodingUTF16LEBOM
              || dEnc == meEncodingUTF16LENoBOM )
                || dEnc == meEncodingUTF16LENoBOM )
    ? meMenuChecked : 0;
      ? meMenuChecked : 0;
  var utf16be = ( dEnc == meEncodingUTF16BE
    var utf16be = ( dEnc == meEncodingUTF16BE
              || dEnc == meEncodingUTF16BEBOM
                || dEnc == meEncodingUTF16BEBOM
              || dEnc == meEncodingUTF16BENoBOM )
                || dEnc == meEncodingUTF16BENoBOM )
    ? meMenuChecked : 0;
      ? meMenuChecked : 0;
  var EncCheck = function( arg1 ) {
    var EncCheck = function( arg1 ) {
    return document.Encoding == arg1 ? meMenuChecked : 0;
      return document.Encoding == arg1 ? meMenuChecked : 0;
  };
    };
}
  }


// 編集モード
  // 編集モード
var dMode = document.Mode;
  if ( viewModeMenuEnable ) {
var ModeCheck = function( arg1 ) {
    var dMode = document.Mode;
  return dMode == arg1 ? meMenuChecked : 0;
    var ModeCheck = function( arg1 ) {
};
      return dMode == arg1 ? meMenuChecked : 0;
    };
  }




// ポップアップメニュー項目
  // ポップアップメニュー項目
var m = CreatePopupMenu();
  var m = CreatePopupMenu();
var sm1 = CreatePopupMenu();
  var sm1 = CreatePopupMenu();
var sm2 = CreatePopupMenu();
  var sm2 = CreatePopupMenu();


if ( document.FullName ) { // 「無題」ドキュメントでは読み直しメニューを表示しない
  if ( document.FullName ) { // 「無題」ドキュメントでは読み直しメニューを表示しない
  m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
  m.Add( "書き換え禁止 ON/OFF (&Y)", 2, rCheckFlags + aGrayFlags1 );
    m.Add( "書き換え禁止 ON/OFF (&Y)", 2, rCheckFlags + aGrayFlags1 );
  m.Add( "読み取り専用属性 ON/OFF (&R)", 5, aCheckFlags );
    m.Add( "読み取り専用属性 ON/OFF (&R)", 5, aCheckFlags );
  m.Add( "閉じて開きなおす (&O)", 1 );
    m.Add( "閉じて開きなおす (&O)", 1 );


  if ( reloadMenuEnable ) {
    if ( reloadMenuEnable ) {
    m.Add( "", 0, meMenuSeparator );
      m.Add( "", 0, meMenuSeparator );
    m.AddPopup( "読みなおし サブメニュー (&L)", sm1 );
      m.AddPopup( "読みなおし サブメニュー (&L)", sm1 );
    {
      {
      sm1.Add( "  書き換え禁止にする (&Y)", 3, rGrayFlags1 || aGrayFlags1 );
        sm1.Add( "  書き換え禁止にする (&Y)", 3, rGrayFlags1 || aGrayFlags1 );
      sm1.Add( "  書き換え禁止を解除 (&W)", 4, rGrayFlags2 + aGrayFlags1 );
        sm1.Add( "  書き換え禁止を解除 (&W)", 4, rGrayFlags2 + aGrayFlags1 );
      sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "", 0, meMenuSeparator );
      sm1.Add( "  読み取り専用属性にして開きなおす (&R)", 6, aGrayFlags1 );
        sm1.Add( "  読み取り専用属性にして開きなおす (&R)", 6, aGrayFlags1 );
      sm1.Add( "  読み取り専用属性を解除して開きなおす (&O)", 7, aGrayFlags2 );
        sm1.Add( "  読み取り専用属性を解除して開きなおす (&O)", 7, aGrayFlags2 );
      sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "", 0, meMenuSeparator );
      sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "", 0, meMenuSeparator );
      sm1.Add( "「読み直し」マクロの JS ファイルを開く (&J)", 8 );
        sm1.Add( "「読み直し」マクロの JS ファイルを開く (&J)", 8 );
      }
     }
     }
   }
   }
}


if ( viewModeMenuEnable ) {
  if ( viewModeMenuEnable ) {
  m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
  m.AddPopup( "編集モード サブメニュー (&M)", sm2 );
    m.AddPopup( "編集モード サブメニュー (&M)", sm2 );
  {
    {
    sm2.Add( "現在の編集モードのプロパティ (&P)...", 100 );
      sm2.Add( "現在の編集モードのプロパティ (&P)...", 100 );
    sm2.Add( "", 0, meMenuSeparator );
      sm2.Add( "", 0, meMenuSeparator );


    /* 以下、追加/削除したものがあれば任意で変更すること。並べ替え可 */  
      /* 以下、追加/削除したものがあれば任意で変更すること。並べ替え可 */  
    // ▼ デフォルトの編集モード ▼
      // ▼ デフォルトの編集モード ▼
    sm2.Add( "&Bat", 101, ModeCheck( "Bat" ) );
      sm2.Add( "&Bat", 101, ModeCheck( "Bat" ) );
    sm2.Add( "C&#", 102, ModeCheck( "C#" ) );
      sm2.Add( "C&#", 102, ModeCheck( "C#" ) );
    sm2.Add( "C&++", 103, ModeCheck( "C++" ) );
      sm2.Add( "C&++", 103, ModeCheck( "C++" ) );
    sm2.Add( "ColdFusion", 104, ModeCheck( "ColdFusion" ) );
      sm2.Add( "ColdFusion", 104, ModeCheck( "ColdFusion" ) );
    sm2.Add( "&CSS", 105, ModeCheck( "CSS" ) );
      sm2.Add( "&CSS", 105, ModeCheck( "CSS" ) );
    sm2.Add( "&Delphi", 106, ModeCheck( "Delphi" ) );
      sm2.Add( "&Delphi", 106, ModeCheck( "Delphi" ) );
    sm2.Add( "HSP", 107, ModeCheck( "HSP" ) );
      sm2.Add( "HSP", 107, ModeCheck( "HSP" ) );
    sm2.Add( "&HTML", 108, ModeCheck( "HTML" ) );
      sm2.Add( "&HTML", 108, ModeCheck( "HTML" ) );
    sm2.Add( "&INI", 109, ModeCheck( "INI" ) );
      sm2.Add( "&INI", 109, ModeCheck( "INI" ) );
    sm2.Add( "J&ava", 110, ModeCheck( "Java" ) );
      sm2.Add( "J&ava", 110, ModeCheck( "Java" ) );
    sm2.Add( "&JavaScript", 111, ModeCheck( "JavaScript" ) );
      sm2.Add( "&JavaScript", 111, ModeCheck( "JavaScript" ) );
    sm2.Add( "JSP", 112, ModeCheck( "JSP" ) );
      sm2.Add( "JSP", 112, ModeCheck( "JSP" ) );
    sm2.Add( "Per&l", 113, ModeCheck( "Perl" ) );
      sm2.Add( "Per&l", 113, ModeCheck( "Perl" ) );
    sm2.Add( "P&erlScript", 114, ModeCheck( "PerlScript" ) );
      sm2.Add( "P&erlScript", 114, ModeCheck( "PerlScript" ) );
    sm2.Add( "&PHP", 115, ModeCheck( "PHP" ) );
      sm2.Add( "&PHP", 115, ModeCheck( "PHP" ) );
    sm2.Add( "P&owerShell", 116, ModeCheck( "PowerShell" ) );
      sm2.Add( "P&owerShell", 116, ModeCheck( "PowerShell" ) );
    sm2.Add( "P&ython", 117, ModeCheck( "Python" ) );
      sm2.Add( "P&ython", 117, ModeCheck( "Python" ) );
    sm2.Add( "RHT&ML", 118, ModeCheck( "RHTML" ) );
      sm2.Add( "RHT&ML", 118, ModeCheck( "RHTML" ) );
    sm2.Add( "&Ruby", 119, ModeCheck( "Ruby" ) );
      sm2.Add( "&Ruby", 119, ModeCheck( "Ruby" ) );
    sm2.Add( "S&QL", 120, ModeCheck( "SQL" ) );
      sm2.Add( "S&QL", 120, ModeCheck( "SQL" ) );
    sm2.Add( "TeX", 121, ModeCheck( "TeX" ) );
      sm2.Add( "TeX", 121, ModeCheck( "TeX" ) );
    sm2.Add( "&Text", 122, ModeCheck( "Text" ) );
      sm2.Add( "&Text", 122, ModeCheck( "Text" ) );
    sm2.Add( "&UWSC", 123, ModeCheck( "UWSC" ) );
      sm2.Add( "&UWSC", 123, ModeCheck( "UWSC" ) );
    sm2.Add( "VB&Script", 124, ModeCheck( "VBScript" ) );
      sm2.Add( "VB&Script", 124, ModeCheck( "VBScript" ) );
    sm2.Add( "&VisualBasic", 124, ModeCheck( "VisualBasic" ) );
      sm2.Add( "&VisualBasic", 124, ModeCheck( "VisualBasic" ) );
    sm2.Add( "&Widows Script", 125, ModeCheck( "Widows Script" ) );
      sm2.Add( "&Widows Script", 125, ModeCheck( "Widows Script" ) );
    sm2.Add( "x86 Assembler", 126, ModeCheck( "x86 Assembler" ) );
      sm2.Add( "x86 Assembler", 126, ModeCheck( "x86 Assembler" ) );
    sm2.Add( "&XML", 127, ModeCheck( "XML" ) );
      sm2.Add( "&XML", 127, ModeCheck( "XML" ) );
    // ▲ デフォルトの編集モード ▲
      // ▲ デフォルトの編集モード ▲
    sm2.Add( "", 0, meMenuSeparator );
      sm2.Add( "", 0, meMenuSeparator );


    /* ▼ ココに追加の編集モードを列挙する ▼ */
      /* ▼ ココに追加の編集モードを列挙する ▼ */
    // sm2.Add( "Hoge (&G)", 128 );
//       sm2.Add( "Hoge (&G)", 128 );
    // sm2.Add( "Fuga (&F)", 129 );
//       sm2.Add( "Fuga (&F)", 129 );
    // sm2.Add( "Piyo", 130 );
//       sm2.Add( "Piyo", 130 );
//
//      sm2.Add( "&Mery_Macro_JS", 131, ModeCheck( "Mery_Macro_JS" ) );
//      sm2.Add( "Mery MS&Y", 132, ModeCheck( "Mery MSY" ) );
//      sm2.Add( "&JaneStyle (正規表現用)", 134, ModeCheck( "JaneStyle (正規表現用)" ) );
      /* ▲ ココに追加の編集モードを列挙する ▲ */


    // sm2.Add( "&Mery_Macro_JS", 131, ModeCheck( "Mery_Macro_JS" ) );
      sm2.Add( "", 0, meMenuSeparator );
    // sm2.Add( "Mery MS&Y", 132, ModeCheck( "Mery MSY" ) );
      sm2.Add( "編集モードの設定 (&C)...", 200 );
    // sm2.Add( "&JaneStyle (正規表現用)", 134, ModeCheck( "JaneStyle (正規表現用)" ) );
    }
    /* ▲ ココに追加の編集モードを列挙する ▲ */
 
    sm2.Add( "", 0, meMenuSeparator );
    sm2.Add( "編集モードの設定 (&C)...", 200 );
   }
   }
}


if ( document.FullName ) { // 「無題」ドキュメントではエンコードメニューを表示しない
  if ( document.FullName ) { // 「無題」ドキュメントではエンコードメニューを表示しない
  // 2068 からの ID は ExecuteCommandByID() の定数
    // 2068 からの ID は ExecuteCommandByID() の定数
  m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
  m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
  m.Add( "自動選択 (&A)", 2068 );
    m.Add( "自動選択 (&A)", 2068 );
  m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
  m.Add( "UTF-1&6LE", 2069, utf16le );
    m.Add( "UTF-1&6LE", 2069, utf16le );
  m.Add( "UTF-16&BE", 2070, utf16be );
    m.Add( "UTF-16&BE", 2070, utf16be );
  m.Add( "UTF-&8", 2071, utf8 );
    m.Add( "UTF-&8", 2071, utf8 );
  m.Add( "UTF-&7", 2072, EncCheck( meEncodingUTF7 ) );
    m.Add( "UTF-&7", 2072, EncCheck( meEncodingUTF7 ) );
  m.Add( "", 0, meMenuSeparator );
  m.Add( "日本語 (シフト JI&S)", 2083, EncCheck( meEncodingShiftJIS ) );
 
  if ( variousLanguageEnable ) {
    m.Add( "日本語 (&JIS)", 2082, EncCheck( meEncodingJIS ) );
    m.Add( "日本語 (&EUC)", 2081, EncCheck( meEncodingEUC ) );
     m.Add( "", 0, meMenuSeparator );
     m.Add( "", 0, meMenuSeparator );
     m.Add( "西ヨーロッパ言語", 2088, EncCheck( meEncodingWesternEuropean ) );
     m.Add( "日本語 (シフト JI&S)", 2083, EncCheck( meEncodingShiftJIS ) );
    m.Add( "中央ヨーロッパ言語", 2075, EncCheck( meEncodingCentralEuropean ) );
    m.Add( "キリル言語", 2078, EncCheck( meEncodingCyrillic ) );
    m.Add( "バルト言語", 2074, EncCheck( meEncodingBaltic ) );
    m.Add( "ギリシャ語", 2079, EncCheck( meEncodingGreek ) );
    m.Add( "ヘブライ語", 2080, EncCheck( meEncodingHebrew ) );
    m.Add( "トルコ語", 2086, EncCheck( meEncodingTurkish ) );
    m.Add( "アラビア語", 2073, EncCheck( meEncodingArabic ) );
    m.Add( "タイ語", 2085, EncCheck( meEncodingThai ) );
    m.Add( "ベトナム語", 2087, EncCheck( meEncodingVietnamese ) );
    m.Add( "簡体中国語 (GB2312)", 2076, EncCheck( meEncodingChineseSimplified ) );
    m.Add( "繁体中国語 (Big5)", 2077, EncCheck( meEncodingChineseTraditional ) );
    m.Add( "韓国語", 2084, EncCheck( meEncodingKorean ) );
  }
}
m.Add( "", 0, meMenuSeparator );
m.Add( "キャンセル & ", 0 ); // Esc キーまたは Space キーでキャンセル可


 
    if ( variousLanguageEnable ) {
// ポップアップメニューを表示
      m.Add( "日本語 (&JIS)", 2082, EncCheck( meEncodingJIS ) );
var r = m.Track( mePosMouse = 1 );
      m.Add( "日本語 (&EUC)", 2081, EncCheck( meEncodingEUC ) );
 
      m.Add( "", 0, meMenuSeparator );
switch ( r ) {
      m.Add( "西ヨーロッパ言語", 2088, EncCheck( meEncodingWesternEuropean ) );
 
      m.Add( "中央ヨーロッパ言語", 2075, EncCheck( meEncodingCentralEuropean ) );
  case 0:
      m.Add( "キリル言語", 2078, EncCheck( meEncodingCyrillic ) );
    break;
      m.Add( "バルト言語", 2074, EncCheck( meEncodingBaltic ) );
 
      m.Add( "ギリシャ語", 2079, EncCheck( meEncodingGreek ) );
  case 1: // ファイルを閉じて開きなおす
      m.Add( "ヘブライ語", 2080, EncCheck( meEncodingHebrew ) );
    var file = document.FullName;
      m.Add( "トルコ語", 2086, EncCheck( meEncodingTurkish ) );
    document.Close();
      m.Add( "アラビア語", 2073, EncCheck( meEncodingArabic ) );
    if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
      m.Add( "タイ語", 2085, EncCheck( meEncodingThai ) );
       editor.NewFile();
      m.Add( "ベトナム語", 2087, EncCheck( meEncodingVietnamese ) );
      m.Add( "簡体中国語 (GB2312)", 2076, EncCheck( meEncodingChineseSimplified ) );
      m.Add( "繁体中国語 (Big5)", 2077, EncCheck( meEncodingChineseTraditional ) );
       m.Add( "韓国語", 2084, EncCheck( meEncodingKorean ) );
     }
     }
    editor.OpenFile( file );
  }
    break;
  m.Add( "", 0, meMenuSeparator );
  m.Add( "キャンセル & ", 0 ); // Esc キーまたは Space キーでキャンセル可


  case 2: // 書き換え禁止フラグ ON/OFF を変更する
    document.ReadOnly = ! document.ReadOnly;
    break;


   case 3: // 書き換え禁止にする
   // ポップアップメニューを表示
    document.ReadOnly = true;
  var r = m.Track( mePosMouse = 1 );
    break;


   case 4: // 書き換え禁止を解除
   switch ( r ) {
    document.ReadOnly = false;
    break;


  case 5: // 読み取り専用属性 ON/OFF を変更して開き直す
    case 0:
    // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
       break;
    var path = document.FullName;
    var file = Fso.GetFile( path );
    // ファイルの書込み禁止属性をチェック
    if ( file.Attributes % 2 == 0 ) {
      // 保存して閉じる
      // document.Save(); // コメントアウトすると確認ダイアログ
      document.Close();
      // 書込み禁止属性 → ON
       file.Attributes = file.Attributes + 1;
    }
    else {
      // 閉じる
      editor.ActiveDocument.Close();
      // 書込み禁止属性 → OFF
      file.Attributes = file.Attributes - 1;
    }
    // 開きなおす
    if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
      editor.NewFile();
    }
    editor.OpenFile( file );
    break;


  case 6: // 読み取り専用属性に変更して開き直す
    case 1: // ファイルを閉じて開きなおす
    // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var file = document.FullName;
    var path = document.FullName;
    var file = Fso.GetFile( path );
    if ( file.Attributes % 2 == 0 ) {
      // document.Save(); // コメントアウトすると確認ダイアログ
       document.Close();
       document.Close();
      file.Attributes = file.Attributes + 1;
       if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
       if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
         editor.NewFile();
         editor.NewFile();
       }
       }
       editor.OpenFile( file );
       editor.OpenFile( file );
     }
      break;
     break;
 
    case 2: // 書き換え禁止フラグ ON/OFF を変更する
      document.ReadOnly = ! document.ReadOnly;
      break;
 
     case 3: // 書き換え禁止にする
      document.ReadOnly = true;
      break;
 
     case 4: // 書き換え禁止を解除
      document.ReadOnly = false;
      break;


  case 7: // 読み取り専用属性を解除して開き直す
    case 5: // 読み取り専用属性 ON/OFF を変更して開き直す
    // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
    var path = document.FullName;
      var path = document.FullName;
    var file = Fso.GetFile( path );
      var file = Fso.GetFile( path );
    if ( file.Attributes % 2 != 0 ) {
      // ファイルの書込み禁止属性をチェック
      document.Close();
      if ( file.Attributes % 2 == 0 ) {
       file.Attributes = file.Attributes - 1;
        // 保存して閉じる
        // document.Save(); // コメントアウトすると確認ダイアログ
        document.Close();
        // 書込み禁止属性 → ON
        file.Attributes = file.Attributes + 1;
      }
       else {
        // 閉じる
        editor.ActiveDocument.Close();
        // 書込み禁止属性 → OFF
        file.Attributes = file.Attributes - 1;
      }
      // 開きなおす
       if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
       if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
         editor.NewFile();
         editor.NewFile();
       }
       }
       editor.OpenFile( file );
       editor.OpenFile( file );
     }
      break;
     break;
 
     case 6: // 読み取り専用属性に変更して開き直す
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var path = document.FullName;
      var file = Fso.GetFile( path );
      if ( file.Attributes % 2 == 0 ) {
        // document.Save(); // コメントアウトすると確認ダイアログ
        document.Close();
        file.Attributes = file.Attributes + 1;
        if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
          editor.NewFile();
        }
        editor.OpenFile( file );
      }
      break;
 
     case 7: // 読み取り専用属性を解除して開き直す
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var path = document.FullName;
      var file = Fso.GetFile( path );
      if ( file.Attributes % 2 != 0 ) {
        document.Close();
        file.Attributes = file.Attributes - 1;
        if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
          editor.NewFile();
        }
        editor.OpenFile( file );
      }
      break;


  case 8: // このマクロの JS ファイルを開く
    case 8: // このマクロの JS ファイルを開く
    OpenJumpJS();
      OpenJumpJS();
    break;
      break;


  case 100: // 現在の編集モードのプロパティ...
    case 100: // 現在の編集モードのプロパティ...
    new ActiveXObject( "WScript.Shell" ).SendKeys( "%P" );
      new ActiveXObject( "WScript.Shell" ).SendKeys( "%P" );
    editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
    break;
      break;


  case 200: // 編集モードの設定...
    case 200: // 編集モードの設定...
    editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
    break;
      break;


  default:
    default:
    if ( r > 2000 ) { // エンコード指定で読みなおす
      if ( r > 2000 ) { // エンコード指定で読みなおす
      editor.ExecuteCommandByID( r );
        editor.ExecuteCommandByID( r );
    }
      }
    else { // 編集モードを変更
      else { // 編集モードを変更
      var label = m.GetText( r ).replace( /[ ]*\(&.\)[ ]*|&/g , "" );
        var label = m.GetText( r ).replace( /[ ]*\(&.\)[ ]*|&/g , "" );
      document.Mode = label;
        document.Mode = label;
    }
      }
    break;
      break;


  }
}
}


365行目: 390行目:
   //            + ' "' + ScriptFullName + '"' );
   //            + ' "' + ScriptFullName + '"' );
}
}
</source>
</source>

2019年4月7日 (日) 12:58時点における版

標準ツールバーの「読み直し」アイコン(ファイル メニューの「読み直し」コマンド)のポップアップメニューを再現します。


エンコード指定の選択肢のほかに以下の機能を追加してあります。

  • Mery の "書き換え禁止" フラグ ON/OFF の変更
  • 読み取り専用属性 ON/OFF の変更(ファイルを開きなおす)
  • ファイルを閉じて開きなおす
  • 「編集モードの設定」パネルを開く
  • 「編集モード」を変更するサブメニュー



仕様上の制限
  • ファイルを「開きなおす」場合は、タブの並び順のさいごの位置に開きます。
    また、開きなおしたファイルは、拡張子ごとの既定の「編集モード」になります。
  • 「無題」ドキュメントは読み直しやエンコード指定ができないので、「編集モード サブメニュー」だけを表示します。
  • 「編集モード サブメニュー」は、「編集モードの設定」でカスタマイズした並び順にはなりません(※マクロから「編集モードの設定」にあるアイテムを取得する方法がないので、追加/削除されたものに対応するには、マクロのソースコードの書き換えが必要です。 → 130行目 ~ 170行目 付近)。
  • アクセラレータの重複でトグル移動してしまうときは、Enter キーで確定するか、ソースコード内でアクセラレータ( & 記号の位置や (&X) のアルファベット部分)を変更してください。


ダウンロード >> 「ファイル:ファイルを読み直す・開きなおす.zip」(アイコン入り)

2019/04/06: 「編集モードサブメニュー」を追加
2019/04/07: Quit() メソッドを削除


#title = "ファイルを読み直す・開きなおす..."
#tooltip = "エンコード指定/読み取り専用属性/編集モードの変更"
#icon = "reload.ico"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",262

/**
 * ---------------------------------------------------------
 * ファイルを読み直す・開きなおす
 * sukemaru (2019/03/29 - 2019/04/07)
 * ---------------------------------------------------------
 * 標準ツールバーの「読み直し」アイコン(ファイルメニューの「読み直し」コマンド)
 * のポップアップメニューを再現する。
 * エンコードの選択肢のほかに以下の項目を追加した。
 * 
 * ・「書き換え禁止」フラグの変更
 * ・「読み取り専用属性」の変更(ファイルを開きなおす)
 * ・ファイルを閉じて開きなおす
 * ・「編集モードの設定」パネルを開く
 * ・「編集モード」を変更する
 * 
 * ※ 開きなおすと、拡張子ごとの既定の編集モードになる
 * ※ 読み取り専用属性 ON を適用するときは、ファイルを保存して開きなおす
 * ※ エンコード指定の読み直しには、ExecuteCommandByID() メソッドを使用する
 *   (document.Encoding = xxx; よりも確実性が高い)
 * ※「編集モード サブメニュー」は「編集モードの設定」どおりの並び順にはならない
 *   (マクロから「編集モードの設定」にあるアイテムを取得する方法がないので、
 *      追加/削除されたものに対応するには、マクロのソースコードの書き換えが必要
 *    → 130行目 ~ 170行目 付近)
 * ※ アクセラレータの重複でトグル移動してしまうときは、Enter キーで確定する
 * 
 */

// ---------- ▼ 設定項目 ▼ ---------- //

// ■「読みなおし サブメニュー」を表示する
var reloadMenuEnable = true;

// ■「編集モード サブメニュー」を表示する
var viewModeMenuEnable = true;

// ■諸外国語用(UTF-** とシフトJIS 以外)の文字コードを表示する
var variousLanguageEnable = true;

// ---------- ▲ 設定項目 ▲ ---------- //


if ( ! document.FullName && ! viewModeMenuEnable ) {
  Status = " 「無題」ドキュメントは読み直しできません。";
}
else {

  // メニューに付けるチェックマークとグレーアウト設定
  if ( document.FullName ) {
    var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
    var f = Fso.GetFile( document.FullName );

    // 読み取り専用属性
    var attributeReadOnly = ( f.Attributes & 1 ? true : false )
    var aCheckFlags = attributeReadOnly ? meMenuChecked : 0;
    var aGrayFlags1 = attributeReadOnly ? meMenuGrayed : 0;
    var aGrayFlags2 = attributeReadOnly ? 0 : meMenuGrayed;

    // 書き換え禁止フラグ
    var rCheckFlags = document.ReadOnly ? meMenuChecked : 0;
    var rGrayFlags1 = document.ReadOnly ? meMenuGrayed : 0;
    var rGrayFlags2 = document.ReadOnly ? 0 : meMenuGrayed;

    // エンコード
    var dEnc = document.Encoding;
    var utf8 = ( dEnc == meEncodingUTF8
              || dEnc == meEncodingUTF8BOM
              || dEnc == meEncodingUTF8NoBOM )
      ? meMenuChecked : 0;
    var utf16le = ( dEnc == meEncodingUTF16LE
                 || dEnc == meEncodingUTF16LEBOM
                 || dEnc == meEncodingUTF16LENoBOM )
      ? meMenuChecked : 0;
    var utf16be = ( dEnc == meEncodingUTF16BE
                 || dEnc == meEncodingUTF16BEBOM
                 || dEnc == meEncodingUTF16BENoBOM )
      ? meMenuChecked : 0;
    var EncCheck = function( arg1 ) {
      return document.Encoding == arg1 ? meMenuChecked : 0;
    };
  }

  // 編集モード
  if ( viewModeMenuEnable ) {
    var dMode = document.Mode;
    var ModeCheck = function( arg1 ) {
      return dMode == arg1 ? meMenuChecked : 0;
    };
  }


  // ポップアップメニュー項目
  var m = CreatePopupMenu();
  var sm1 = CreatePopupMenu();
  var sm2 = CreatePopupMenu();

  if ( document.FullName ) {	// 「無題」ドキュメントでは読み直しメニューを表示しない
    m.Add( "", 0, meMenuSeparator );
    m.Add( "書き換え禁止 ON/OFF (&Y)", 2, rCheckFlags + aGrayFlags1 );
    m.Add( "読み取り専用属性 ON/OFF (&R)", 5, aCheckFlags );
    m.Add( "閉じて開きなおす (&O)", 1 );

    if ( reloadMenuEnable ) {
      m.Add( "", 0, meMenuSeparator );
      m.AddPopup( "読みなおし サブメニュー (&L)", sm1 );
      {
        sm1.Add( "  書き換え禁止にする (&Y)", 3, rGrayFlags1 || aGrayFlags1 );
        sm1.Add( "  書き換え禁止を解除 (&W)", 4, rGrayFlags2 + aGrayFlags1 );
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "  読み取り専用属性にして開きなおす (&R)", 6, aGrayFlags1 );
        sm1.Add( "  読み取り専用属性を解除して開きなおす (&O)", 7, aGrayFlags2 );
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "", 0, meMenuSeparator );
        sm1.Add( "「読み直し」マクロの JS ファイルを開く (&J)", 8 );
      }
    }
  }

  if ( viewModeMenuEnable ) {
    m.Add( "", 0, meMenuSeparator );
    m.AddPopup( "編集モード サブメニュー (&M)", sm2 );
    {
      sm2.Add( "現在の編集モードのプロパティ (&P)...", 100 );
      sm2.Add( "", 0, meMenuSeparator );

      /* 以下、追加/削除したものがあれば任意で変更すること。並べ替え可 */ 
      // ▼ デフォルトの編集モード ▼
      sm2.Add( "&Bat", 101, ModeCheck( "Bat" ) );
      sm2.Add( "C&#", 102, ModeCheck( "C#" ) );
      sm2.Add( "C&++", 103, ModeCheck( "C++" ) );
      sm2.Add( "ColdFusion", 104, ModeCheck( "ColdFusion" ) );
      sm2.Add( "&CSS", 105, ModeCheck( "CSS" ) );
      sm2.Add( "&Delphi", 106, ModeCheck( "Delphi" ) );
      sm2.Add( "HSP", 107, ModeCheck( "HSP" ) );
      sm2.Add( "&HTML", 108, ModeCheck( "HTML" ) );
      sm2.Add( "&INI", 109, ModeCheck( "INI" ) );
      sm2.Add( "J&ava", 110, ModeCheck( "Java" ) );
      sm2.Add( "&JavaScript", 111, ModeCheck( "JavaScript" ) );
      sm2.Add( "JSP", 112, ModeCheck( "JSP" ) );
      sm2.Add( "Per&l", 113, ModeCheck( "Perl" ) );
      sm2.Add( "P&erlScript", 114, ModeCheck( "PerlScript" ) );
      sm2.Add( "&PHP", 115, ModeCheck( "PHP" ) );
      sm2.Add( "P&owerShell", 116, ModeCheck( "PowerShell" ) );
      sm2.Add( "P&ython", 117, ModeCheck( "Python" ) );
      sm2.Add( "RHT&ML", 118, ModeCheck( "RHTML" ) );
      sm2.Add( "&Ruby", 119, ModeCheck( "Ruby" ) );
      sm2.Add( "S&QL", 120, ModeCheck( "SQL" ) );
      sm2.Add( "TeX", 121, ModeCheck( "TeX" ) );
      sm2.Add( "&Text", 122, ModeCheck( "Text" ) );
      sm2.Add( "&UWSC", 123, ModeCheck( "UWSC" ) );
      sm2.Add( "VB&Script", 124, ModeCheck( "VBScript" ) );
      sm2.Add( "&VisualBasic", 124, ModeCheck( "VisualBasic" ) );
      sm2.Add( "&Widows Script", 125, ModeCheck( "Widows Script" ) );
      sm2.Add( "x86 Assembler", 126, ModeCheck( "x86 Assembler" ) );
      sm2.Add( "&XML", 127, ModeCheck( "XML" ) );
      // ▲ デフォルトの編集モード ▲
      sm2.Add( "", 0, meMenuSeparator );

      /* ▼ ココに追加の編集モードを列挙する ▼ */
//       sm2.Add( "Hoge (&G)", 128 );
//       sm2.Add( "Fuga (&F)", 129 );
//       sm2.Add( "Piyo", 130 );
// 
//       sm2.Add( "&Mery_Macro_JS", 131, ModeCheck( "Mery_Macro_JS" ) );
//       sm2.Add( "Mery MS&Y", 132, ModeCheck( "Mery MSY" ) );
//       sm2.Add( "&JaneStyle (正規表現用)", 134, ModeCheck( "JaneStyle (正規表現用)" ) );
      /* ▲ ココに追加の編集モードを列挙する ▲ */

      sm2.Add( "", 0, meMenuSeparator );
      sm2.Add( "編集モードの設定 (&C)...", 200 );
    }
  }

  if ( document.FullName ) {	// 「無題」ドキュメントではエンコードメニューを表示しない
    // 2068 からの ID は ExecuteCommandByID() の定数
    m.Add( "", 0, meMenuSeparator );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "自動選択 (&A)", 2068 );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "UTF-1&6LE", 2069, utf16le );
    m.Add( "UTF-16&BE", 2070, utf16be );
    m.Add( "UTF-&8", 2071, utf8 );
    m.Add( "UTF-&7", 2072, EncCheck( meEncodingUTF7 ) );
    m.Add( "", 0, meMenuSeparator );
    m.Add( "日本語 (シフト JI&S)", 2083, EncCheck( meEncodingShiftJIS ) );

    if ( variousLanguageEnable ) {
      m.Add( "日本語 (&JIS)", 2082, EncCheck( meEncodingJIS ) );
      m.Add( "日本語 (&EUC)", 2081, EncCheck( meEncodingEUC ) );
      m.Add( "", 0, meMenuSeparator );
      m.Add( "西ヨーロッパ言語", 2088, EncCheck( meEncodingWesternEuropean ) );
      m.Add( "中央ヨーロッパ言語", 2075, EncCheck( meEncodingCentralEuropean ) );
      m.Add( "キリル言語", 2078, EncCheck( meEncodingCyrillic ) );
      m.Add( "バルト言語", 2074, EncCheck( meEncodingBaltic ) );
      m.Add( "ギリシャ語", 2079, EncCheck( meEncodingGreek ) );
      m.Add( "ヘブライ語", 2080, EncCheck( meEncodingHebrew ) );
      m.Add( "トルコ語", 2086, EncCheck( meEncodingTurkish ) );
      m.Add( "アラビア語", 2073, EncCheck( meEncodingArabic ) );
      m.Add( "タイ語", 2085, EncCheck( meEncodingThai ) );
      m.Add( "ベトナム語", 2087, EncCheck( meEncodingVietnamese ) );
      m.Add( "簡体中国語 (GB2312)", 2076, EncCheck( meEncodingChineseSimplified ) );
      m.Add( "繁体中国語 (Big5)", 2077, EncCheck( meEncodingChineseTraditional ) );
      m.Add( "韓国語", 2084, EncCheck( meEncodingKorean ) );
    }
  }
  m.Add( "", 0, meMenuSeparator );
  m.Add( "キャンセル & ", 0 );	// Esc キーまたは Space キーでキャンセル可


  // ポップアップメニューを表示
  var r = m.Track( mePosMouse = 1 );

  switch ( r ) {

    case 0:
      break;

    case 1:	// ファイルを閉じて開きなおす
      var file = document.FullName;
      document.Close();
      if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
        editor.NewFile();
      }
      editor.OpenFile( file );
      break;

    case 2:	// 書き換え禁止フラグ ON/OFF を変更する
      document.ReadOnly = ! document.ReadOnly;
      break;

    case 3:	// 書き換え禁止にする
      document.ReadOnly = true;
      break;

    case 4:	// 書き換え禁止を解除
      document.ReadOnly = false;
      break;

    case 5:	// 読み取り専用属性 ON/OFF を変更して開き直す
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var path = document.FullName;
      var file = Fso.GetFile( path );
      // ファイルの書込み禁止属性をチェック
      if ( file.Attributes % 2 == 0 ) {
        // 保存して閉じる
        // document.Save();	// コメントアウトすると確認ダイアログ
        document.Close();
        // 書込み禁止属性 → ON
        file.Attributes = file.Attributes + 1;
      }
      else {
        // 閉じる
        editor.ActiveDocument.Close();
        // 書込み禁止属性 → OFF
        file.Attributes = file.Attributes - 1;
      }
      // 開きなおす
      if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
        editor.NewFile();
      }
      editor.OpenFile( file );
      break;

    case 6:	// 読み取り専用属性に変更して開き直す
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var path = document.FullName;
      var file = Fso.GetFile( path );
      if ( file.Attributes % 2 == 0 ) {
        // document.Save();	// コメントアウトすると確認ダイアログ
        document.Close();
        file.Attributes = file.Attributes + 1;
        if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
          editor.NewFile();
        }
        editor.OpenFile( file );
      }
      break;

    case 7:	// 読み取り専用属性を解除して開き直す
      // var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
      var path = document.FullName;
      var file = Fso.GetFile( path );
      if ( file.Attributes % 2 != 0 ) {
        document.Close();
        file.Attributes = file.Attributes - 1;
        if ( editor.ActiveDocument.FullName || editor.ActiveDocument.Text ) {
          editor.NewFile();
        }
        editor.OpenFile( file );
      }
      break;

    case 8:	// このマクロの JS ファイルを開く
      OpenJumpJS();
      break;

    case 100:	// 現在の編集モードのプロパティ...
      new ActiveXObject( "WScript.Shell" ).SendKeys( "%P" );
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      break;

    case 200:	// 編集モードの設定...
      editor.ExecuteCommandByID( MEID_VIEW_MODE_CUSTOMIZE = 2144 );
      break;

    default:
      if ( r > 2000 ) {	// エンコード指定で読みなおす
        editor.ExecuteCommandByID( r );
      }
      else {	// 編集モードを変更
        var label = m.GetText( r ).replace( /[ ]*\(&.\)[ ]*|&/g , "" );
        document.Mode = label;
      }
      break;

  }
}


/* 関数 OpenJumpJS() */
// このマクロを開いて設定項目の行にジャンプする
function OpenJumpJS() {
  // Count は 1 からの整数値、Item は 0 からの整数値
  var eCount = editors.Count;
  var isOpen = false,  ee ,  dd;
  OuterLoop:
  for ( var j = 0; j < eCount; j ++ ) {
    var dCount = editors.Item( j ).documents.Count;
    for ( var i = 0; i < dCount; i ++ ) {
      if ( editors.Item( j ).documents.Item( i ).FullName == ScriptFullName ) {
        isOpen = true;
        ee = j;
        dd = i;
        break OuterLoop;
      }
    }
  }
  if ( isOpen ) {
    editors.Item( ee ).documents.Item( dd ).Activate();
  }
  else {
    editor.NewFile();
    ee = ( editors.Count == 1 ) ? 0 : eCount;
    editors.Item( ee ).OpenFile( ScriptFullName, 2071 );
  }
  var js = editors.Item( ee ).ActiveDocument;
  var settingPos = js.Text.indexOf( "▼ 設定項目 ▼" );
  js.selection.SetActivePos( settingPos );
  js.selection.StartOfLine( false, mePosLogical );
  var yy = js.selection.GetActivePointY( mePosLogical );
  ScrollY = yy;
  // 狙った行にスクロールしない場合は、強引にやる
  // var WshShell = new ActiveXObject( "WScript.Shell" );
  // WshShell.Run( '"' + editor.FullName + '" /l ' + yy
  //            + ' "' + ScriptFullName + '"' );
}
スポンサーリンク