On Tue, Mar 10, 2015 at 05:18:49PM -0400, Greg Reagle wrote:
> It could go the other way and do a variant of Ctrl+C for copy and Ctrl+V
> for paste.  I wouldn't use them directly because the programs running in
> st probably need those keys.  So Alt+Ctrl+C/V or Shitf+Ctrl+C/V or
> Alt+C/V.
>
> Also, it could provide key bindings for both CUA and the other way.  I
> don't think that would complicate the code much.

Are you thinking of something like the attached?

diff --git a/config.def.h b/config.def.h
index cd9292a..667f334 100644
--- a/config.def.h
+++ b/config.def.h
@@ -120,7 +120,8 @@ static Shortcut shortcuts[] = {
 	{ MODKEY|ShiftMask,     XK_Next,        xzoom,          {.i = -1} },
 	{ MODKEY|ShiftMask,     XK_Home,        xzoomreset,     {.i =  0} },
 	{ ShiftMask,            XK_Insert,      selpaste,       {.i =  0} },
-	{ MODKEY|ShiftMask,     XK_Insert,      clippaste,      {.i =  0} },
+	{ ControlMask|ShiftMask,XK_C,           clipcopy,       {.i =  0} },
+	{ ControlMask|ShiftMask,XK_V,           clippaste,      {.i =  0} },
 	{ MODKEY,               XK_Num_Lock,    numlock,        {.i =  0} },
 };
 
diff --git a/st.c b/st.c
index 595a955..b969fc3 100644
--- a/st.c
+++ b/st.c
@@ -312,6 +312,7 @@ typedef struct {
 } Shortcut;
 
 /* function definitions used in config.h */
+static void clipcopy(const Arg *);
 static void clippaste(const Arg *);
 static void numlock(const Arg *);
 static void selpaste(const Arg *);
@@ -479,7 +480,6 @@ static void (*handler[LASTEvent])(XEvent *) = {
 	[MotionNotify] = bmotion,
 	[ButtonPress] = bpress,
 	[ButtonRelease] = brelease,
-	[SelectionClear] = selclear,
 	[SelectionNotify] = selnotify,
 	[SelectionRequest] = selrequest,
 };
@@ -1027,10 +1027,8 @@ selpaste(const Arg *dummy) {
 
 void
 clippaste(const Arg *dummy) {
-	Atom clipboard;
-
-	clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
-	XConvertSelection(xw.dpy, clipboard, sel.xtarget, XA_PRIMARY,
+	Atom clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
+	XConvertSelection(xw.dpy, clipboard, sel.xtarget, clipboard,
 			xw.win, CurrentTime);
 }
 
@@ -1079,15 +1077,16 @@ selrequest(XEvent *e) {
 
 void
 xsetsel(char *str) {
-	/* register the selection for both the clipboard and the primary */
-	Atom clipboard;
-
 	free(sel.clip);
 	sel.clip = str;
 
 	XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, CurrentTime);
+}
 
-	clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
+void
+clipcopy(const Arg *arg) {
+	/* sel.clip already set by xsetsel---can't copy without selecting. */
+	Atom clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
 	XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime);
 }
 
@@ -4051,4 +4050,3 @@ run:
 
 	return 0;
 }
-

Attachment: pgpVLyFCGCbPD.pgp
Description: PGP signature

Reply via email to