追加コピー・追加切り取り

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

すでにマクロライブラリ内の「キーアサイン集」のページに「追加コピー」と「追加切り取り」マクロがありますが、クリップボード履歴に「追加コピー (切り取り)」前/後のアイテムが累積されていき、ばあいによってはクリップボード履歴を無駄に圧迫することになってしまいます。
このページの「追加コピー」と「追加切り取り」マクロはクリップボード履歴の 2 件目以降のデータを保持したまま、最新のデータだけを「追加コピー」または「追加切り取り」の結果に置きかえるものです。


  • このページの「追加コピー」と「追加切り取り」マクロは Mery 2.8.1 以降 でしか利用できません。
Mary ver 2.8.0 以前、または「追加コピー」や「追加切り取り」ごとにクリップボード履歴にデータを累積させていきたい場合は、「キーアサイン集」の「追加コピー」と「追加切り取り」を利用してください。
  • たぶん Windows OS のクリップボードには「追加コピー」前/後のデータが累積されていきます…。(未確認)
  • クリップボード履歴に累積しているデータの任意の範囲を「つなげて貼り付け」したい場合は、「『クリップボード履歴』メニューのマクロ化」マクロと「追加コード:『n 番目から m 番目まで貼り付け』」を利用してください。


設定項目[編集]


allowCopyLineallowCutLine
  • true : 標準コマンドの「コピー」や「切り取り」と同様に、選択範囲がないときにはキャレットのある論理行全体を「追加コピー」または「追加切り取り」します。 (初期値)
  • false : 選択範囲がないときには「追加コピー」または「追加切り取り」しません。


appendix
「追加コピー」または「追加切り取り」する前からあったクリップボードのテキストと、「追加コピー」または「追加切り取り」したテキストとの間に任意の文字列を挟みこむことができます。

【例】

  • "" : なにも付加しない。 (初期値)
  • " " : 「半角空白」を挟みこむ。
  • "\n" : 「改行」を挟みこむ。


allowCollapse (「追加コピー」マクロのみ)
  • true : 選択範囲を「追加コピー」後に解除します。
  • false : 選択範囲を解除しません。 (初期値)


ソースコード[編集]



追加コピー[編集]

#title = "追加コピー"
#tooltip = "追加コピー"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",214
// #icon = "copy_plus.ico"

/**
 * sukemaru	(2020/04/23 - 2020/06/05)
 * ver 2.8.1 以降用「追加コピー」
 * ※ クリップボード履歴に累積させずに、最新のデータに上書きで追加コピーする
 *  (クリップボード履歴の 2 件目以降のデータを保持)
 */

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

// ■ 選択範囲がないときは論理行全体を追加コピーする
var allowCopyLine = true;	// true 行コピーする / false 行コピーはしない

// ■ 追加コピー後に選択範囲を解除する(範囲選択していたときのみ)
var allowCollapse = false;	// true 解除する / false 解除しない

// ■ 追加コピーするテキストの前に付加する文字列
var appendix = "";			// 半角空白 → " " / 改行 → "\n"

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

var d = editor.ActiveDocument,  s = d.selection;
var line = d.GetLine( s.GetActivePointY( mePosLogical ), meGetLineWithNewLines );
var str = s.Text ? s.Text
                 : ( allowCopyLine && line ? line : "" );
appendix = appendix || "";
if ( str ) {
  var cb  = ClipboardData;
  var oldData = cb.GetData( 0 ) || cb.GetData() || "";
  cb.ClearData( 0 );
  cb.SetData( oldData + appendix + str );
}
if ( s.Text && allowCollapse ) {
  s.SetActivePos( s.GetActivePos() );
}


追加切り取り[編集]

#title = "追加切り取り"
#tooltip = "追加切り取り"
// #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",213
// #icon = "cut_plus.ico"

/**
 * sukemaru	(2020/06/05)
 * ver 2.8.1 以降用「追加切り取り」
 * ※ クリップボード履歴に累積させずに、最新のデータに上書きで追加切り取りする
 *  (クリップボード履歴の 2 件目以降のデータを保持)
 */

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

// ■ 選択範囲がないときは論理行全体を「追加切り取り」する
var allowCutLine = true;	// true 行切り取りする / false 行切り取りはしない

// ■ 「追加切り取り」するテキストの前に付加する文字列
var appendix = "";			// 半角空白 → " " / 改行 → "\n"

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

var d = editor.ActiveDocument,  s = d.selection;
if ( ! d.ReadOnly ) {
  if ( s.IsEmpty && allowCutLine ) { s.SelectLine(); }
  var str = s.Text;
  appendix = appendix || "";
  if ( str ) {
    var cb  = ClipboardData;
    var oldData = cb.GetData( 0 ) || cb.GetData() || "";
    cb.ClearData( 0 );
    cb.SetData( oldData + appendix + str );
  }
  s.Delete();
}
else { Status = "ドキュメントは書きかえ禁止です。"; }
スポンサーリンク