diff options
author | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2014-02-01 13:41:58 +0100 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2014-03-06 07:55:07 +0100 |
commit | 78f8843bc7d6dc731f23d5ff3a8536fdcc5e4be6 (patch) | |
tree | 14f30649bc8b478258b37353ea190425f4e5be6a | |
parent | 96c230e476a4fb446a8fa8d651c88fda32cd5427 (diff) | |
download | st-78f8843bc7d6dc731f23d5ff3a8536fdcc5e4be6.tar.gz st-78f8843bc7d6dc731f23d5ff3a8536fdcc5e4be6.tar.bz2 st-78f8843bc7d6dc731f23d5ff3a8536fdcc5e4be6.zip |
Add sequence for printing the current selection
This is very usefull in order to can select what is sent
to the plumber.
-rw-r--r-- | config.def.h | 1 | ||||
-rw-r--r-- | 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 @@ -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} }, @@ -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 *); @@ -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); @@ -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); @@ -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; @@ -1015,7 +1018,12 @@ selcopy(void) { } *ptr = 0; } - xsetsel(str); + return str; +} + +void +selcopy(void) { + xsetsel(getsel()); } void @@ -1994,6 +2002,9 @@ csihandle(void) { case 1: tdumpline(term.c.y); break; + case 2: + tdumpsel(); + break; case 4: term.mode &= ~MODE_PRINT; break; @@ -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; |