「すべて閉じる」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Sukemaru (トーク | 投稿記録)
Sukemaru (トーク | 投稿記録)
145行目: 145行目:


= 他のタブをすべて閉じる(オプションつき) =
= 他のタブをすべて閉じる(オプションつき) =
※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定します。
※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定できます。<br>
※設定項目で動作モードを変更して別名 .JS ファイルに保存すれば、「右側/左側のタブをすべて閉じる」マクロになります。
※設定項目で動作モードを 1 や 2 に変更して別名の .JS ファイルに保存すれば、「右側/左側のタブをすべて閉じる」マクロになります。


<source lang="javascript">
<source lang="javascript">
189行目: 189行目:
}
}
</source>
</source>


= 「すべて閉じる」の統合版(モード選択) =
= 「すべて閉じる」の統合版(モード選択) =

2019年4月26日 (金) 03:39時点における版

いっぺんに複数のタブを閉じます。

  • 途中で「保存の確認」ダイアログを表示するタイプと表示しないタイプがあります。

※「保存の確認」ダイアログで「キャンセル」ボタンを押した場合、そのタブは閉じず、他のタブにたいしては「すべて閉じる」の処理を継続します。

ダウンロード

ファイル:すべて閉じるマクロ集.zip

(sukemaru 2019/04/25②)
 マクロ×7本、アイコン入り

  • 統合版 を追加
  • アイコンのデザインをちょっと変更


すべて閉じる

ウインドウを閉じるさいに、保存していないタブにたいして「 **** への変更を保存しますか?」の確認ダイアログを表示させずに終了できます。
※基本的に、「未保存*」の名前つきタブがあるときは、保存の確認ダイアログを表示します。

  • 「未保存*」以外のタブ(変更マーク「*」がないタブ)をすべて閉じるなら、別ページに「変更なしのタブをすべて閉じる」マクロがあります。
  • 「無題」をふくめたすべての「未保存*」のタブについて保存処理や確認ダイアログが必要であれば、ファイルメニューの「すべて保存して閉じる」や「すべて閉じる」を使用してください。


ファイルメニューの「すべて閉じる (Shift+Alt+X)」の マクロコード

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 dd, docu;
for ( var i = 0; i < dCount; i ++ ) {
  docu = editor.Documents.Item( i );
  if ( docu == d ) {
    dd = i;
    break;
  }
}
// 左側のタブをすべて閉じる
for ( var i = dd - 1; i >= 0; i -- ) {
  docu = editor.Documents.Item( i );
  if ( docu != d ) {
    docu.Close();
  }
}


右側のタブをすべて閉じる

#title = "右側のタブをすべて閉じる"
#tooltip = "右側のタブをすべて閉じる"
// #icon = "close_right.ico"

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;
  }
}
// 右側のタブをすべて閉じる
for ( var i = dCount - 1; i > dd; i -- ) {
  docu = editor.Documents.Item( i );
  if ( docu != d ) {
    docu.Close();
  }
}


他のタブをすべて閉じる

#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();
  }
}


他のタブをすべて閉じる(オプションつき)

※「未保存*」のタブにたいして 保存の確認ダイログを表示するか/しないか のオプションを設定できます。
※設定項目で動作モードを 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();
  }
}

「すべて閉じる」の統合版(モード選択)

入力ダイアログ
入力ダイアログ
ポップアップメニュー
ポップアップメニュー


「すべて閉じる」と「他のタブを閉じる」の機能 全部入り です。

※入力ダイアログかポップアップメニューで動作モードを指定します(ソースコード内の設定項目で「デフォルト値」を指定しておくと Enter または Space キーだけで処理を開始できます)。

※ Mode = 5, ignoreUnNamed = false で、ファイルメニューの「すべて閉じる」とおなじ動作になります。


#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;
}

いつもポップアップメニューのマクロばかりなので、少しだけヒネってみました。

スポンサーリンク