English help on website



クリップボードと変数のやりとり(Ver8.95対応版)
目次− クリップボードと変数のやりとり
秀丸エディタでは、変数とクリップボードとの間でデータをやりとりするためのマクロの文や値が用意されています。
beginclipboardread(文)
クリップボードからのデータの取り込みを開始することを宣言します。
getclipboard関数といっしょに使います。

getclipboard()(関数)
クリップボードから1行分のデータを取り出し、それを返します。
'\x0D'は除去されますが、'\x0A'は行末についてきます。
ただし、クリップボードデータの最後の部分が改行で終わっていない場合は、'\x0A'無しでデータが返ってきます。

getclipboardを使うには、まずbeginclipboardreadを実行しないといけません。
beginclipboardreadを実行した直後のgetclipboardの値はクリップボード内データの1行目で、2回目の値は2行目で、以下、3行目、4行目とデータを受けとることができます。

クリップボードの最後までデータを取り出し終わるとgetclipboardの返す値は""となります。

使用例:クリップボードの内容を$a[0〜]の配列に取り込む例
	beginclipboardread;
	#i = 0;
	$a[#i] = getclipboard();
	while( $a[#i] != "" ) {
	    #i = #i + 1;
	    $a[#i] = getclipboard();
	}
	
クリップボード内に1行の長さが4KBを超える行があるとその行は4KBで切れてしまいます。
続きは次回のgetclipboard()で取得できます。
V8.00以降では変数そのものに4KBの制限は無いので、以下のサブルーチンで変数に入れることもできます。
ただ、変数にも最終的には約1MBの制限(動作環境で設定可能)があり、4KBの断片で扱ったほうがいい場合もあるので、状況に応じて使い分けてください。
使用例:getclipboard()の4KBの制限を無くすサブルーチン
	beginclipboardread;
	call getcliipboard2;
	insert $$return;
	endmacro;

	//getclipboardの制限を無くすサブルーチン
	getcliipboard2:
	$$line = "";
	while(1){
	  $$add = getclipboard();
	  if( $$add == "" ) break;
	  $$line = $$line + $$add;
	  if( strstr( $$add, "\x0a" ) >= 0 ) break;
	}
	return $$line;
	
クリップボードのデータを配列変数に取り込むと変数用のメモリがいっぱいになる恐れがあります。
いっぱいになってしまうと秀丸マクロの実行はその場でエラーになって中断してしまいます。

getclipboardを関数の書き方でできるのはV8.66以降からです。
V8.66未満の互換のためにキーワードとしてのgetclipboardで取得する方法もあります。
例:
$a=getclipboard;


setclipboard $str(文)
式の値をクリップボードに設定します。
setclipboard $a;
改行も含めてクリップボードに入れたい場合は
setclipboard $a + "\x0D\x0A";
のように使う必要があります。
空の文字列("")を設定すると、クリップボードの内容は全て消去されます。

addclipboard $str(文)
現在のクリップボードのデータに式の値を追加します。
BOX選択してコピーしていた場合、BOX選択であることの情報は失われます。
	setclipboard $a[0];
	#i = 1;
	while( $a[#i] != "" ) {
	    addclipboard $a[#i];
	    #i = #i + 1;
	}
	
getclipboardinfo( n1 )(関数)(V8.00以降)
現在のクリップボードの状態を取得します。
n1に 0 を入れると、クリップボードにテキストがあるかどうかを返します。
n1に 1 を入れると、クリップボードが秀丸エディタのBOX選択をコピーしたものであるかどうかを返します。
参照:クリップボード系文(showcliphist, clearcliphist, poppaste, getcliphist