svnno****@sourc*****
svnno****@sourc*****
2010年 5月 9日 (日) 18:21:21 JST
Revision: 3872 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=3872 Author: doda Date: 2010-05-09 18:21:21 +0900 (Sun, 09 May 2010) Log Message: ----------- Bracketed Paste Mode ããµãã¼ãã 対å¿ãã¦ãããã¹ãå´ã®ã¢ããªã±ã¼ã·ã§ã³ã§ããã¼å ¥åã¨è²¼ãä»ãã®åºå¥ãä»ããããããã«ãªãã .vimrcã®ä¾: if &term == "xterm" let &t_ti = &t_ti . "\e[?2004h" let &t_te = "\e[?2004l" . &t_te set pastetoggle=<Esc>[201~ function XTermPasteBegin(ret) set paste return a:ret endfunction map <special> <expr> <Esc>[200~ XTermPasteBegin("i") imap <special> <expr> <Esc>[200~ XTermPasteBegin("") endif åè: https://bugzilla.gnome.org/show_bug.cgi?id=605299 Modified Paths: -------------- trunk/teraterm/teraterm/clipboar.c trunk/teraterm/teraterm/clipboar.h trunk/teraterm/teraterm/tekwin.cpp trunk/teraterm/teraterm/ttdde.c trunk/teraterm/teraterm/vtterm.c trunk/teraterm/teraterm/vtterm.h trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/clipboar.c =================================================================== --- trunk/teraterm/teraterm/clipboar.c 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/clipboar.c 2010-05-09 09:21:21 UTC (rev 3872) @@ -21,11 +21,15 @@ static HGLOBAL CBCopyHandle = NULL; static PCHAR CBCopyPtr = 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 BOOL CBBracketed = CB_BRACKET_NONE; static BYTE CBByte; static BOOL CBRetrySend; static BOOL CBRetryEcho; @@ -83,7 +87,7 @@ CBCopyHandle = NULL; } -void CBStartPaste(HWND HWin, BOOL AddCR, +void CBStartPaste(HWND HWin, BOOL AddCR, BOOL Bracketed, int BuffSize, PCHAR DataPtr, int DataSize) // // DataPtr and DataSize are used only for DDE @@ -100,6 +104,9 @@ } CBAddCR = AddCR; + if (Bracketed) { + CBBracketed = CB_BRACKET_START; + } if (BuffSize==0) { // for clipboar if (IsClipboardFormatAvailable(CF_TEXT)) { @@ -158,6 +165,9 @@ 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) { @@ -204,7 +214,14 @@ } EndFlag = (CBMemPtr[CBMemPtr2]==0); - if (! EndFlag) { + if (CBBracketed == CB_BRACKET_START) { + CBByte = BracketStart[BracketPtr++]; + if (BracketPtr >= sizeof(BracketStart) - 1) { + CBBracketed = CB_BRACKET_END; + BracketPtr = 0; + } + } + else if (! EndFlag) { CBByte = CBMemPtr[CBMemPtr2]; CBMemPtr2++; // Decoding characters which are encoded by MACRO @@ -224,6 +241,14 @@ 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; Modified: trunk/teraterm/teraterm/clipboar.h =================================================================== --- trunk/teraterm/teraterm/clipboar.h 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/clipboar.h 2010-05-09 09:21:21 UTC (rev 3872) @@ -11,7 +11,7 @@ /* prototypes */ PCHAR CBOpen(LONG MemSize); void CBClose(); -void CBStartPaste(HWND HWin, BOOL AddCR, +void CBStartPaste(HWND HWin, BOOL AddCR, BOOL Bracketed, int BuffSize, PCHAR DataPtr, int DataSize); void CBSend(); void CBEndPaste(); Modified: trunk/teraterm/teraterm/tekwin.cpp =================================================================== --- trunk/teraterm/teraterm/tekwin.cpp 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/tekwin.cpp 2010-05-09 09:21:21 UTC (rev 3872) @@ -485,7 +485,7 @@ void CTEKWindow::OnRButtonUp(UINT nFlags, CPoint point) { - CBStartPaste(tk.HWin,FALSE,0,NULL,0); + CBStartPaste(tk.HWin, FALSE, FALSE, 0, NULL, 0); } void CTEKWindow::OnSetFocus(CWnd* pOldWnd) @@ -737,12 +737,12 @@ void CTEKWindow::OnEditPaste() { - CBStartPaste(tk.HWin,FALSE,0,NULL,0); + CBStartPaste(tk.HWin, FALSE, FALSE, 0, NULL, 0); } void CTEKWindow::OnEditPasteCR() { - CBStartPaste(tk.HWin,TRUE,0,NULL,0); + CBStartPaste(tk.HWin, TRUE, FALSE, 0, NULL, 0); } void CTEKWindow::OnEditClearScreen() Modified: trunk/teraterm/teraterm/ttdde.c =================================================================== --- trunk/teraterm/teraterm/ttdde.c 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/ttdde.c 2010-05-09 09:21:21 UTC (rev 3872) @@ -254,7 +254,7 @@ DataPtr = DdeAccessData(Data,&DataSize); if (DataPtr==NULL) return DDE_FNOTPROCESSED; - CBStartPaste(NULL,FALSE,CBBufSize,DataPtr,DataSize); + CBStartPaste(NULL, FALSE, FALSE, CBBufSize, DataPtr, DataSize); DdeUnaccessData(Data); if (TalkStatus==IdTalkCB) return (HDDEDATA)DDE_FACK; Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/vtterm.c 2010-05-09 09:21:21 UTC (rev 3872) @@ -54,6 +54,7 @@ static BOOL AutoWrapMode; static BOOL FocusReportMode; static BOOL AltScr; +BOOL BracketedPaste; int MouseReportMode; // save/restore cursor @@ -200,6 +201,9 @@ // Alternate Screen Buffer AltScr = FALSE; + + // Bracketed Paste Mode + BracketedPaste = FALSE; } void ResetCharSet() @@ -2172,6 +2176,10 @@ BuffClearScreen(); AltScr = TRUE; } + break; + case 2004: // Bracketed Paste Mode + BracketedPaste = TRUE; + break; } } @@ -2283,6 +2291,9 @@ RestoreCursor(); } break; + case 2004: // Bracketed Paste Mode + BracketedPaste = FALSE; + break; } } Modified: trunk/teraterm/teraterm/vtterm.h =================================================================== --- trunk/teraterm/teraterm/vtterm.h 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/vtterm.h 2010-05-09 09:21:21 UTC (rev 3872) @@ -3,7 +3,6 @@ All rights reserved. */ /* TERATERM.EXE, VT terminal emulation */ -extern int MouseReportMode; #ifdef __cplusplus extern "C" { @@ -20,6 +19,8 @@ BOOL MouseReport(int Event, int Button, int Xpos, int Ypos); void EndTerm(); +extern BOOL BracketedPaste; + #ifdef __cplusplus } #endif Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2010-04-26 12:06:23 UTC (rev 3871) +++ trunk/teraterm/teraterm/vtwin.cpp 2010-05-09 09:21:21 UTC (rev 3872) @@ -780,7 +780,7 @@ // added ConfirmPasteMouseRButton (2007.3.17 maya) if (pasteRButton && !ts.ConfirmPasteMouseRButton) { if (CBStartPasteConfirmChange(HVTWin)) { - CBStartPaste(HVTWin,FALSE,0,NULL,0); + CBStartPaste(HVTWin, FALSE, BracketedPaste, 0, NULL, 0); /* źsž¯©®XN[·éÝèÌê y[XgÅXN[³¹é */ if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { @@ -790,7 +790,7 @@ } else if (pasteMButton) { if (CBStartPasteConfirmChange(HVTWin)) { - CBStartPaste(HVTWin,FALSE,0,NULL,0); + CBStartPaste(HVTWin, FALSE, BracketedPaste, 0, NULL, 0); /* źsž¯©®XN[·éÝèÌê y[XgÅXN[³¹é */ if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { @@ -3913,7 +3913,7 @@ { // add confirm (2008.2.4 yutaka) if (CBStartPasteConfirmChange(HVTWin)) { - CBStartPaste(HVTWin,FALSE,0,NULL,0); + CBStartPaste(HVTWin, FALSE, BracketedPaste, 0, NULL, 0); /* źsž¯©®XN[·éÝèÌê y[XgÅXN[³¹é */ if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { @@ -3926,7 +3926,7 @@ { // add confirm (2008.3.11 maya) if (CBStartPasteConfirmChange(HVTWin)) { - CBStartPaste(HVTWin,TRUE,0,NULL,0); + CBStartPaste(HVTWin, TRUE, BracketedPaste, 0, NULL, 0); /* źsž¯©®XN[·éÝèÌê y[XgÅXN[³¹é */ if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { @@ -5034,7 +5034,7 @@ if (sending) { // [Ö¶ñðèÞ // DDEÊMÉg¤ÖÉÏXB(2006.2.7 yutaka) - CBStartPaste(HVTWin, FALSE, TermWidthMax/*CBBufSize*/, buf, buflen); + CBStartPaste(HVTWin, FALSE, BracketedPaste, TermWidthMax/*CBBufSize*/, buf, buflen); // Mf[^ª éêÍM·é if (TalkStatus == IdTalkCB) { CBSend();