すべて閉じる
いっぺんに複数のタブを閉じます。
- 途中で「保存の確認」ダイアログを表示するタイプと表示しないタイプがあります。
※「保存の確認」ダイアログで「キャンセル」ボタンを押した場合、そのタブは閉じず、他のタブにたいしては「すべて閉じる」の処理を継続します。
ダウンロード編集
(最終更新: 2019/05/03)
マクロ×8本、アイコン入り
- 2019/04/25② sukemaru
- 統合版 を追加。
- アイコンのデザインをちょっと変更。
- 2019/05/03 sukemaru
- 途中で「保存の確認」ダイアログが出て「キャンセル」した場合に、元のタブをアクティブにするように変更。
- アイコンのデザインをもうちょっと変更。
- include版 を追加。
すべて閉じる編集
ウインドウを閉じるさいに、保存していないタブにたいして「 **** への変更を保存しますか?」の確認ダイアログを表示させずに終了できます。
※基本的に、「未保存*」の名前つきタブがあるときは、保存の確認ダイアログを表示します。
- 「未保存*」以外のタブ(変更マーク「*」がないタブ)をすべて閉じるなら、別ページに「変更なしのタブをすべて閉じる」マクロがあります。
- 「無題」をふくめたすべての「未保存*」のタブについて保存処理や確認ダイアログが必要であれば、ファイルメニューの「すべて保存して閉じる」や「すべて閉じる」を使用してください。
ファイルメニューの「すべて閉じる (Shift+Alt+X)」の マクロコード
// すべてのエディタウインドウを閉じる
editor.ExecuteCommandByID( MEID_FILE_CLOSE_ALL = 2097 );
// アクティブウインドウだけ閉じるなら
// window.Close();
ファイルメニューの「すべて保存して閉じる (Shift+Ctrl+E)」の マクロコード
// すべてのエディタウインドウを閉じる(未保存のタブは保存する)
editor.SaveCloseAll();
保存の確認をせずに閉じる編集
すべての「未保存*」タブについて、いっさい保存の確認をせずに閉じます。
※問答無用でエディタウインドウが閉じるので、ご利用は自己責任で。
#title = "すべて閉じる(保存の確認なし)"
#tooltip = "未保存のタブがあっても保存の確認をせずに終了する"
#icon = "close_all[2].ico"
for ( var i = 0; i < editor.Documents.Count; i ++ ) {
editor.Documents.Item( i ).Saved = true;
}
window.Close();
保存の確認ダイログを出す編集
名前のある(実体ファイルのある)「未保存*」のタブにたいしては、保存の確認ダイログを表示します。
※「無題」のタブにたいしては、保存の確認をしません。
#title = "すべて閉じる(無題は保存の確認しない)"
#tooltip = "無題のタブは保存の確認をせずに終了する"
#icon = "close_all[1].ico"
for ( var i = 0; i < editor.Documents.Count; i ++ ) {
if ( ! editor.Documents.Item( i ).Name ) {
editor.Documents.Item( i ).Saved = true;
}
}
window.Close();
他のタブを閉じる編集
アクティブなタブ以外を閉じます。
※「無題」のタブでも名前つきのタブでも、「未保存*」のタブについては保存の確認ダイアログを表示します。
左側のタブを閉じる編集
#title = "左側のタブをすべて閉じる"
#tooltip = "左側のタブをすべて閉じる"
#icon = "close_left.ico"
var d = document;
var dCount = editor.Documents.Count;
var docu, hit;
for ( var i = dCount - 1; i >= 0; i -- ) {
docu = editor.Documents.Item( i );
if ( docu == d ) { hit = 1; continue; }
if ( ! hit ) { continue; }
docu.Close();
}
d.Activate();
右側のタブをすべて閉じる編集
#title = "右側のタブをすべて閉じる"
#tooltip = "右側のタブをすべて閉じる"
#icon = "close_right.ico"
var d = document;
var dCount = editor.Documents.Count;
for ( var i = dCount - 1; editor.Documents.Item( i ) != d; i -- ) {
editor.Documents.Item( i ).Close();
}
d.Activate();
他のタブをすべて閉じる編集
#title = "他のタブをすべて閉じる"
#tooltip = "他のタブをすべて閉じる"
#icon = "close_other.ico"
var d = document;
var dCount = editor.Documents.Count;
var docu;
for ( var i = dCount - 1; i >= 0; i -- ) {
docu = editor.Documents.Item( i );
if ( docu != d ) {
docu.Close();
}
}
d.Activate();
他のタブをすべて閉じる(オプションつき)編集
※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定できます。
※設定項目で動作モードを 1 や 2 に変更して別名の .JS ファイルに保存すれば、「右側/左側のタブをすべて閉じる」マクロになります。
#title = "他のタブをすべて閉じる"
#tooltip = "他のタブをすべて閉じる"
#icon = "close_other.ico"
// ---------- ▼ 設定項目 ▼ ----------
var closeMode = 0;
// 0: 他のタブをすべて閉じる
// 1: 右側のタブをすべて閉じる
// 2: 左側のタブをすべて閉じる
var ignoreUnNamed = false;
// true: 「無題」ドキュメントにたいしては保存の確認ダイアログを表示しない
// false: 「無題」ドキュメントにたいしても保存の確認ダイアログを表示する
// ---------- ▲ 設定項目 ▲ ----------
var d = document;
var dCount = editor.Documents.Count;
var dd, docu;
for ( var i = 0; i < dCount; i ++ ) {
docu = editor.Documents.Item( i );
if ( docu == d ) {
dd = i;
break;
}
}
// 他のタブをすべて閉じる
var start = ( closeMode == 2 ) ? dd - 1 : dCount - 1;
var end = ( closeMode == 1 ) ? dd + 1 : 0;
for ( var i = start; i + 1 > end; i -- ) {
docu = editor.Documents.Item( i );
if ( docu != d ) {
if ( ignoreUnNamed && docu.Name == "" ) {
docu.Saved = true;
}
docu.Close();
}
}
d.Activate();
「すべて閉じる」の統合版(モード選択)編集
「すべて閉じる」と「他のタブを閉じる」の機能 全部入り です。
※入力ダイアログかポップアップメニューで動作モードを指定します(ソースコード内の設定項目で「デフォルト値」を指定しておくと Enter または Space キーだけで処理を開始できます)。
#title = "すべて閉じる(モード選択)"
#tooltip = "すべて閉じる(入力ダイアログ)"
#icon = "close_all[4].ico"
// または #tooltip = "すべて閉じる(ポップアップメニュー)"
// ---------- ▼ 設定項目 ▼ ----------
// ■起動モード
var userModeInput = true;
// true: 入力ダイアログ
// false: ポップアップメニュー
// ■デフォルト値( 1 ~ 6 )
var defaultMode = "";
// デフォルト: 入力ダイアログでは Enter キーで確定
// ポップアップメニューでは Space キーで確定
// "": 表示しない
// 1: 他のタブをすべて閉じる
// 2: 左側のタブをすべて閉じる
// 3: 右側のタブをすべて閉じる
// 4: 変更なしのタブをすべて閉じる(「未保存*」のタブは閉じない)
// 5: すべてのタブを閉じる
// 6: 問答無用ですべて閉じる(すべてのタブの「未保存*」を無視)
// ※ 4 ですべてのタブが保存済み、かつタブの閉じるボタンを表示している場合は、
// さいごに新規「無題」タブが残る(閉じるボタン無しならウインドウが閉じる)
// ※ 4, 6 以外は、「未保存*」の名前つきドキュメントで保存の確認ダイアログ
// ※ 5, 6 で閉じた場合、「ワークスペース」の復元可(Mery ver. 2.6.15 以降)
// ■未保存* の「無題」ドキュメント
var ignoreUnNamed = false;
// true: 保存の確認ダイアログを表示しない
// false: 保存の確認ダイアログを表示する
// ※ mode = 6 では無効(表示しない)
// ---------- ▲ 設定項目 ▲ ----------
var mode;
// 入力ダイアログ
if ( userModeInput ) {
// (全角 0-9 のみ)半角変換した数字を文字列で返す
var ToHalfWidthNum = function( strVal ){
return strVal.replace( /[0-9]/g, function( tmp ) {
return String.fromCharCode( tmp.charCodeAt(0) - 0xFEE0 )
} ) };
// 1 ~ 6 以外の無効な文字列はすべて無視
mode = + ToHalfWidthNum( Prompt( "1: 他のタブ. 2: 左側. 3: 右側. 4: 変更なし. 5: すべて. 6: 強制終了.", defaultMode ) ).replace( /[^1-6]/g , "" );
}
// ポップアップメニュー
else {
var menu = CreatePopupMenu();
menu.Add( "&1:\t他のタブをすべて閉じる", 1 );
menu.Add( "&2:\t左側のタブをすべて閉じる", 2 );
menu.Add( "&3:\t右側のタブをすべて閉じる", 3 );
menu.Add( "&4:\t変更なしのタブをすべて閉じる", 4 );
menu.Add( "&5:\tすべてのタブを閉じる", 5 );
menu.Add( "&6:\t未保存* を無視してすべて閉じる", 6 );
if ( /^[0-6]$/.test( defaultMode.toString() ) ) {
menu.Add( "", 0, meMenuSeparator );
menu.Add( defaultMode + ":\tデフォルトモードを実行 ( Space& キー )", + defaultMode );
}
menu.Add( "", 0, meMenuSeparator );
menu.Add( "&0:\tキャンセル", 0 );
mode = menu.Track( mePosMouse );
}
var d = document;
var dCount = editor.Documents.Count;
var dd, docu;
switch ( mode ) {
// 他のタブをすべて閉じる
case 1: case 2: case 3:
loop:
for ( var i = 0; i < dCount; i ++ ) {
docu = editor.Documents.Item( i );
if ( docu == d ) {
dd = i;
break loop;
}
}
var start = ( mode == 2 ) ? dd - 1 : dCount - 1;
var end = ( mode == 3 ) ? dd + 1 : 0;
for ( var i = start; i + 1 > end; i -- ) {
docu = editor.Documents.Item( i );
if ( docu != d ) {
if ( ignoreUnNamed && ! docu.Name ) {
docu.Saved = true;
}
docu.Close();
}
}
d.Activate();
break;
// すべて閉じる
case 4: case 5: case 6:
for ( var i = dCount- 1; i + 1 > 0; i -- ) {
docu = editor.Documents.Item( i );
if ( mode == 4 && docu.Saved ) {
docu.Close();
}
else if ( mode == 6
|| ( mode == 5 && ignoreUnNamed && ! docu.Name ) ) {
docu.Saved = true;
}
}
if ( mode != 4 ) {
window.Close();
}
break;
default:
break;
}
「すべて閉じる」の統合版(include版)編集
macros フォルダに includeライブラリ を導入しているばあいは、「統合版」の設定をポップアップメニュー内のサブメニューからから変更できるという …ただそれだけです(一応メニュー項目を少し増やしてます)。
興味のある方は、ZIP書庫 内の「include版」フォルダの JS ファイルをご利用ください。
※ ソースコード4行目「#include "include/IO.js"」をコメントアウトすると、ふつうの「統合版」としても使用できます。
#title = "すべて閉じる(モード選択)"
#tooltip = "すべて閉じる(ポップアップメニュー)"
#icon = "close_all[4].ico"
#include "include/IO.js"
// または #tooltip = "すべて閉じる(入力ダイアログ)"
// ---------- ▼ 設定項目 ▼ ----------
// ■ 起動モード
var userModeInput = false;
// true: 入力ダイアログ
// false: ポップアップメニュー
// ■ デフォルト値( 1 ~ 6 )
var defaultMode = "";
// デフォルト: 入力ダイアログでは Enter キーで確定
// ポップアップメニューでは Space キーで確定
// "": 表示しない
// 1: 他のタブをすべて閉じる
// 2: 左側のタブをすべて閉じる
// 3: 右側のタブをすべて閉じる
// 4: 変更なしのタブをすべて閉じる(「未保存*」のタブは閉じない)
// 5: すべてのタブを閉じる
// 6: 問答無用ですべて閉じる(すべてのタブの「未保存*」を無視)
// ▼ ポップアップメニュー専用(※「無題」タブの「未保存*」確認あり) ▼
// 7: すべて閉じる (※同一ウインドウ内の全タブ)
// 8: すべて閉じる (※ファイルメニューのコマンド)
// 9: すべて保存して閉じる (※ファイルメニューのコマンド)
// ※ 4 ですべてのタブが保存済み、かつタブの閉じるボタンを表示している場合は、
// さいごに新規「無題」タブが残る(閉じるボタン無しならウインドウが閉じる)
// ※ 4, 6 以外は、「未保存*」の名前つきドキュメントで保存の確認ダイアログ
// ※ 1 ~ 7 で閉じるのは同一ウインドウ内のタブのみ
// ※ 8, 9 は、すべてのエディタウインドウの全タブ
// ※ 5 ~ 9 で閉じた場合、「ワークスペース」の復元可(Mery ver. 2.6.15 以降)
// ■未保存* の「無題」ドキュメント
var ignoreUnNamed = false;
// true: 保存の確認ダイアログを表示しない
// false: 保存の確認ダイアログを表示する
// ※ mode = 6 ~ 8 では ignoreUnNamed オプション無効
// ---------- ▼ 【include版】 初期設定項目 ▼ ----------
// ソースコードの4行目 #include "include/IO.js" が有効で
// 起動モードがポップアップメニューの場合のみ使用可
// ◆ 「設定変更」サブメニューを表示するか?
var settingEnable = true;
// ◆ JSON ファイルのベース名
var jsonName = ScriptName.replace( /\.js$/i, "" );
// ---------- ▲ 設定項目 ▲ ----------
/* ▼ 【include版】の追加コード ▼ */
var setting;
var initialSettings = { settingEnable: false };
if ( typeof IO == "object" && settingEnable ) {
initialSettings = {
settingEnable: settingEnable,
userModeInput: userModeInput,
defaultMode: defaultMode,
ignoreUnNamed: ignoreUnNamed
}
setting = initialSettings;
jsonName = jsonName || ScriptName.replace( /\.js$/i, "" );
setting = IO.Deserialize( setting, jsonName );
settingEnable = setting.settingEnable;
// userModeInput = setting.userModeInput;
defaultMode = setting.defaultMode;
ignoreUnNamed = setting.ignoreUnNamed;
}
var mode;
// 入力ダイアログ
if ( userModeInput ) {
// 半角変換した ascii 文字列を返す
var ToHalfWidth = function( strVal ){
return strVal.replace( /[!-~]/g, function( tmp ) {
return String.fromCharCode( tmp.charCodeAt(0) - 0xFEE0 )
} ) };
// 1 ~ 6 以外の無効な文字列はすべて無視
var label = "1: 他のタブ. 2: 左側. 3: 右側. 4: 変更なし. 5: すべて. 6: 強制終了.";
var string = defaultMode > 6 ? "" : defaultMode;
mode = ToHalfWidth( Prompt( label, string ) ).toLowerCase();
/* 【include版】の追加コード */
// ※ include 版で "js" か "open" と入力した場合は、JS ファイルを開く
// または "menu" か "setting" と入力した場合は、ポップアップメニューを開く
mode = ( typeof IO == "object" && initialSettings.settingEnable )
? ( mode == "js" || mode == "open" )
? 1014
: ( mode == "menu" || mode == "setting" )
? "menu"
: + mode.replace( /[^1-6]/g , "" )
: + mode.replace( /[^1-6]/g , "" );
}
// ポップアップメニュー
if ( ! userModeInput || mode == "menu" ) {
var menu = CreatePopupMenu();
/* 【include版】の設定変更サブメニュー */
if ( initialSettings.settingEnable ) {
SettingsMenu( menu );
}
menu.Add( "&0:\tキャンセル", 0 );
menu.Add( "", 10, meMenuSeparator );
menu.Add( "&1:\t他のタブをすべて閉じる", 1 );
menu.Add( "&2:\t左側のタブをすべて閉じる", 2 );
menu.Add( "&3:\t右側のタブをすべて閉じる", 3 );
menu.Add( "&4:\t変更なしのタブをすべて閉じる", 4 );
menu.Add( "&5:\tすべてのタブを閉じる", 5 );
menu.Add( "&6:\t未保存* の確認なしですべて閉じる", 6 );
menu.Add( "", 10, meMenuSeparator );
menu.Add( "&7:\tすべて閉じる (同一ウインドウ)", 7 );
menu.Add( "&8:\tすべて閉じる (全ウインドウ)", 8 );
menu.Add( "&9:\tすべて保存して閉じる (全ウインドウ)", 9 );
if ( /^[0-9]$/.test( defaultMode.toString() ) ) {
menu.Add( "", 10, meMenuSeparator );
// デフォルトモードのラベルで表示するなら(※「キャンセル」を先頭にピンすること)
menu.Add( menu.GetText( defaultMode ).replace( "&", "" ) + " ( Space& キー )", + defaultMode );
// // 「デフォルトモードを実行」で表示するなら
// menu.Add( defaultMode + ":\tデフォルトモードを実行 ( Space& キー )", + defaultMode );
}
mode = menu.Track( mePosMouse );
}
/* 【include版】の設定変更サブメニュー項目を選択した場合 */
// include 版の設定変更
if ( typeof IO == "object" && mode >= 1000 ) {
SettingsChange( mode );
}
else {
var d = document;
var dCount = editor.Documents.Count;
var dd, docu;
switch ( mode ) {
// 他のタブをすべて閉じる
case 1: case 2: case 3:
loop:
for ( var i = 0; i < dCount; i ++ ) {
docu = editor.Documents.Item( i );
if ( docu == d ) {
dd = i;
break loop;
}
}
var start = ( mode == 2 ) ? dd - 1 : dCount - 1;
var end = ( mode == 3 ) ? dd + 1 : 0;
for ( var i = start; i + 1 > end; i -- ) {
docu = editor.Documents.Item( i );
if ( docu != d ) {
if ( ignoreUnNamed && ! docu.Name ) {
docu.Saved = true;
}
docu.Close();
}
}
break;
// すべて閉じる
case 4: case 5: case 6:
for ( var i = dCount- 1; i + 1 > 0; i -- ) {
docu = editor.Documents.Item( i );
if ( mode == 4 && docu.Saved ) {
docu.Close();
}
else if ( mode == 6
|| ( mode == 5 && ignoreUnNamed && ! docu.Name ) ) {
docu.Saved = true;
}
}
if ( mode != 4 ) {
window.Close();
}
break;
// すべて閉じる(同一ウインドウ内の全タブ)
case 7:
window.Close();
break;
// すべて閉じる(ファイルメニューのコマンド、すべてのエディタウインドウ)
case 8:
editor.ExecuteCommandByID( MEID_FILE_CLOSE_ALL = 2097 );
break;
// すべて保存して閉じる(ファイルメニューのコマンド、すべてのエディタウインドウ)
case 9:
editor.SaveCloseAll();
break;
default:
break;
}
if ( document == d ) {
d.Activate();
}
}
/* ▼ 【include版】の追加コード ▼ */
/**
* 関数 SettingsMenu( objPopupMenu )
* ポップアップメニューに「設定変更」サブメニューを表示する
* 引数: メインコードのポップアップメニューオブジェクト
*/
function SettingsMenu( objMenu ) {
var subMenu = CreatePopupMenu();
// メニューのオプションフラグ
// ※定数 meMenuChecked の値は 1 なので xxxEnable *1 で代用できる
var Check = function( num ) {
return + ( defaultMode.toString() == num.toString() );
}
var grayFlag = settingEnable ? 0 : meMenuGrayed;
// 「設定変更」サブメニューのアイテム
objMenu.AddPopup( "\t設定を変更する (&S)", subMenu );
objMenu.Add( "", 100, meMenuSeparator );
subMenu.Add( "\t未保存* タブの保存を確認する (&C)", 1012, !ignoreUnNamed*1 + grayFlag );
subMenu.Add( "", 100, meMenuSeparator );
subMenu.Add( "\t▼ デフォルトモードを変更する ▼", 10 , meMenuGrayed );
subMenu.Add( "&0:\tキャンセル", 1000, Check( 0 ) + grayFlag );
subMenu.Add( "&1:\t他のタブをすべて閉じる", 1001, Check( 1 ) + grayFlag );
subMenu.Add( "&2:\t左側のタブをすべて閉じる", 1002, Check( 2 ) + grayFlag );
subMenu.Add( "&3:\t右側のタブをすべて閉じる", 1003, Check( 3 ) + grayFlag );
subMenu.Add( "&4:\t変更なしのタブをすべて閉じる", 1004, Check( 4 ) + grayFlag );
subMenu.Add( "&5:\tすべてのタブを閉じる", 1005, Check( 5 ) + grayFlag );
subMenu.Add( "&6:\t未保存* の確認なしですべて閉じる", 1006, Check( 6 ) + grayFlag );
subMenu.Add( "&7:\tすべて閉じる (同一ウインドウ)", 1007, Check( 7 ) + grayFlag );
subMenu.Add( "&8:\tすべて閉じる (全ウインドウ)", 1008, Check( 8 ) + grayFlag );
subMenu.Add( "&9:\tすべて保存して閉じる (全ウインドウ", 1009, Check( 9 ) + grayFlag );
subMenu.Add( "&10:\t(なし)", 1010, Check( "" ) + grayFlag );
subMenu.Add( "\t▲ デフォルトモードを変更する ▲", 10, meMenuGrayed );
subMenu.Add( "", 10, meMenuSeparator );
subMenu.Add( "", 10, meMenuSeparator );
subMenu.Add( "\t設定内容をロックする (&S)", 1011, !settingEnable*1 );
subMenu.Add( ( userModeInput ? "\tポップアップメニュー" : "\t入力ダイアログ" )
+ "モードに変更する (&M)", 1013, grayFlag );
subMenu.Add( "", 10, meMenuSeparator );
subMenu.Add( "\t「閉じる」マクロの JS ファイルを開く (&O)", 1014 );
subMenu.Add( "\t「閉じる」マクロの JSON ファイルを開く (&J)", 1015 );
subMenu.Add( "", 10, meMenuSeparator );
subMenu.Add( "\t設定内容を初期化する (&I)", 1016, grayFlag );
subMenu.Add( "& \tキャンセル", 0 );
}
/**
* 関数 SettingsChange( num )
* ポップアップメニューで選択した項目の設定状態を変更する
*/
function SettingsChange( num ) {
// var setting = IO.Deserialize( setting, jsonName );
var jsonPath = JsonDir() + "\\" + jsonName + ".json";
var sIsChanged = true;
switch ( num ) {
case 1000: case 1001: case 1002: case 1003: case 1004:
case 1005: case 1006:
setting.defaultMode = num - 1000;
break;
case 1007: case 1008: case 1009:
if ( ! userModeInput ) {
setting.defaultMode = num - 1000;
}
break;
case 1010:
setting.defaultMode = "";
break;
case 1011:
setting.settingEnable = ! settingEnable;
break;
case 1012:
setting.ignoreUnNamed = ! ignoreUnNamed;
break;
case 1013:
sIsChanged = false;
Status = " " + ScriptName;
var modeChange = userModeInput ? "ポップアップメニュー"
: "入力ダイアログ";
var confirmStr = ScriptFullName + " \n\n"
+ modeChange
+ " モードへの変更は、ソースコード内で \n"
+ "userModeInput = " + ! userModeInput
+ "; に変更する必要があります。 \n\n"
+ "このマクロの .JS ファイルを開きますか? ";
if ( Confirm( confirmStr ) ) {
OpenJumpJS( "var userModeInput = " );
}
break;
case 1014:
sIsChanged = false;
Status = " " + ScriptFullName;
OpenJumpJS( "var settingEnable = " );
break;
case 1015:
sIsChanged = false;
Status = " " + jsonPath;
OpenJumpJson( jsonName );
break;
case 1016:
sIsChanged = false;
Status = " " + jsonPath;
CheckJsonFile( jsonName );
break;
default:
sIsChanged = false;
break;
}
if ( sIsChanged ) {
IO.Serialize( setting, jsonName );
Status = " 設定の変更を保存しました。";
}
}
/**
* 関数 OpenJumpJS( str )
* このマクロの JS ファイルを開いて設定項目の行にジャンプする
* 引数: 検索文字列(設定項目の行の文字列)
* ※引数がないときは文頭
*/
function OpenJumpJS( str ) {
Redraw = false;
var targetStr = str || "";
// Count は 1 からの整数値、Item は 0 からの整数値
var eCount = editors.Count;
var dCount, dItem, ee , dd;
var isOpen = false;
OuterLoop:
for ( var j = 0; j < eCount; j ++ ) {
dCount = editors.Item( j ).documents.Count;
for ( var i = 0; i < dCount; i ++ ) {
dItem = editors.Item( j ).documents.Item( i );
if ( dItem.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 );
}
var js = editors.Item( ee ).ActiveDocument;
var settingPos = js.Text.indexOf( targetStr );
js.selection.SetActivePos( settingPos + targetStr.length );
js.selection.WordRight( true ); // true/false を範囲選択
var vy = js.selection.GetActivePointY( mePosView );
ScrollY = vy;
// 狙った行にスクロールしないようなら、強引にやる
// var ly = js.selection.GetActivePointY( mePosLogical );
// var WshShell = new ActiveXObject( "WScript.Shell" );
// WshShell.Run( '"' + editor.FullName + '" /l ' + ly + ' "'
// + ScriptFullName + '"' );
// ScrollY = vy;
Redraw = true;
}
/**
* 関数 OpenJumpJson( jsonName )
* JSON ファイルを開く
*/
function OpenJumpJson( jsonName ) {
// var jsonName = jsonName || ScriptName.replace( /\.js$/i, "" );
IO.Serialize( setting, jsonName );
Sleep( 500 );
var jsonDir = JsonDir();
var jsonPath = jsonDir + "\\" + jsonName + ".json";
if ( IO.Path.IsExist( jsonPath )
&& JsonContents( jsonPath ).length ) {
var confirmStr = "設定ファイルは正常です \n\n"
+ JsonContents( jsonPath )
+ "設定ファイルを開きますか? ";
if ( Confirm( confirmStr ) ) {
var WshShell = new ActiveXObject( "WScript.Shell" );
WshShell.Run( '"' + editor.FullName
+ '" "' + jsonPath + '"' );
}
}
else {
Alert( "設定ファイルがありません \n"
+ jsonDir + " " );
}
}
/**
* 関数 CheckJsonFile( jsonName )
* JSON ファイルの初期化/実在確認
*/
function CheckJsonFile( jsonName ) {
// var jsonName = jsonName || ScriptName.replace( /\.js$/i, "" );
var jsonDir = JsonDir();
var jsonPath = jsonDir + "\\" + jsonName + ".json";
var confirmStr = jsonPath + " \n\n"
+ "設定ファイルを初期化しますか? "
if ( Confirm( confirmStr ) ) {
IO.Serialize( initialSettings, jsonName );
Sleep( 500 );
var alertStr = ( IO.Path.IsExist( jsonPath )
&& JsonContents( jsonPath ).length )
? "設定ファイルは正常です \n\n"
+ JsonContents( jsonPath )
: "設定ファイルがありません \n"
+ jsonDir + " ";
Alert( alertStr );
}
}
/**
* 関数 JsonDir()
* JSON ファイルの親フォルダのパス
*/
function JsonDir() {
var jsonDir;
if ( IO.Path.IsExist( editor.FullName.replace( /\.exe$/i, ".ini" ) ) ) {
jsonDir = editor.FullName.replace( /Mery\.exe$/i, "" )
+ "Macros\\MacroSettings";
}
else {
var WshShell = new ActiveXObject( "WScript.Shell" );
jsonDir = WshShell.ExpandEnvironmentStrings( "%APPDATA%" )
+ "\\Mery\\MacroSettings";
}
return jsonDir;
}
/**
* 関数 JsonContents( jsonPath [, bool] )
* JSON ファイルの文字列をメッセージボックス用に整形する
*
* 第1引数は JSON ファイルのパス
* 第2引数は真偽値(省略可)
* true なら \uHHHH をデコードする
*/
function JsonContents( jsonPath, bool ) {
var contents = ( jsonPath + " \n"
+ IO.LoadFromFile( jsonPath )
.replace( /^\{/, "\n{\n " )
.replace( /\}$/g, "\n}\n\n" )
.replace( /,/g, " ,\n " )
.replace( /\":/g, "\": " )
);
if ( bool ) {
// 「テキスト整形」マクロより >> 符号化/復号化 >> \uHHHH デコード
var Decode_uHHHH = function( str ) {
return str.replace( /\\u([0-9A-Fa-f]{4})/g, function( s, n ) {
return String.fromCharCode( Number( "0x" + n ) )
} )
};
return Decode_uHHHH( contents );
}
else {
// 半角アルファベットの小文字を全角にするなら
contents = contents.replace( /[a-z]/g,
function( $0 ) {
return String.fromCharCode( $0.charCodeAt( 0 ) + 0xFEE0 )
} )
return contents;
}
}
いつもポップアップメニューのマクロばかりなので、少しだけヒネってみました。