行の先頭に貼り付け

提供: MeryWiki
ナビゲーションに移動 検索に移動

引用の追加」マクロを翻案して、クリップボードのデータ(文字列)を複数行の先頭に貼り付ける(挿入する)マクロにしました。 箇条書きのバレットや行コメントのプリフィックスのような短い文字列の挿入や、CSVで先頭に列を追加する用途に。

選択範囲がないばあいはカーソル位置の論理行、選択範囲があるばあいは選択範囲をふくむ論理行全体(複数行可)の先頭に挿入します。

行の途中からべつの行の途中までのような大ざっぱな範囲選択状態から「行の先頭に貼り付け」を実行することを想定しています。 ルーラーの行番号のドラッグでの複数行選択やトリプルクリックでの行選択で末尾改行が含まれているばあい、さいごの改行を無視します。

#title = "行の先頭に貼り付け"
#tooltip = "各行の先頭に貼り付ける (挿入)"
/**
 * 選択範囲をふくむ各行の先頭にクリップボードのデータを貼り付ける (挿入)
 *
 * 文書終端の空行 ( ^[EOF] ) を選択範囲の末尾にぶら下げての "挿入" はできるが、可否について条件アリ
 *   選択範囲の確定時点でのキャレットの位置が "選択範囲の先頭にあるか" / "末尾 ( [EOF] マークの直前) にあるか" で判別する
 *   文字列または行番号をドラッグ(または"クリック & Shift+クリック")して選択範囲を確定するさいに
 *   ・上(左)から下(右)にむけて選択範囲をつくった場合 → 終端の空行 ( ^[EOF] ) を含める
 *   ・下(右)から上(左)にむけて選択範囲をつくった場合 → 終端の空行 ( ^[EOF] ) を含めない
 */

var sx = ScrollX, sy = ScrollY;	// スクロール位置を保存
var s = document.selection;

// 選択範囲の各座標を取得
var ay = s.GetTopPointY( mePosLogical );
var by = s.GetBottomPointY( mePosLogical );
var bx = s.GetBottomPointX( mePosLogical );	

// 選択範囲の末尾が終端の空行 ( ^[EOF] ) にあるときの調整
var e = 0;
if ( ! document.Text.charAt( s.GetActivePos() ) )	// カーソル位置に文字がないばあいを ^[EOF] と判定する
  e = 1;
// 選択範囲の末尾が行頭 x = 1 にあるときの調整
if ( ay != by && bx == 1 && e == 0 )
  var by = by - 1;
  
// 選択範囲の拡張
s.SetActivePoint( mePosLogical, 1, by );
s.EndOfLine( false, mePosLogical );
s.SetAnchorPoint( mePosLogical, 1, ay );

// ここから、「引用の追加」マクロのコードを流用
var cb = ClipboardData.GetData();	// クリップボードのテキストデータを取得
s.Text = insertCb( s.Text, cb );	// "各行の先頭に貼り付け”

function insertCb( arg1, arg2 ) {
  var a = arg1.split( "\n" );
  for ( var i = 0; i < a.length; i++ )
    a[i] = arg2 + a[i];
  return a.join( "\n" );
}

// 選択範囲を復旧 (末尾改行を含める)
s.SetAnchorPos( s.GetActivePos() + 1 );
s.SetActivePoint( mePosLogical, 1, ay, true );
ScrollX = sx; ScrollY = sy;	// スクロール位置を復元


引用の追加」マクロへの組みこみ用コード[編集]

行の先頭に貼り付け」を「引用の追加」マクロのポップアップメニュー項目として組みこむことができます(「1つ削除」や「すべて削除」には非対応)。

引用の追加」マクロのコードに以下の各行を追加します。

1. "m.Add( … );" のグループに1行追加(位置は任意)

m.Add( "クリップボードから", 40 );

2. "␣␣␣␣default:" のうえに4行挿入

    case 40:
      var cb = ClipboardData.GetData();
      document.selection.Text = insertQuote( s, cb );
      break;
  • ポップアップメニュー項目と引用符の定義配列 "q = new Array( … )" に40コ以上詰めこんでいるばあいは、追加コードのID 40 を適当な数字に変更してください。
  • 「引用の追加」マクロは公開停止となりました。
    「引用の追加」マクロを引きつぐ形で、この組みこみ用コードを追加済みの「引用符/コメント」マクロを投稿しましたのでご利用ください。 (2018/10/28 sukemaru)
スポンサーリンク