「すべて閉じる」の版間の差分
「統合版」を追加。ZIP を更新 |
|||
| 1行目: | 1行目: | ||
いっぺんに複数のタブを閉じます。 | いっぺんに複数のタブを閉じます。 | ||
* | *途中で「保存の確認」ダイアログを表示するタイプと表示しないタイプがあります。 | ||
※「保存の確認」ダイアログで「キャンセル」ボタンを押した場合、そのタブは閉じず、他のタブにたいしては「すべて閉じる」の処理を継続します。 | |||
< | <div style="float:right">__TOC__</div> | ||
= ダウンロード = | |||
[[ファイル:すべて閉じるマクロ集.zip]] | ;[[ファイル:すべて閉じるマクロ集.zip]] | ||
(sukemaru 2019/04/25②)<br> | |||
マクロ×7本、アイコン入り | |||
*[[#「すべて閉じる」の統合版(モード選択)|統合版]] を追加 | |||
*アイコンのデザインをちょっと変更 | |||
<br clear=all> | |||
= すべて閉じる = | |||
ウインドウを閉じるさいに、保存していないタブにたいして「 **** への変更を保存しますか?」の確認ダイアログを表示させずに終了できます。<br> | |||
※基本的に、「未保存*」の名前つきタブがあるときは、保存の確認ダイアログを表示します。 | |||
*「未保存*」以外のタブ(変更マーク「*」がないタブ)をすべて閉じるなら、別ページに「[[変更なしのタブをすべて閉じる]]」マクロがあります。 | |||
*「無題」をふくめたすべての「未保存*」のタブについて保存処理や確認ダイアログが必要であれば、[[ヘルプ:ファイル#すべて保存して閉じる|ファイルメニュー]]の「すべて保存して閉じる」や「すべて閉じる」を使用してください。 | |||
ファイルメニューの「'''すべて閉じる''' (Shift+Alt+X)」の [[マクロリファレンス:Window インターフェイス#Close メソッド|マクロコード]] | |||
<source lang="javascript"> | |||
window.Close(); | |||
</source> | |||
=== 保存の確認をせずに閉じる | ファイルメニューの「'''すべて保存して閉じる''' (Shift+Ctrl+E)」の [[マクロリファレンス:Editor インターフェイス#SaveCloseAll メソッド|マクロコード]] | ||
<source lang="javascript"> | |||
※<b style="color:#c00;">問答無用</b> | editor.SaveCloseAll(); | ||
</source> | |||
== 保存の確認をせずに閉じる == | |||
すべての「未保存*」タブについて、いっさい保存の確認をせずに閉じます。 <br> | |||
※<b style="color:#c00;">問答無用</b>でエディタウインドウが閉じるので、ご利用は自己責任で。 | |||
<source lang="javascript"> | <source lang="javascript"> | ||
#title = "すべて閉じる(保存の確認なし)" | #title = "すべて閉じる(保存の確認なし)" | ||
#tooltip = " | #tooltip = "未保存のタブがあっても保存の確認をせずに終了する" | ||
// #icon = "close_all[2].ico" | // #icon = "close_all[2].ico" | ||
| 32行目: | 47行目: | ||
</source> | </source> | ||
== 保存の確認ダイログを出す == | |||
名前のある(実体ファイルのある)「未保存*」のタブにたいしては、保存の確認ダイログを表示します。<br> | |||
※「無題」のタブにたいしては、保存の確認をしません。 | |||
<source lang="javascript"> | <source lang="javascript"> | ||
#title = "すべて閉じる(無題は保存の確認しない)" | #title = "すべて閉じる(無題は保存の確認しない)" | ||
#tooltip = " | #tooltip = "無題のタブは保存の確認をせずに終了する" | ||
// #icon = "close_all[ | // #icon = "close_all[1].ico" | ||
for ( var i = 0; i < editor.Documents.Count; i ++ ) { | for ( var i = 0; i < editor.Documents.Count; i ++ ) { | ||
| 49行目: | 64行目: | ||
</source> | </source> | ||
= 他のタブを閉じる = | |||
アクティブなタブ以外を閉じます。 | |||
※「無題」のタブでも名前つきのタブでも、「未保存*」のタブについては保存の確認ダイアログを表示します。 | |||
== | == 左側のタブを閉じる == | ||
<source lang="javascript"> | <source lang="javascript"> | ||
#title = " | #title = "左側のタブをすべて閉じる" | ||
#tooltip = " | #tooltip = "左側のタブをすべて閉じる" | ||
// #icon = " | // #icon = "close_left.ico" | ||
var d = document; | var d = document; | ||
| 71行目: | 87行目: | ||
} | } | ||
} | } | ||
// | // 左側のタブをすべて閉じる | ||
for ( var i = | for ( var i = dd - 1; i >= 0; i -- ) { | ||
docu = editor.Documents.Item( i ); | docu = editor.Documents.Item( i ); | ||
if ( docu != d ) { | if ( docu != d ) { | ||
| 81行目: | 97行目: | ||
== | == 右側のタブをすべて閉じる == | ||
<source lang="javascript"> | <source lang="javascript"> | ||
#title = " | #title = "右側のタブをすべて閉じる" | ||
#tooltip = " | #tooltip = "右側のタブをすべて閉じる" | ||
// #icon = " | // #icon = "close_right.ico" | ||
var d = document; | var d = document; | ||
| 98行目: | 114行目: | ||
} | } | ||
} | } | ||
// | // 右側のタブをすべて閉じる | ||
for ( var i = | for ( var i = dCount - 1; i > dd; i -- ) { | ||
docu = editor.Documents.Item( i ); | docu = editor.Documents.Item( i ); | ||
if ( docu != d ) { | if ( docu != d ) { | ||
| 108行目: | 124行目: | ||
== 他のタブをすべて閉じる == | |||
<source lang="javascript"> | <source lang="javascript"> | ||
| 128行目: | 144行目: | ||
= 他のタブをすべて閉じる(オプションつき) = | |||
※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定します。 | |||
※設定項目で動作モードを変更して別名 .JS ファイルに保存すれば、「右側/左側のタブをすべて閉じる」マクロになります。 | |||
<source lang="javascript"> | <source lang="javascript"> | ||
#title = "他のタブをすべて閉じる" | #title = "他のタブをすべて閉じる" | ||
#tooltip = "他のタブをすべて閉じる" | #tooltip = "他のタブをすべて閉じる" | ||
#icon = "close_other.ico" | // #icon = "close_other.ico" | ||
// ---------- ▼ 設定項目 ▼ ---------- | // ---------- ▼ 設定項目 ▼ ---------- | ||
| 144行目: | 161行目: | ||
var ignoreUnNamed = false; | var ignoreUnNamed = false; | ||
// true: 「無題」ドキュメントにたいしては保存の確認ダイアログを表示しない | // true: 「無題」ドキュメントにたいしては保存の確認ダイアログを表示しない | ||
// false: 「無題」ドキュメントにたいしても保存の確認ダイアログを表示する | // false: 「無題」ドキュメントにたいしても保存の確認ダイアログを表示する | ||
| 172行目: | 189行目: | ||
} | } | ||
</source> | </source> | ||
= 「すべて閉じる」の統合版(モード選択) = | |||
[[ファイル:Mery_すべて閉じる(入力).png|link=|border|right|入力ダイアログ]] | |||
[[ファイル:Mery_すべて閉じる(メニュー).png|link=|border|right|ポップアップメニュー]] | |||
<br> | |||
「すべて閉じる」と「他のタブを閉じる」の機能 '''全部入り''' です。<br><br> | |||
※入力ダイアログかポップアップメニューで動作モードを指定します(ソースコード内の設定項目で「デフォルト値」を指定しておくと Enter または Space キーだけで処理を開始できます)。<br><br> | |||
※ Mode = 4, ignoreUnNamed = false で、ファイルメニューの「すべて閉じる」とおなじ動作になります。 | |||
<br clear=all> | |||
<source 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; | |||
} | |||
</source> | |||
---- | |||
いつもポップアップメニューのマクロばかりなので、少しだけヒネってみました。 | |||
スポンサーリンク