svnno****@sourc*****
svnno****@sourc*****
2016年 6月 30日 (木) 08:43:12 JST
Revision: 6418 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6418 Author: doda Date: 2016-06-30 08:43:12 +0900 (Thu, 30 Jun 2016) Log Message: ----------- 貼り付け時に末尾の改行を削除する設定を追加 Modified Paths: -------------- trunk/installer/release/TERATERM.INI trunk/installer/release/lang/English.lng trunk/installer/release/lang/French.lng trunk/installer/release/lang/German.lng trunk/installer/release/lang/Japanese.lng trunk/installer/release/lang/Korean.lng trunk/installer/release/lang/Russian.lng trunk/installer/release/lang/Simplified Chinese.lng trunk/installer/release/lang/Traditional Chinese.lng trunk/teraterm/common/tt_res.h trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/addsetting.cpp trunk/teraterm/teraterm/clipboar.c trunk/teraterm/teraterm/ttermpro.rc trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/installer/release/TERATERM.INI =================================================================== --- trunk/installer/release/TERATERM.INI 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/TERATERM.INI 2016-06-29 23:43:12 UTC (rev 6418) @@ -656,6 +656,9 @@ ; Translate mouse wheel to cursor key when application cursor mode TranslateWheelToCursor=on +; Trim trailing new line character when pasting +TrimTrailingNLonPaste=off + ; Unknown Unicode character handling UnknownUnicodeCharacterAsWide=off Modified: trunk/installer/release/lang/English.lng =================================================================== --- trunk/installer/release/lang/English.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/English.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -201,6 +201,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=&Confirm mouse R button paste DLG_TAB_COPYPASTE_MOUSEPASTEM=Disable mouse &M button paste DLG_TAB_COPYPASTE_SELECTLBUTTON=Select &only by L button +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=Confirm change &paste DLG_TAB_CONFIRM_STRING_FILE=&String file DLG_TAB_COPYPASTE_DELIMITER=Del&imiter characters Modified: trunk/installer/release/lang/French.lng =================================================================== --- trunk/installer/release/lang/French.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/French.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=Confirmer coller avec bouton D de la souris DLG_TAB_COPYPASTE_MOUSEPASTEM=Interdire coller avec molette DLG_TAB_COPYPASTE_SELECTLBUTTON=Selection seulement avec bouton G +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=Confirmer changer coller DLG_TAB_CONFIRM_STRING_FILE=Fichier cha\xEEne DLG_TAB_COPYPASTE_DELIMITER=Caract\xE8res d\xE9limiteurs Modified: trunk/installer/release/lang/German.lng =================================================================== --- trunk/installer/release/lang/German.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/German.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=&Einf\xFCgen mit rechter Maustaste ein DLG_TAB_COPYPASTE_MOUSEPASTEM=Einf\xFCgen mit mittlerer Maustaste ein DLG_TAB_COPYPASTE_SELECTLBUTTON=&Auswahl nur \xFCber Button +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=Confirm change &paste DLG_TAB_CONFIRM_STRING_FILE=&String file DLG_TAB_COPYPASTE_DELIMITER=&Begrenzungszeichen Modified: trunk/installer/release/lang/Japanese.lng =================================================================== --- trunk/installer/release/lang/Japanese.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/Japanese.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -201,6 +201,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=\x89E\x83N\x83\x8A\x83b\x83N\x82ł̓\\x82\xE8\x95t\x82\xAF\x82\xF0\x8Am\x94F\x82\xB7\x82\xE9(&C) DLG_TAB_COPYPASTE_MOUSEPASTEM=\x92\x86\x83N\x83\x8A\x83b\x83N\x82ł̓\\x82\xE8\x95t\x82\xAF\x82\xF8\x82ɂ\xB7\x82\xE9(&M) DLG_TAB_COPYPASTE_SELECTLBUTTON=\x8D\xB6\x83N\x83\x8A\x83b\x83N\x82ł̂ݑI\x91\xF0\x82\xF0\x8AJ\x8En\x82\xB7\x82\xE9(&O) +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=\x93\\x82\xE8\x95t\x82\xAF\x8E\x9E\x82ɖ\x96\x94\xF6\x82̉\xFC\x8Ds\x82\xF0\x8D폜\x82\xB7\x82\xE9(&T) DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=\x8A댯\x82ȃN\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82̓\\x82\xE8\x95t\x82\xAF\x82\xF0\x8Am\x94F\x82\xB7\x82\xE9(&P) DLG_TAB_CONFIRM_STRING_FILE=\x83L\x81[\x83\x8F\x81[\x83h\x83t\x83@\x83C\x83\x8B(&S) DLG_TAB_COPYPASTE_DELIMITER=\x8B\xE6\x90蕶\x8E\x9A(&I) Modified: trunk/installer/release/lang/Korean.lng =================================================================== --- trunk/installer/release/lang/Korean.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/Korean.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=\xB8\xB6\xBF콺 \xBF\xC0\xB8\xA5\xC2\xCA \xB9\xF6ư \xBAٿ\xA9\xB3ֱ\xE2 Ȯ\xC0\xCE(&C) DLG_TAB_COPYPASTE_MOUSEPASTEM=\xB8\xB6\xBF콺 \xB0\xA1\xBF \xB9\xF6ư \xBAٿ\xA9\xB3ֱ\xE2 \xBA\xF1Ȱ\xBC\xBAȭ(&M) DLG_TAB_COPYPASTE_SELECTLBUTTON=\xB8\xB6\xBF콺 \xBF\xDE\xC2\xCA \xB9\xF6ư\xBF\xA1 \xC0\xC7\xC7ؼ\xAD\xB8\xB8 \xBC\xB1\xC5\xC3(&O) +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=\xBA\xAF\xB0\xE6-\xBAٿ\xA9\xB3ֱ\xE2 Ȯ\xC0\xCE(&P) DLG_TAB_CONFIRM_STRING_FILE=\xB9\xAE\xC0ڿ\xAD \xC6\xC4\xC0\xCF(&S) DLG_TAB_COPYPASTE_DELIMITER=\xB1\xB8\xBA\xD0\xC0\xDA \xB9\xAE\xC0\xDA(&I) Modified: trunk/installer/release/lang/Russian.lng =================================================================== --- trunk/installer/release/lang/Russian.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/Russian.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=&\xD0\xE0\xE7\xF0\xE5\xF8\xE8\xF2\xFC \xE2\xF1\xF2\xE0\xE2\xEA\xF3 \xEF\xF0\xE0\xE2\xEE\xE9 \xEA\xED\xEE\xEF\xEA\xEE\xE9 \xEC\xFB\xF8\xE8 DLG_TAB_COPYPASTE_MOUSEPASTEM=&\xCE\xF2\xEA\xEB\xFE\xF7\xE8\xF2\xFC \xE2\xF1\xF2\xE0\xE2\xEA\xF3 \xF1\xF0\xE5\xE4\xED\xE5\xE9 \xEA\xED\xEE\xEF\xEA\xEE\xE9 \xEC\xFB\xF8\xE8 DLG_TAB_COPYPASTE_SELECTLBUTTON=&\xC8\xF1\xEF\xEE\xEB\xFC\xE7\xEE\xE2\xE0\xF2\xFC \xF2\xEE\xEB\xFC\xEA\xEE \xEB\xE5\xE2\xF3\xFE \xEA\xED\xEE\xEF\xEA\xF3 \xEC\xFB\xF8\xE8 +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=&\xD0\xE0\xE7\xF0\xE5\xF8\xE8\xF2\xFC \xE2\xF1\xF2\xE0\xE2\xEA\xF3 \xE8\xE7\xEC\xE5\xED\xE5\xED\xE8\xFF DLG_TAB_CONFIRM_STRING_FILE=&\xD2\xE5\xEA\xF1\xF2\xEE\xE2\xFB\xE9 \xF4\xE0\xE9\xEB DLG_TAB_COPYPASTE_DELIMITER=&\xD0\xE0\xE7\xE4\xE5\xEB\xE8\xF2\xE5\xEB\xFC \xF1\xE8\xEC\xE2\xEE\xEB\xEE\xE2 Modified: trunk/installer/release/lang/Simplified Chinese.lng =================================================================== --- trunk/installer/release/lang/Simplified Chinese.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/Simplified Chinese.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=\xC6\xF4\xD3\xC3\xD3Ҽ\xFC\xB5\xA5\xBB\xF7ճ\xCC\xF9(&C) DLG_TAB_COPYPASTE_MOUSEPASTEM=\xBD\xFB\xD3\xC3\xD6м\xFC\xB5\xA5\xBB\xF7ճ\xCC\xF9(&M) DLG_TAB_COPYPASTE_SELECTLBUTTON=\xBD\xF6\xD3\xC3\xCA\xF3\xB1\xEA\xD7\xF3\xBC\xFC(&O) +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=\xA1\xB0Σ\xCF\xD5ճ\xCC\xF9\xBC\xF4\xCC\xF9\xB0塱ȷ\xC8\xCF(&P) DLG_TAB_CONFIRM_STRING_FILE=\xB9ؼ\xFC\xD7\xD6\xCEļ\xFE(&S) DLG_TAB_COPYPASTE_DELIMITER=\xB7ָ\xF4\xB7\xFB(&I) Modified: trunk/installer/release/lang/Traditional Chinese.lng =================================================================== --- trunk/installer/release/lang/Traditional Chinese.lng 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/installer/release/lang/Traditional Chinese.lng 2016-06-29 23:43:12 UTC (rev 6418) @@ -202,6 +202,7 @@ DLG_TAB_COPYPASTE_CONFIRMPASTE=\xB1ҥΥk\xC1\xE4\xB3\xE6\xC0\xBB\xB6K\xA4W(&C) DLG_TAB_COPYPASTE_MOUSEPASTEM=\xB8T\xA5Τ\xA4\xC1\xE4\xB3\xE6\xC0\xBB\xB6K\xA4W(&M) DLG_TAB_COPYPASTE_SELECTLBUTTON=\xB6ȥηƹ\xAB\xA5\xAA\xC1\xE4(&O) +DLG_TAB_COPYPASTE_TRIM_TRAILING_NL=&Trim trailing new line character when pasting DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE=\xA1uĵ\xA7i\xB6K\xA4W\xB0ŶKï\xA1v\xBDT\xBB{(&P) DLG_TAB_CONFIRM_STRING_FILE=\xC3\xF6\xC1\xE4\xA6r\xA4\xE5\xA5\xF3(&S) DLG_TAB_COPYPASTE_DELIMITER=\xA4\xC0\xB9j\xB2\xC5(&I) Modified: trunk/teraterm/common/tt_res.h =================================================================== --- trunk/teraterm/common/tt_res.h 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/common/tt_res.h 2016-06-29 23:43:12 UTC (rev 6418) @@ -213,6 +213,7 @@ #define IDC_SSH_SETUPDIR_GROUP 2561 #define IDC_SSH_SETUPDIR_STATIC_VSTORE 2562 #define IDC_SSH_SETUPDIR_EDIT_VSTORE 2563 +#define IDC_TRIMNLCHAR 2564 #define ID_ACC_SENDBREAK 50001 #define ID_ACC_COPY 50002 #define ID_ACC_NEWCONNECTION 50003 @@ -310,7 +311,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 126 #define _APS_NEXT_COMMAND_VALUE 52031 -#define _APS_NEXT_CONTROL_VALUE 2564 +#define _APS_NEXT_CONTROL_VALUE 2565 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/common/tttypes.h 2016-06-29 23:43:12 UTC (rev 6418) @@ -610,6 +610,7 @@ int ZmodemTimeOutInit; int ZmodemTimeOutFin; WORD WaitCom; + WORD TrimTrailingNLonPaste; }; typedef struct tttset TTTSet, *PTTSet; @@ -1075,6 +1076,9 @@ * when you change TMap or member of TMap. * * - At version 4.91, ttset_memfilemap was replaced with ttset_memfilemap_28. + * added tttset.TrimTrailingNLonPaste + * + * - At version 4.91, ttset_memfilemap was replaced with ttset_memfilemap_28. * added tttset.WaitCom * * - At version 4.90, ttset_memfilemap was replaced with ttset_memfilemap_27. @@ -1246,4 +1250,4 @@ * added tttset.VTCompatTab. */ -#define TT_FILEMAPNAME "ttset_memfilemap_28" +#define TT_FILEMAPNAME "ttset_memfilemap_29" Modified: trunk/teraterm/teraterm/addsetting.cpp =================================================================== --- trunk/teraterm/teraterm/addsetting.cpp 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/teraterm/addsetting.cpp 2016-06-29 23:43:12 UTC (rev 6418) @@ -489,6 +489,7 @@ SendDlgItemMessage(IDC_CONFIRM_PASTE_RBUTTON, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); SendDlgItemMessage(IDC_DISABLE_PASTE_MBUTTON, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); SendDlgItemMessage(IDC_SELECT_LBUTTON, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(IDC_TRIMNLCHAR, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); SendDlgItemMessage(IDC_CONFIRM_CHANGE_PASTE, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); SendDlgItemMessage(IDC_CONFIRM_STRING_FILE_LABEL, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); SendDlgItemMessage(IDC_CONFIRM_STRING_FILE, WM_SETFONT, (WPARAM)DlgCopypasteFont, MAKELPARAM(TRUE,0)); @@ -518,6 +519,9 @@ GetDlgItemText(IDC_SELECT_LBUTTON, uimsg, sizeof(uimsg)); get_lang_msg("DLG_TAB_COPYPASTE_SELECTLBUTTON", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); SetDlgItemText(IDC_SELECT_LBUTTON, ts.UIMsg); + GetDlgItemText(IDC_TRIMNLCHAR, uimsg, sizeof(uimsg)); + get_lang_msg("DLG_TAB_COPYPASTE_TRIM_TRAILING_NL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); + SetDlgItemText(IDC_TRIMNLCHAR, ts.UIMsg); GetDlgItemText(IDC_CONFIRM_CHANGE_PASTE, uimsg, sizeof(uimsg)); get_lang_msg("DLG_TAB_COPYPASTE_CONFIRM_CHANGE_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); SetDlgItemText(IDC_CONFIRM_CHANGE_PASTE, ts.UIMsg); @@ -559,7 +563,11 @@ btn = (CButton *)GetDlgItem(IDC_SELECT_LBUTTON); btn->SetCheck(ts.SelectOnlyByLButton); - // (6)ConfirmChangePaste + // (6)TrimTrailingNLonPaste + btn = (CButton *)GetDlgItem(IDC_TRIMNLCHAR); + btn->SetCheck(ts.TrimTrailingNLonPaste); + + // (7)ConfirmChangePaste btn = (CButton *)GetDlgItem(IDC_CONFIRM_CHANGE_PASTE); btn->SetCheck(ts.ConfirmChangePaste); @@ -575,10 +583,10 @@ btn->EnableWindow(FALSE); } - // (7)delimiter characters + // (8)delimiter characters SetDlgItemText(IDC_DELIM_LIST, ts.DelimList); - // (8)PasteDelayPerLine + // (9)PasteDelayPerLine _snprintf_s(buf, sizeof(buf), "%d", ts.PasteDelayPerLine); SetDlgItemText(IDC_PASTEDELAY_EDIT, buf); @@ -670,15 +678,19 @@ btn = (CButton *)GetDlgItem(IDC_SELECT_LBUTTON); ts.SelectOnlyByLButton = btn->GetCheck(); - // (6)IDC_CONFIRM_CHANGE_PASTE + // (6) + btn = (CButton *)GetDlgItem(IDC_TRIMNLCHAR); + ts.TrimTrailingNLonPaste = btn->GetCheck(); + + // (7)IDC_CONFIRM_CHANGE_PASTE btn = (CButton *)GetDlgItem(IDC_CONFIRM_CHANGE_PASTE); ts.ConfirmChangePaste = btn->GetCheck(); GetDlgItemText(IDC_CONFIRM_STRING_FILE, ts.ConfirmChangePasteStringFile, sizeof(ts.ConfirmChangePasteStringFile)); - // (7) + // (8) GetDlgItemText(IDC_DELIM_LIST, ts.DelimList, sizeof(ts.DelimList)); - // (8) + // (9) GetDlgItemText(IDC_PASTEDELAY_EDIT, buf, sizeof(buf)); val = atoi(buf); ts.PasteDelayPerLine = min(max(0, val), 5000); Modified: trunk/teraterm/teraterm/clipboar.c =================================================================== --- trunk/teraterm/teraterm/clipboar.c 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/teraterm/clipboar.c 2016-06-29 23:43:12 UTC (rev 6418) @@ -563,7 +563,56 @@ CBInsertDelay = FALSE; } +BOOL CBSetClipboard(HWND owner, HGLOBAL hMem) +{ + char *buf; + int wide_len; + HGLOBAL wide_hMem; + LPWSTR wide_buf; + if (OpenClipboard(owner) == 0) + return FALSE; + + buf = GlobalLock(hMem); + + wide_len = MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0); + wide_hMem = GlobalAlloc(GMEM_MOVEABLE, sizeof(WCHAR) * wide_len); + if (wide_hMem) { + wide_buf = (LPWSTR)GlobalLock(wide_hMem); + MultiByteToWideChar(CP_ACP, 0, buf, -1, wide_buf, wide_len); + GlobalUnlock(wide_hMem); + } + + GlobalUnlock(hMem); + + EmptyClipboard(); + SetClipboardData(CF_TEXT, hMem); + if (wide_buf) { + SetClipboardData(CF_UNICODETEXT, wide_hMem); + } + CloseClipboard(); + + return TRUE; +} + +HGLOBAL CBAllocClipboardMem(char *text) +{ + HGLOBAL hMem; + char *buf; + int len; + + len = strlen(text); + + hMem = GlobalAlloc(GMEM_MOVEABLE, len+1); + if (hMem) { + buf = GlobalLock(hMem); + strncpy_s(buf, len+1, text, _TRUNCATE); + GlobalUnlock(hMem); + } + + return hMem; +} + static char *ClipboardPtr = NULL; static int PasteCanceled = 0; @@ -694,31 +743,18 @@ int len = SendMessage(GetDlgItem(hDlgWnd, IDC_EDIT), WM_GETTEXTLENGTH, 0, 0); HGLOBAL hMem; char *buf; - int wide_len; - HGLOBAL wide_hMem; - LPWSTR wide_buf; - if (OpenClipboard(hDlgWnd) != 0) { - hMem = GlobalAlloc(GMEM_MOVEABLE, len + 1); + hMem = GlobalAlloc(GMEM_MOVEABLE, len + 1); + if (hMem) { buf = GlobalLock(hMem); SendMessage(GetDlgItem(hDlgWnd, IDC_EDIT), WM_GETTEXT, len + 1, (LPARAM)buf); - wide_len = MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0); - wide_hMem = GlobalAlloc(GMEM_MOVEABLE, sizeof(WCHAR) * wide_len); - if (wide_hMem) { - wide_buf = (LPWSTR)GlobalLock(wide_hMem); - MultiByteToWideChar(CP_ACP, 0, buf, -1, wide_buf, wide_len); - GlobalUnlock(wide_hMem); - } - GlobalUnlock(hMem); - EmptyClipboard(); - SetClipboardData(CF_TEXT, hMem); - if (wide_buf) { - SetClipboardData(CF_UNICODETEXT, wide_hMem); + if (! CBSetClipboard(hDlgWnd, hMem)) { + // \x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82ւ̃Z\x83b\x83g\x82\xAA\x8E\xB8\x94s\x82\xB5\x82\xBD\x8E\x9E\x82\xCD hMem \x82\xF0\x94j\x8A\xFC\x82\xB7\x82\xE9 + // \x90\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x82̓N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xAA\x8F\x8A\x8E\x9D\x82\xB5\x82Ă\xA2\x82\xE9\x82̂ŁA\x94j\x8A\xFC\x82\xB5\x82Ă͂\xA2\x82\xAF\x82Ȃ\xA2 + GlobalFree(hMem); } - CloseClipboard(); - // hMem\x82̓N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xAA\x95ێ\x9D\x82\xB5\x82Ă\xA2\x82\xE9\x82̂ŁA\x94j\x8A\xFC\x82\xB5\x82Ă͂\xA2\x82\xAF\x82Ȃ\xA2\x81B } if (DlgClipboardFont != NULL) { @@ -865,15 +901,15 @@ { UINT Cf; HANDLE hText; - char *pText; + char *pText, *tail; int pos; int ret = 0; - BOOL confirm = FALSE; + BOOL confirm = FALSE, need_writeback = FALSE; HANDLE wide_hText; LPWSTR wide_buf; int mb_len; - if (ts.ConfirmChangePaste == 0) + if (!ts.ConfirmChangePaste && !ts.TrimTrailingNLonPaste) return 1; if (! cv.Ready) @@ -922,6 +958,18 @@ } CloseClipboard(); + if (ts.TrimTrailingNLonPaste) { + for (tail=ClipboardPtr+strlen(ClipboardPtr)-1; tail >= ClipboardPtr; tail--) { + if (*tail == '\r' || *tail == '\n') { + *tail = '\0'; + need_writeback = TRUE; + } + else { + break; + } + } + } + if (AddCR) { if (ts.ConfirmChangePasteCR) { confirm = TRUE; @@ -952,6 +1000,17 @@ goto error; } } + else if (need_writeback) { + HGLOBAL hMem; + hMem = CBAllocClipboardMem(ClipboardPtr); + if (hMem) { + if (! CBSetClipboard(NULL, hMem)) { + // \x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82ւ̃Z\x83b\x83g\x82\xAA\x8E\xB8\x94s\x82\xB5\x82\xBD\x8E\x9E\x82\xCD hMem \x82\xF0\x94j\x8A\xFC\x82\xB7\x82\xE9 + // \x90\xAC\x8C\x{1C2D42}\xBD\x8Fꍇ\x82̓N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xAA\x8F\x8A\x8E\x9D\x82\xB5\x82Ă\xA2\x82\xE9\x82̂ŁA\x94j\x8A\xFC\x82\xB5\x82Ă͂\xA2\x82\xAF\x82Ȃ\xA2 + GlobalFree(hMem); + } + } + } ret = 1; Modified: trunk/teraterm/teraterm/ttermpro.rc =================================================================== --- trunk/teraterm/teraterm/ttermpro.rc 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/teraterm/ttermpro.rc 2016-06-29 23:43:12 UTC (rev 6418) @@ -97,15 +97,17 @@ CONTROL "Disable mouse &M button paste",IDC_DISABLE_PASTE_MBUTTON, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,55,200,10 CONTROL "Select &only by L button",IDC_SELECT_LBUTTON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,70,200,10 - CONTROL "Confirm change &paste",IDC_CONFIRM_CHANGE_PASTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,85,200,10 - LTEXT "&String file",IDC_CONFIRM_STRING_FILE_LABEL,22,100,68,8 - EDITTEXT IDC_CONFIRM_STRING_FILE,95,98,106,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_CONFIRM_STRING_FILE_PATH,206,98,13,12 - LTEXT "Del&imiter characters",IDC_DELIMITER,11,115,65,10 - EDITTEXT IDC_DELIM_LIST,95,113,130,12,ES_AUTOHSCROLL - LTEXT "P&aste delay per line",IDC_PASTEDELAY_LABEL,11,130,70,10 - EDITTEXT IDC_PASTEDELAY_EDIT,95,128,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "ms",IDC_PASTEDELAY_LABEL2,123,130,23,10 + CONTROL "&Trim trailing new line character when pasting",IDC_TRIMNLCHAR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,85,200,10 + CONTROL "Confirm change &paste",IDC_CONFIRM_CHANGE_PASTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,100,200,10 + LTEXT "&String file",IDC_CONFIRM_STRING_FILE_LABEL,22,115,68,8 + EDITTEXT IDC_CONFIRM_STRING_FILE,95,113,106,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_CONFIRM_STRING_FILE_PATH,206,113,13,12 + LTEXT "Del&imiter characters",IDC_DELIMITER,11,130,65,10 + EDITTEXT IDC_DELIM_LIST,95,128,130,12,ES_AUTOHSCROLL + LTEXT "P&aste delay per line",IDC_PASTEDELAY_LABEL,11,145,70,10 + EDITTEXT IDC_PASTEDELAY_EDIT,95,143,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "ms",IDC_PASTEDELAY_LABEL2,123,145,23,10 END IDD_TABSHEET_VISUAL DIALOGEX 0, 0, 258, 158 Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2016-06-29 23:43:08 UTC (rev 6417) +++ trunk/teraterm/ttpset/ttset.c 2016-06-29 23:43:12 UTC (rev 6418) @@ -1922,6 +1922,10 @@ if (ts->ZmodemTimeOutFin < 1) ts->ZmodemTimeOutFin = 1; + // Trim trailing new line character when pasting + ts->TrimTrailingNLonPaste = + GetOnOff(Section, "TrimTrailingNLonPaste", FName, FALSE); + // CygTerm Configuration File ReadCygtermConfFile(ts); } @@ -3180,6 +3184,9 @@ ); WritePrivateProfileString(Section, "ZmodemTimeouts", Temp, FName); + // Trim trailing new line character when pasting + WriteOnOff(Section, "TrimTrailingNLonPaste", FName, ts->TrimTrailingNLonPaste); + // CygTerm Configuration File WriteCygtermConfFile(ts); }