/** * 行番号をつけて、選択範囲をクリップボードにコピーする * ブログなどにソースコードを貼り付ける場合に便利。 * 行番号つきでソースをブログ投稿や、バグ報告に便利です。 * 機能としては以下のオプションが選べます。 * [1]行番号を保持したままコピーと1始まりでコピーの2通りが出来る * [2]行番号を0などの任意文字で埋めることが可能です。 * @version 1.0 * @author takuya morioka * @see http://d.hatena.ne.jp/takuya_1st/20080208/1202470801 * @lastmodified 2008/02/08 20:24 */ //行番号つきでコピー //ブログなどにソースを貼り付けるときに行番号 //つきでコピーできるように //選択行の行番号を保持したままコピーと //1 origin でコピーの二通り //選択されていなければ何もしない if(document.selection.IsEmpty){ Quit(); } /////////////////////////////////////////////// //クリップボードにコピーする行番号書式設定 /////////////////////////////////////////////// //"0" 行番号をゼロで埋める ex) 000999 //"#" 行番号を#で埋める ex) ###999 //" " 行番号をスペースで埋める ex) 999 //"" 行番号の整形をしない ex) 999 var pad_char = " "; /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// //クリップボードにコピーする行番号設定 /////////////////////////////////////////////// //行番号を0始まりにする:true //行番号をそのまま保持する:false var is_zero_origin = true; /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// //マクロ開始 /////////////////////////////////////////////// var positions = {}; var src_txt = []; var formatted_str = ""; //選択範囲の行番号を改行抜きで取得する positions = SelectionPoint(); //選択範囲の文字を取得 for( var i =positions.start;i<=positions.end;i++){ src_txt[src_txt.length++] = document.GetLine( i ,eeGetLineWithNewLines ); } //選択範囲の行数の表示桁を計算 line_num = positions.end - positions.start; line_start = (is_zero_origin) ? 1 : positions.start; line_digit = (is_zero_origin) ? line_num.toString().length : positions.end.toString().length; for( i in src_txt ){ formatted_str += formatNum( line_start++, line_digit, pad_char ) + ":"+src_txt[i]; } //クリップボードにテキストをセット clipboardData.setData( "Text", formatted_str ); //終了 //////////////////////////////// //数値をフォーマット //num 数値 //digit 桁数 //pad 埋める文字 //////////////////////////////// function formatNum( num, digit, pad ){ var str=""; num = num.toString(); for( var i=0;i< digit-num.length; i++ ){ str+=pad; } return str+num; } //////////////////////////////// //選択範囲の位置を計算して改行のみの選択を除外する //////////////////////////////// function SelectionPoint(){ //選択範囲の行番号を取得 start = document.selection.GetTopPointY( eePosLogical ); end = document.selection.GetBottomPointY( eePosLogical ); //上から下へカーソルが行頭にある場合 //行頭の行番号を含めない end = ( document.selection.GetBottomPointX(eePosLogical) == 1 ) ? end-1 : end; //下から上へ選択していてカーソルが行末にある場合 //行末の行番号を含めない start = ( document.selection.GetTopPointX(eePosLogical)-1 == document.GetLine(start).length ) ? start+1 : start; return { "start":start, "end":end }; }