[Ttssh2-commit] [6418] 貼り付け時に末尾の改行を削除する設定を追加

Back to archive index

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);
 }



Ttssh2-commit メーリングリストの案内
Back to archive index