「
すべて閉じる
」を編集中
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
いっぺんに複数のタブを閉じます。 *途中で「保存の確認」ダイアログを表示するタイプと表示しないタイプがあります。 ※「保存の確認」ダイアログで「キャンセル」ボタンを押した場合、そのタブは閉じず、他のタブにたいしては「すべて閉じる」の処理を継続します。 <div style="float:right">__TOC__</div> == ダウンロード == ;[[ファイル:すべて閉じるマクロ集.zip]] (最終更新: 2019/05/03)<br> マクロ×8本、アイコン入り *2019/04/25② sukemaru :[[#「すべて閉じる」の統合版(モード選択)|統合版]] を追加。 :アイコンのデザインをちょっと変更。 *2019/05/03 sukemaru :途中で「保存の確認」ダイアログが出て「キャンセル」した場合に、元のタブをアクティブにするように変更。 :アイコンのデザインをもうちょっと変更。 :[[#「すべて閉じる」の統合版(include版)|include版]] を追加。 == すべて閉じる == ウインドウを閉じるさいに、保存していないタブにたいして「 **** への変更を保存しますか?」の確認ダイアログを表示させずに終了できます。<br> ※基本的に、「未保存*」の名前つきタブがあるときは、保存の確認ダイアログを表示します。 *「未保存*」以外のタブ(変更マーク「*」がないタブ)をすべて閉じるなら、別ページに「[[変更なしのタブをすべて閉じる]]」マクロがあります。 *「無題」をふくめたすべての「未保存*」のタブについて保存処理や確認ダイアログが必要であれば、[[ヘルプ:ファイル#すべて保存して閉じる|ファイルメニュー]]の「すべて保存して閉じる」や「すべて閉じる」を使用してください。 ファイルメニューの「'''すべて閉じる''' (Shift+Alt+X)」の [[マクロリファレンス:Window インターフェイス#Close メソッド|マクロコード]] <syntaxhighlight lang="javascript"> // すべてのエディタウインドウを閉じる editor.ExecuteCommandByID( MEID_FILE_CLOSE_ALL = 2097 ); // アクティブウインドウだけ閉じるなら // window.Close(); </syntaxhighlight> ファイルメニューの「'''すべて保存して閉じる''' (Shift+Ctrl+E)」の [[マクロリファレンス:Editor インターフェイス#SaveCloseAll メソッド|マクロコード]] <syntaxhighlight lang="javascript"> // すべてのエディタウインドウを閉じる(未保存のタブは保存する) editor.SaveCloseAll(); </syntaxhighlight> === 保存の確認をせずに閉じる === すべての「未保存*」タブについて、いっさい保存の確認をせずに閉じます。 <br> ※<b style="color:#c00;">問答無用</b>でエディタウインドウが閉じるので、ご利用は自己責任で。 <syntaxhighlight lang="javascript"> #title = "すべて閉じる(保存の確認なし)" #tooltip = "未保存のタブがあっても保存の確認をせずに終了する" #icon = "close_all[2].ico" for ( var i = 0; i < editor.Documents.Count; i ++ ) { editor.Documents.Item( i ).Saved = true; } window.Close(); </syntaxhighlight> === 保存の確認ダイログを出す === 名前のある(実体ファイルのある)「未保存*」のタブにたいしては、保存の確認ダイログを表示します。<br> ※「無題」のタブにたいしては、保存の確認をしません。 <syntaxhighlight lang="javascript"> #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(); </syntaxhighlight> == 他のタブを閉じる == アクティブなタブ以外を閉じます。 ※「無題」のタブでも名前つきのタブでも、「未保存*」のタブについては保存の確認ダイアログを表示します。 === 左側のタブを閉じる === <syntaxhighlight lang="javascript"> #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(); </syntaxhighlight> === 右側のタブをすべて閉じる === <syntaxhighlight lang="javascript"> #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(); </syntaxhighlight> === 他のタブをすべて閉じる === <syntaxhighlight lang="javascript"> #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(); </syntaxhighlight> == 他のタブをすべて閉じる(オプションつき) == ※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定できます。<br> ※設定項目で動作モードを 1 や 2 に変更して別名の .JS ファイルに保存すれば、「右側/左側のタブをすべて閉じる」マクロになります。 <syntaxhighlight lang="javascript"> #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(); </syntaxhighlight> == 「すべて閉じる」の統合版(モード選択) == [[ファイル:Mery_すべて閉じる(入力).png|link=|border|right|入力ダイアログ]] [[ファイル:Mery_すべて閉じる(メニュー).png|link=|border|right|ポップアップメニュー]] 「すべて閉じる」と「他のタブを閉じる」の機能 '''全部入り''' です。<br><br> ※入力ダイアログかポップアップメニューで動作モードを指定します(ソースコード内の設定項目で「デフォルト値」を指定しておくと Enter または Space キーだけで処理を開始できます)。 <br clear=all> <syntaxhighlight lang="javascript" style="height:60em; overflow:auto;"> #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; } </syntaxhighlight> == 「すべて閉じる」の統合版(include版) == macros フォルダに [[includeライブラリ]] を導入しているばあいは、「[[#「すべて閉じる」の統合版(モード選択)|統合版]]」の設定をポップアップメニュー内のサブメニューからから変更できるという …ただそれだけです(一応メニュー項目を少し増やしてます)。<br> 興味のある方は、[[#ダウンロード|ZIP書庫]] 内の「include版」フォルダの JS ファイルをご利用ください。 ※ ソースコード4行目「#include "include/IO.js"」をコメントアウトすると、ふつうの「統合版」としても使用できます。 <syntaxhighlight lang="javascript" style="height:40em; overflow:auto;"> #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; } } </syntaxhighlight> いつもポップアップメニューのマクロばかりなので、少しだけヒネってみました。
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク