タブを複製する

提供: MeryWiki
2020年6月1日 (月) 19:27時点におけるSukemaru (トーク | 投稿記録)による版 (ページを作成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

タブを複製

機能


アクティブなタブを、新規の『無題』タブに複製します。

実体ファイルの別名コピーを作ってから追加で開いたり、[ファイル] メニューの「名前をつけて保存」コマンドで別名保存してクローンを作ってから元のファイルを開きなおしたり、という方法よりも簡単に作業中の文書の「一時的なクローン」をつくることができます。

  • テキスト、選択範囲、スクロール位置、編集モード、ブックマークなどの状態がまるまる複製されますので、たんなる新規タブへのテキストのコピー&ペーストよりも「アウトライン」プラグインや「ブックマーク一覧ジャンプ」マクロなどとの連携がしやすくなります。
  • 現在のタブの再編集作業のまえに実行しておくと、再編集前後の状態の比較ができたりします。
比較に使用する場合は、複製したタブをエディタウインドウの外にドラッグ&ドロップしてから [ウインドウ] メニューの「左右に並べて表示」を利用すると使いやすいとおもいます。


注意事項


  • マルチカーソルや矩形選択には対応していません。
現在アクティブなタブ上に矩形選択範囲やマルチカーソル複数選択範囲がある場合には、それらの選択範囲は解除され、複製先の『無題』タブ上の選択範囲の状態にも正確に反映されません。
  • アクティブなタブのスクロール位置が文書末尾で「オーバースクロール」している場合、複製したタブには正確に反映されません。


  • タブを複製してから後の編集操作による変更内容は同期しません。
    ※ 編集内容を同期させたい場合は、[ウインドウ] メニューの「上下に分割」または「左右に分割」コマンドを利用してください。
  • 再編集作業前後の状態の比較に使用するのが主目的の場合は、設定項目の「書き換え禁止」を true に設定してください。
    ※ もとのタブと複製したタブを間違えて編集作業をしてしまうと「わけが分からない」状態になったりします。
  • 複製先の『無題』タブは「未保存*」フラグを内部的に解除してありますので、なんらかの編集操作をくわえていない場合は、閉じるさいに「保存の確認」等のメッセージボックスが表示されません。


ソースコード

#title = "タブを複製"

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

// ■ 複製先の『無題』タブを「書き換え禁止」にする?
var readOnly = false;	// true する / false しない

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


( function DuplicateDocument() { 
  // 現在アクティブなタブ
  var d = editor.ActiveDocument,  s = d.selection;
  var act = s.GetActivePos(),  anc = s.GetAnchorPos();
  var sx = ScrollX,  sy = ScrollY;
  Redraw = false;
  // ブックマーク設定を収集する
  var bmArray = [];
  if ( d.GetLines() > 1 ) {
    s.SetActivePoint( mePosLogical, 1, 2 );
    if ( s.PreviousBookmark() ) {
      bmArray.push( s.GetActivePointY( mePosLogical ) );
    }
    s.SetActivePos( 0 );
    while ( s.NextBookmark() ) {
      bmArray.push( s.GetActivePointY( mePosLogical ) );
    }
    s.SetAnchorPos( anc );  s.SetActivePos( act, true );
    ScrollX = sx;  ScrollY = sy;
  }

  // 新規タブにテキストとプロパティを設定する
  if ( d.FullName || d.Text || ! d.Saved ) { editor.NewFile(); }
  var ad = editor.ActiveDocument, as = ad.selection
  ad.Mode = d.Mode;  ad.Encoding = d.Encoding;
  if ( "LineEnding" in Document ) { ad.LineEnding = d.LineEnding; }
  if ( "IndentSize" in Document ) {
    ad.IndentSize = d.IndentSize;
    ad.IndentStyle = d.IndentStyle;
    ad.InsertFinalNewLine = d.InsertFinalNewLine;
    ad.TrimTrailingWhiteSpace = d.TrimTrailingWhiteSpace;
  }
  ad.Text = d.Text;
  ad.Saved = true;  ad.ReadOnly = readOnly;
  // ブックマークを設定する
  if ( bmCount = bmArray.length ) {
    for ( var i = 0; i < bmCount; i ++ ) {
      as.SetActivePoint( mePosLogical, 1, bmArray[i], false );
      as.SetBookmark();
    }
  }
  as.SetActivePos( anc );  as.SetActivePos( act, true );
  ScrollX = sx;  ScrollY = sy;
  Redraw = true;
} )( readOnly );

メモ

  • 2020/06/01
このマクロは、「ファイルを読み直す・開きなおす」マクロや「コンパクトメニュー」マクロ用の独自コマンドとしてつくった機能を単独マクロとして切り出したものです。 単独版のマクロにするにあたり、ブックマーク設定の移植コードと EditorConfig 連携プロパティの同期用コードを追加してあります。
( EditorConfig 連携プロパティの同期用コードは、「読みなおし」マクロや「コンパクトメニュー」マクロにもフィードバックする予定)
スポンサーリンク