Add sequence for printing the current selection

This is very usefull in order to can select what is sent
to the plumber.
This commit is contained in:
Roberto E. Vargas Caballero 2014-02-01 13:41:58 +01:00
parent 96c230e476
commit 78f8843bc7
2 changed files with 30 additions and 3 deletions

View file

@ -109,6 +109,7 @@ static Shortcut shortcuts[] = {
/* mask keysym function argument */ /* mask keysym function argument */
{ ControlMask, XK_Print, toggleprinter, {.i = 0} }, { ControlMask, XK_Print, toggleprinter, {.i = 0} },
{ ShiftMask, XK_Print, printscreen, {.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_Prior, xzoom, {.i = +1} },
{ MODKEY|ShiftMask, XK_Next, xzoom, {.i = -1} }, { MODKEY|ShiftMask, XK_Next, xzoom, {.i = -1} },
{ ShiftMask, XK_Insert, selpaste, {.i = 0} }, { ShiftMask, XK_Insert, selpaste, {.i = 0} },

32
st.c
View file

@ -314,6 +314,7 @@ static void clippaste(const Arg *);
static void numlock(const Arg *); static void numlock(const Arg *);
static void selpaste(const Arg *); static void selpaste(const Arg *);
static void xzoom(const Arg *); static void xzoom(const Arg *);
static void printsel(const Arg *);
static void printscreen(const Arg *) ; static void printscreen(const Arg *) ;
static void toggleprinter(const Arg *); static void toggleprinter(const Arg *);
@ -359,6 +360,7 @@ static void strreset(void);
static int tattrset(int); static int tattrset(int);
static void tprinter(char *s, size_t len); static void tprinter(char *s, size_t len);
static void tdumpsel(void);
static void tdumpline(int); static void tdumpline(int);
static void tdump(void); static void tdump(void);
static void tclearregion(int, int, int, int); static void tclearregion(int, int, int, int);
@ -435,6 +437,7 @@ static void selrequest(XEvent *);
static void selinit(void); static void selinit(void);
static void selsort(void); static void selsort(void);
static inline bool selected(int, int); static inline bool selected(int, int);
static char *getsel(void);
static void selcopy(void); static void selcopy(void);
static void selscroll(int, int); static void selscroll(int, int);
static void selsnap(int, int *, int *, int); static void selsnap(int, int *, int *, int);
@ -955,8 +958,8 @@ bpress(XEvent *e) {
} }
} }
void char *
selcopy(void) { getsel(void) {
char *str, *ptr; char *str, *ptr;
int x, y, bufsize, size, i, ex; int x, y, bufsize, size, i, ex;
Glyph *gp, *last; Glyph *gp, *last;
@ -1015,7 +1018,12 @@ selcopy(void) {
} }
*ptr = 0; *ptr = 0;
} }
xsetsel(str); return str;
}
void
selcopy(void) {
xsetsel(getsel());
} }
void void
@ -1994,6 +2002,9 @@ csihandle(void) {
case 1: case 1:
tdumpline(term.c.y); tdumpline(term.c.y);
break; break;
case 2:
tdumpsel();
break;
case 4: case 4:
term.mode &= ~MODE_PRINT; term.mode &= ~MODE_PRINT;
break; break;
@ -2294,6 +2305,21 @@ printscreen(const Arg *arg) {
tdump(); tdump();
} }
void
printsel(const Arg *arg) {
tdumpsel();
}
void
tdumpsel(void)
{
char *ptr;
ptr = getsel();
tprinter(ptr, strlen(ptr));
free(ptr);
}
void void
tdumpline(int n) { tdumpline(int n) {
Glyph *bp, *end; Glyph *bp, *end;