svnno****@sourc*****
svnno****@sourc*****
2016年 7月 15日 (金) 18:33:36 JST
Revision: 6449 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6449 Author: doda Date: 2016-07-15 18:33:36 +0900 (Fri, 15 Jul 2016) Log Message: ----------- クリップボードからの貼り付け周りの整理 ・クリップボードの内容が CF_TEXT や CF_OEMTEXT の時も貼り付け開始時点で クリップボードの内容をコピーし、貼り付け処理中はクリップボードのロックを しないようにした。 ただし、クリップボードの内容が CF_TEXT や CF_OEMTEXT でも、CF_UNICODETEXT として取得できるようで、ほぼすべての場合で CF_UNICODETEXT として処理が 行われていたはずなので実質的な動作変更はない事になるはず。 ・Bracketed Paste や AddCR の処理を CBStartPaste へ移動した。 クリップボードの内容をコピーする時点で Bracket や CR を付加する。 Bracketed Paste Mode 有効時に空文字列の貼り付けで終了 Bracket のみ送られる というバグがあったが、この処理変更で修正される。 ・Bracketed Paste Mode テスト用スクリプトを追加 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html trunk/teraterm/teraterm/clipboar.c Added Paths: ----------- trunk/tests/bracketed-paste-test.rb -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2016-07-15 09:33:33 UTC (rev 6448) +++ trunk/doc/en/html/about/history.html 2016-07-15 09:33:36 UTC (rev 6449) @@ -53,6 +53,7 @@ <li>Tera Term(ttermpro.exe) can not run on Windows 95/98/Me/NT4.0.</li> <li>When the clipboard is read from remote host, unnecessary NUL character is added at the end of the string.</li> <!-- li>\x83\x8A\x83\x82\x81[\x83g\x82\xA9\x82\xE7\x82̃N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x8F\x91\x82\xAB\x8D\x9E\x82݂ŁA\x8B\x9A\x97Z\x83b\x83g\x8Fo\x97\x88\x82Ȃ\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li --> + <!-- li>\x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82̓\xE0\x97e\x82\xAA\x8B\x9A\x97\xF1\x82̎\x9E\x81A<a href="../usage/tips/vim.html#Bracketed">Bracketed Paste Mode</a> \x97L\x8C\xF8\x8E\x9E\x82̓\\x82\xE8\x95t\x82\xAF\x82ŏI\x97\xB9 Bracket \x82݂̂\xAA\x91\x97\x82\xE7\x82\xEA\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li --> <li>MACRO: When invalid regular expression is specified at the <a href="../macro/command/strreplace.html">strreplace</a> command, source string is corrupted. <ul> <li>The result variable returns -1 when invalid regular expression is specified.</li> Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2016-07-15 09:33:33 UTC (rev 6448) +++ trunk/doc/ja/html/about/history.html 2016-07-15 09:33:36 UTC (rev 6449) @@ -53,6 +53,7 @@ <li>Windows 95/98/Me/NT4.0\x82ŋN\x93\xAE\x82ł\xAB\x82Ȃ\xAD\x82Ȃ\xC1\x82Ă\xA2\x82\xBD\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> <li>\x83\x8A\x83\x82\x81[\x83g\x82\xA9\x82\xE7\x82̃N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x93ǂݎ\xE6\x82\xE8\x82ɑ\xB5\x82āA\x96\x96\x94\xF6\x82ɗ]\x8Cv\x82\xC8 NUL \x95\xB6\x8E\x9A\x82\xF0\x95t\x89\xC1\x82\xB5\x82Ă\xA2\x82\xBD\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> <li>\x83\x8A\x83\x82\x81[\x83g\x82\xA9\x82\xE7\x82̃N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x8F\x91\x82\xAB\x8D\x9E\x82݂ŁA\x8B\x9A\x97Z\x83b\x83g\x8Fo\x97\x88\x82Ȃ\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> + <li>\x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82̓\xE0\x97e\x82\xAA\x8B\x9A\x97\xF1\x82̎\x9E\x81A<a href="../usage/tips/vim.html#Bracketed">Bracketed Paste Mode</a> \x97L\x8C\xF8\x8E\x9E\x82̓\\x82\xE8\x95t\x82\xAF\x82ŏI\x97\xB9 Bracket \x82݂̂\xAA\x91\x97\x82\xE7\x82\xEA\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> <li><a href="../macro/command/strreplace.html">strreplace</a> \x83}\x83N\x83\x8D\x83R\x83}\x83\x93\x83h\x82ŁA\x90\xB3\x82\xB5\x82\xAD\x82Ȃ\xA2\x90\xB3\x8BK\x95\\x8C\xBB\x82\xF0\x8Ew\x92肵\x82\xBD\x8E\x9E\x82Ɍ\xB3\x95\xB6\x8E\x9A\x97\xF3\x82\xEA\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B <ul> <li>\x90\xB3\x82\xB5\x82\xAD\x96\xB3\x82\xA2\x90\xB3\x8BK\x95\\x8C\xBB\x82\xF0\x8Ew\x92肵\x82\xBD\x8E\x9E\x82\xCD result \x82\xC5 -1 \x82\xF0\x95Ԃ\xB7\x82悤\x82ɂ\xB5\x82\xBD\x81B</li> Modified: trunk/teraterm/teraterm/clipboar.c =================================================================== --- trunk/teraterm/teraterm/clipboar.c 2016-07-15 09:33:33 UTC (rev 6448) +++ trunk/teraterm/teraterm/clipboar.c 2016-07-15 09:33:36 UTC (rev 6449) @@ -24,21 +24,14 @@ static HGLOBAL CBCopyWideHandle = NULL; static LPWSTR CBCopyWidePtr = NULL; -#define CB_BRACKET_NONE 0 -#define CB_BRACKET_START 1 -#define CB_BRACKET_END 2 // for clipboard paste static HGLOBAL CBMemHandle = NULL; static PCHAR CBMemPtr = NULL; static LONG CBMemPtr2 = 0; -static BOOL CBAddCR = FALSE; -static int CBBracketed = CB_BRACKET_NONE; static BYTE CBByte; static BOOL CBRetrySend; static BOOL CBRetryEcho; static BOOL CBSendCR; -static BOOL CBDDE; -static BOOL CBWIDE; static BOOL CBEchoOnly; static BOOL CBInsertDelay = FALSE; @@ -117,17 +110,12 @@ return; } - CBAddCR = FALSE; - CBBracketed = CB_BRACKET_NONE; - CBEchoOnly = EchoOnly; CBMemHandle = NULL; CBMemPtr = NULL; CBMemPtr2 = 0; - CBDDE = TRUE; - CBWIDE = FALSE; CBInsertDelay = FALSE; @@ -151,7 +139,13 @@ void CBStartPaste(HWND HWin, BOOL AddCR, BOOL Bracketed) { + static char BracketStart[] = "\033[200~"; + static char BracketEnd[] = "\033[201~"; UINT Cf; + PCHAR TmpPtr; + LPWSTR TmpPtrW; + HGLOBAL TmpHandle; + int BuffLen, BracketLen; if (! cv.Ready) { return; @@ -160,11 +154,6 @@ return; } - CBAddCR = AddCR; - if (Bracketed) { - CBBracketed = CB_BRACKET_START; - } - if (IsClipboardFormatAvailable(CF_UNICODETEXT)) { Cf = CF_UNICODETEXT; } @@ -183,48 +172,72 @@ CBMemHandle = NULL; CBMemPtr = NULL; CBMemPtr2 = 0; - CBDDE = FALSE; - CBWIDE = FALSE; - CBInsertDelay = FALSE; + if (ts.PasteDelayPerLine > 0) { + CBInsertDelay = TRUE; + } + else { + CBInsertDelay = FALSE; + } + CBRetrySend = FALSE; CBRetryEcho = FALSE; CBSendCR = FALSE; - if (ts.PasteDelayPerLine > 0) { - CBInsertDelay = TRUE; - } if (OpenClipboard(HWin)) { - if (Cf == CF_UNICODETEXT) { - // \x93\\x82\xE8\x95t\x82\xAF\x8F\x88\x97\x9D\x82ł\xCD CBMemHandle \x82ł͂Ȃ\xAD dde \x82Ɠ\xAF\x82\xB6\x82悤\x82\xC9 CBMemPtr \x82\xAA\x8Eg\x82\xED\x82\xEA\x82\xE9 - HGLOBAL TmpHandle = GetClipboardData(Cf); - CBWIDE = TRUE; - if (TmpHandle) { - LPWSTR TmpPtr = (LPWSTR)GlobalLock(TmpHandle); - int mb_len = WideCharToMultiByte(CP_ACP, 0, TmpPtr, -1, 0, 0, NULL, NULL); + if ((TmpHandle = GetClipboardData(Cf)) != NULL) { + if (Cf == CF_UNICODETEXT) { + TmpPtrW = (LPWSTR)GlobalLock(TmpHandle); + BuffLen = WideCharToMultiByte(CP_ACP, 0, TmpPtrW, -1, 0, 0, NULL, NULL); + } + else { + TmpPtr = (PCHAR)GlobalLock(TmpHandle); + BuffLen = strlen(TmpPtr) + 1; + } - CBMemHandle = GlobalAlloc(GHND, mb_len); - if (CBMemHandle != NULL) { - CBMemPtr = GlobalLock(CBMemHandle); - if (CBMemPtr != NULL) { - WideCharToMultiByte(CP_ACP, 0, TmpPtr, -1, CBMemPtr, mb_len, NULL, NULL); + if (Bracketed) { + BuffLen += sizeof(BracketStart) + sizeof(BracketEnd); + } - GlobalUnlock(CBMemHandle); - CBMemPtr=NULL; - TalkStatus=IdTalkCB; + if (AddCR) { + BuffLen++; + } + + if ((CBMemHandle = GlobalAlloc(GHND, BuffLen)) != NULL) { + if ((CBMemPtr = GlobalLock(CBMemHandle)) != NULL) { + if (Bracketed) { + strncpy_s(CBMemPtr, BuffLen, BracketStart, _TRUNCATE); + BracketLen = strlen(CBMemPtr); } + else { + BracketLen = 0; + } - GlobalUnlock(TmpHandle); - CloseClipboard(); + if (Cf == CF_UNICODETEXT) { + WideCharToMultiByte(CP_ACP, 0, TmpPtrW, -1, CBMemPtr+BracketLen, BuffLen-BracketLen, NULL, NULL); + } + else { + strncat_s(CBMemPtr, BuffLen, TmpPtr, _TRUNCATE); + } + + if (Bracketed) { + strncat_s(CBMemPtr, BuffLen, BracketEnd, _TRUNCATE); + } + + if (AddCR) { + strncat_s(CBMemPtr, BuffLen, "\r", _TRUNCATE); + } + + CBMemPtr = NULL; + + TalkStatus = IdTalkCB; } + GlobalUnlock(CBMemHandle); + CBMemPtr = NULL; } + GlobalUnlock(TmpHandle); } - else { - CBMemHandle = GetClipboardData(Cf); - if (CBMemHandle!=NULL) { - TalkStatus=IdTalkCB; - } - } + CloseClipboard(); } if (TalkStatus != IdTalkCB) { @@ -252,8 +265,6 @@ CBMemHandle = NULL; CBMemPtr = NULL; CBMemPtr2 = 0; - CBDDE = TRUE; - CBWIDE = FALSE; if (ts.PasteDelayPerLine > 0) { CBInsertDelay = TRUE; @@ -262,6 +273,10 @@ CBInsertDelay = FALSE; } + CBRetrySend = FALSE; + CBRetryEcho = FALSE; + CBSendCR = FALSE; + if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(HWin)) { Cf = CF_UNICODETEXT; if ((tmpHandle = GetClipboardData(CF_UNICODETEXT)) == NULL) { @@ -281,7 +296,6 @@ } } - if (tmpHandle) { if (Cf == CF_UNICODETEXT) { if ((tmpPtrWide = GlobalLock(tmpHandle)) != NULL) { @@ -332,9 +346,6 @@ CloseClipboard(); } - CBRetrySend = FALSE; - CBRetryEcho = FALSE; - CBSendCR = FALSE; if (TalkStatus != IdTalkCB) { CBEndPaste(); } @@ -352,9 +363,6 @@ int c; BOOL EndFlag; static DWORD lastcr; - static char BracketStart[] = "\033[200~"; - static char BracketEnd[] = "\033[201~"; - static int BracketPtr = 0; DWORD now; if (CBMemHandle==NULL) { @@ -408,14 +416,7 @@ } EndFlag = (CBMemPtr[CBMemPtr2]==0); - if (CBBracketed == CB_BRACKET_START) { - CBByte = BracketStart[BracketPtr++]; - if (BracketPtr >= sizeof(BracketStart) - 1) { - CBBracketed = CB_BRACKET_END; - BracketPtr = 0; - } - } - else if (! EndFlag) { + if (! EndFlag) { CBByte = CBMemPtr[CBMemPtr2]; CBMemPtr2++; // Decoding characters which are encoded by MACRO @@ -430,19 +431,6 @@ CBByte = CBByte - 1; // character just after 0x01 } } - else if (CBAddCR) { - EndFlag = FALSE; - CBAddCR = FALSE; - CBByte = 0x0d; - } - else if (CBBracketed == CB_BRACKET_END) { - EndFlag = FALSE; - CBByte = BracketEnd[BracketPtr++]; - if (BracketPtr >= sizeof(BracketEnd) - 1) { - CBBracketed = CB_BRACKET_NONE; - BracketPtr = 0; - } - } else { CBEndPaste(); return; @@ -530,20 +518,12 @@ if (CBMemPtr!=NULL) { GlobalUnlock(CBMemHandle); } - if (CBDDE || CBWIDE) { - GlobalFree(CBMemHandle); - } + GlobalFree(CBMemHandle); } - if (!CBDDE && !CBWIDE) { - CloseClipboard(); - } - CBDDE = FALSE; - CBWIDE = FALSE; CBMemHandle = NULL; CBMemPtr = NULL; CBMemPtr2 = 0; - CBAddCR = FALSE; CBEchoOnly = FALSE; CBInsertDelay = FALSE; } Added: trunk/tests/bracketed-paste-test.rb =================================================================== --- trunk/tests/bracketed-paste-test.rb (rev 0) +++ trunk/tests/bracketed-paste-test.rb 2016-07-15 09:33:36 UTC (rev 6449) @@ -0,0 +1,226 @@ +#!/usr/bin/env ruby +# encoding: ASCII-8BIT + +Encoding.default_external = "ASCII-8BIT" if RUBY_VERSION >= "1.9.0" + +require 'timeout' +require 'kconv' + +def rawio(t=nil, &blk) + saved_mode = nil + open("|stty -g") do |stty| + saved_mode = stty.gets + end + begin + system("stty raw -echo") + if t + return Timeout.timeout(t, &blk) + else + return blk.call + end + ensure + system("stty #{saved_mode}") + end +end + +def check_kcode + begin + rawio(1) do + print "\r\xe6\xa4\xa3\xe6\x8e\xa7\e[6n\e[1K\r" + buff = "" + while c = STDIN.getc + buff << c.chr + if /(\x9c|\x1b\[)(\d+);(\d+)R/ =~ buff + case $3.to_i + when 5 + $out_code = :toutf8 + when 6 + $out_code = :toeuc + when 7 + $out_code = :tosjis + end + break + end + end + end + rescue Timeout::Error + $out_code = nil + end +end + +def msgout(msg) + if $out_code + puts msg.to_s.method($out_code).call + else + puts msg.to_s + end +end + +def getClipboard + begin + return rawio(1) do + rdata = "" + cbnum = "" + + print "\e]52;c;?\e\\" + + while (c = STDIN.getc) + break if c.ord == 3 || c.ord == 4 + rdata << c + if /(\e\]|\x9d)52;([cps0-7]+);/ =~ rdata + cbnum = $2 + break + end + end + + rdata = "" + if (cbnum != "") + while (c = STDIN.getc) + break if c.ord == 3 || c.ord == 4 + rdata << c + if /(\x9c|\x1b\\)/ =~ rdata + return $`.unpack("m")[0] + break + end + end + end + nil + end + rescue Timeout::Error + nil + end +end + +def setClipboard(data) + printf "\e]52;c;#{[data].pack("m").chomp}\e\\" +end + +def getBracketedString + bracket_type = nil + rdata = "" + begin + return rawio(30) do + pdata = nil + + c = STDIN.getc + if c.ord == 3 || c.ord == 4 + return [:interrupt, rdata] + end + rdata << c + + # \xB0\xECʸ\xBB\xFA\xA4Ǥ\xE2\xCD褿\xA4\xE9\xBBĤ\xEA\xA4Υ\xBF\xA5\xA4\xA5ॢ\xA5\xA6\xA5Ȥ\xF2 1 \xC9ä\xCB\xCAѹ\xB9\xA4\xB9\xA4\xEB + Timeout.timeout(1) do + while (c = STDIN.getc) + if c.ord == 3 || c.ord == 4 + return [:interrupt, rdata] + end + rdata << c + if /(?:\e\[|\x9b)20([01])~/ =~ rdata + pdata = $` + bracket_type = $1.to_i + break + end + end + + case bracket_type + when nil + # \xA4\xB3\xA4ʤ\xA4\xA4Ϥ\xBA\xA4\xC0\xA4\xB1\xA4\xC9 + return [:interrupt, rdata] + when 0 + nil + when 1 + return [:nostart, pdata] + else + # \xA4\xB3\xA4\xEC\xA4\xE2\xA4ʤ\xA4\xA4Ϥ\xBA + return [:invalid, bracket_type] + end + + rdata = "" + while (c = STDIN.getc) + if c.ord == 3 || c.ord == 4 + return [:interrupt, rdata] + end + rdata << c + if /(\e\[|\x9b)201~/ =~ rdata + return [:ok, $`] + end + end + end + [:noend, rdata] + end + rescue Timeout::Error + case bracket_type + when nil + [:timeout, rdata] + when 0 + [:noend, rdata] + when 1 + [:nostart, rdata] + else + return [:invalid, bracket_type] + end + ensure + print "\e[?2004l" + end +end + +def testBracketedPaste(msg, str, enableBracket) + msgout msg + setClipboard str + print "\e[?2004h" if enableBracket + msgout "Ž\xA4\xEA\xC9դ\xB1\xC1\xE0\xBA\xEE(\xA5ޥ\xA6\xA5\xB9\xB1\xA6\xA5ܥ\xBF\xA5\xEA\xA5å\xAF\xA4\xE4Alt+v\xC5\xF9)\xA4\xF2\xB9ԤäƤ\xAF\xA4\xC0\xA4\xB5\xA4\xA4\xA1\xA3" + result, data = getBracketedString + + case result + when :ok + if enableBracket + if str == data + msgout "\xB7\xEB\xB2\xCC: \xA1\xFB" + else + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xC0\xDF\xC4\xEA\xA4ȱ\xFE\xC5\xFA\xA4\xAC\xB0\xEC\xC3פ\xB7\xA4ޤ\xBB\xA4\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + end + else + if str == data + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xC8\xF3ͭ\xB8\xFA\xB2\xBD\xA4ʤΤ\xCB Bracket \xA4ǰϤޤ\xEC\xA4Ƥ\xA4\xA4ޤ\xB9\xA1\xA3" + else + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xC8\xF3ͭ\xB8\xFA\xB2\xBD\xA4ʤΤ\xCB Bracket \xA4ǰϤޤ\xEC\xA4Ƥ\xA4\xA4ޤ\xB9\xA1\xA3\xC0\xDF\xC4\xEA\xA4ȱ\xFE\xC5\xFA\xA4\xAC\xB0\xEC\xC3פ\xB7\xA4ޤ\xBB\xA4\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + end + end + when :interrupt + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xBD\xE8\xCD\xFD\xA4\xAC\xC3\xE6\xC3Ǥ\xB5\xA4\xEC\xA4ޤ\xB7\xA4\xBF\xA1\xA3" + when :invalid + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xB0۾\xEF\xA4ʾ\xF5\xC2֤Ǥ\xB9\xA1\xA3" + when :timeout + if enableBracket + if str == data + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xB1\xFE\xC5\xFA\xA4\xAC Bracket \xA4ǰϤޤ\xEC\xA4Ƥ\xA4\xA4ޤ\xBB\xA4\xF3\xA1\xA3" + else + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xA5\xBF\xA5\xA4\xA5ॢ\xA5\xA6\xA5Ȥ\xB7\xA4ޤ\xB7\xA4\xBF\xA1\xA3\xBC\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + end + else + if str == data + msgout "\xB7\xEB\xB2\xCC: \xA1\xFB" + else + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xC0\xDF\xC4\xEA\xA4ȱ\xFE\xC5\xFA\xA4\xAC\xB0\xEC\xC3פ\xB7\xA4ޤ\xBB\xA4\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + end + end + when :nostart + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xB3\xAB\xBB\xCF Bracket \xA4\xAC\xCD\xE8\xA4ʤ\xA4\xA4Τ˽\xAAλ Bracket \xA4\xAC\xCD\xE8\xA4ޤ\xB7\xA4\xBF\xA1\xA3\xBC\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + when :noend + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xB3\xAB\xBB\xCF Bracket \xA4\xCF\xCD\xE8\xA4ޤ\xB7\xA4\xBF\xA4\xAC\xBD\xAAλ Bracket \xA4\xAC\xCD\xE8\xA4ޤ\xBB\xA4\xF3\xA4Ǥ\xB7\xA4\xBF\xA1\xA3\xBC\xF5\xBF\xAEʸ\xBB\xFA\xCE\xF3: \"#{data}\"" + else + msgout "\xB7\xEB\xB2\xCC: \xA1\xDF - \xB0۾\xEF\xA4ʾ\xF5\xC2֤Ǥ\xB9\xA1\xA3" + end + puts "" +end + +check_kcode +msgout "Bracketed Paste Mode \xA4Υƥ\xB9\xA5Ȥ\xF2\xB9Ԥ\xA4\xA4ޤ\xB9\xA1\xA3" +msgout "\xA1\xD6\xC0\xDF\xC4\xEA\xA1ע֤͡\xBD\xA4\xCE¾\xA4\xCE\xC0\xDF\xC4\xEA\xA1ע͡\xD6\xC0\xA9\xB8楷\xA1\xBC\xA5\xB1\xA5פˤ\xA2\xA4\xEB" +msgout "\xA1֥\xEA\xA5⡼\xA5Ȥ\xAB\xA4\xE9\xA4Υ\xAF\xA5\xEA\xA5åץܡ\xBC\xA5ɥ\xA2\xA5\xAF\xA5\xBB\xA5\xB9\xA1פ\xF2\xA1Ƚ\xF1\xB9\xFE\xA4Τߡɤޤ\xBF\xA4ϡ\xC8\xC6ɹ\xFE/\xBD\xF1\xB9\xFE\xA1ɤˤ\xB7\xA4Ʋ\xBC\xA4\xB5\xA4\xA4\xA1\xA3" +msgout "\xBD\xE0\xC8\x{1E4B3D}\xD0\xCD褿\xA4\xE9\xA5\xA1\xBC\xA5\xBC\xA4\xB7\xA4Ʋ\xBC\xA4\xB5\xA4\xA4\xA1\xA3" +STDIN.gets + +testBracketedPaste("\xA5ƥ\xB9\xA5\xC81: \xC4̾\xEF", "Bracketed Paste Test", true) +testBracketedPaste("\xA5ƥ\xB9\xA5\xC82: \xB6\xF5ʸ\xBB\xFA\xCE\xF3", "", true) +testBracketedPaste("\xA5ƥ\xB9\xA5\xC83: \xC8\xF3ͭ\xB8\xFA\xB2\xBD", "Non-Bracketed Mode Test", false) Property changes on: trunk/tests/bracketed-paste-test.rb ___________________________________________________________________ Added: svn:executable + *