[dev] [st][PATCH 5/6] Add sequence for printing the current selection

From: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
Date: Thu, 6 Mar 2014 08:04:31 +0100

This is very usefull in order to can select what is sent
to the plumber.
---
 config.def.h |  1 +
 st.c         | 32 +++++++++++++++++++++++++++++---
 2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/config.def.h b/config.def.h
index 47018a3..58b470e 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -109,6 +109,7 @@ static Shortcut shortcuts[] = {
 	/* mask                 keysym          function        argument */
 	{ ControlMask,          XK_Print,       toggleprinter,  {.i =  0} },
 	{ ShiftMask,            XK_Print,       printscreen,    {.i =  0} },
+	{ XK_ANY_MOD,           XK_Print,       printsel,       {.i =  0} },
 	{ MODKEY|ShiftMask,     XK_Prior,       xzoom,          {.i = +1} },
 	{ MODKEY|ShiftMask,     XK_Next,        xzoom,          {.i = -1} },
 	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
diff --git a/st.c b/st.c
index 9f9c161..c97712c 100644
--- a/st.c
+++ b/st.c
_AT_@ -314,6 +314,7 @@ static void clippaste(const Arg *);
 static void numlock(const Arg *);
 static void selpaste(const Arg *);
 static void xzoom(const Arg *);
+static void printsel(const Arg *);
 static void printscreen(const Arg *) ;
 static void toggleprinter(const Arg *);
 
_AT_@ -359,6 +360,7 @@ static void strreset(void);
 
 static int tattrset(int);
 static void tprinter(char *s, size_t len);
+static void tdumpsel(void);
 static void tdumpline(int);
 static void tdump(void);
 static void tclearregion(int, int, int, int);
_AT_@ -435,6 +437,7 @@ static void selrequest(XEvent *);
 static void selinit(void);
 static void selsort(void);
 static inline bool selected(int, int);
+static char *getsel(void);
 static void selcopy(void);
 static void selscroll(int, int);
 static void selsnap(int, int *, int *, int);
_AT_@ -955,8 +958,8 @@ bpress(XEvent *e) {
 	}
 }
 
-void
-selcopy(void) {
+char *
+getsel(void) {
 	char *str, *ptr;
 	int x, y, bufsize, size, i, ex;
 	Glyph *gp, *last;
_AT_@ -1015,7 +1018,12 @@ selcopy(void) {
 		}
 		*ptr = 0;
 	}
-	xsetsel(str);
+	return str;
+}
+
+void
+selcopy(void) {
+	xsetsel(getsel());
 }
 
 void
_AT_@ -1994,6 +2002,9 @@ csihandle(void) {
 		case 1:
 			tdumpline(term.c.y);
 			break;
+		case 2:
+			tdumpsel();
+			break;
 		case 4:
 			term.mode &= ~MODE_PRINT;
 			break;
_AT_@ -2295,6 +2306,21 @@ printscreen(const Arg *arg) {
 }
 
 void
+printsel(const Arg *arg) {
+	tdumpsel();
+}
+
+void
+tdumpsel(void)
+{
+	char *ptr;
+
+	ptr = getsel();
+	tprinter(ptr, strlen(ptr));
+	free(ptr);
+}
+
+void
 tdumpline(int n) {
 	Glyph *bp, *end;
 
-- 
1.8.5.3
Received on Thu Mar 06 2014 - 08:04:31 CET

This archive was generated by hypermail 2.3.0 : Thu Mar 06 2014 - 08:12:41 CET