[dev] [st] [PATCH] Switched a few things around to make pasting from/to GUI a bit better.

From: Alexander Sedov <alex0player_AT_gmail.com>
Date: Fri, 12 Apr 2013 12:28:43 +0400

Now, on selcopy, st generates traditional Unix newlines ('\n'), because
apparently that's what GUI applications are used to see. But some
terminal applications do not handle '\n' very well, so, when pasting to st,
line feeds are replaced with carriage returns, codes that Return key generates.
---
 st.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/st.c b/st.c
index 93058b9..726b8f9 100644
--- a/st.c
+++ b/st.c
_AT_@ -790,7 +790,7 @@ selcopy(void) {
 			}
 			/* \n at the end of every selected line except for the last one */
 			if(is_selected && y < sel.e.y)
-				*ptr++ = '\r';
+				*ptr++ = '\n';
 		}
 		*ptr = 0;
 	}
_AT_@ -801,7 +801,7 @@ void
 selnotify(XEvent *e) {
 	ulong nitems, ofs, rem;
 	int format;
-	uchar *data;
+	uchar *data, *repl, *last;
 	Atom type;
 
 	ofs = 0;
_AT_@ -812,6 +812,14 @@ selnotify(XEvent *e) {
 			fprintf(stderr, "Clipboard allocation failed\n");
 			return;
 		}
+
+		/* Working around inconsistent behaviour of GUI and terminal apps */
+		last = data + nitems * format / 8;
+		repl = data;
+		while((repl = memchr(repl, '\n', last - repl))) {
+			*repl++ = '\r';
+		}
+
 		ttywrite((const char *) data, nitems * format / 8);
 		XFree(data);
 		/* number of 32-bit chunks returned */
-- 
1.7.10.4
Received on Fri Apr 12 2013 - 10:28:43 CEST

This archive was generated by hypermail 2.3.0 : Fri Apr 12 2013 - 10:36:04 CEST