commit 6a1b9e0e9f04fbd480c91bbbe739a8a6e12e401e
Author: fpqc <[email protected]>
Date:   Wed Jan 25 13:08:02 2017 -0500

    Added osc52 patch

diff --git a/st.suckless.org/patches/osc52.diff 
b/st.suckless.org/patches/osc52.diff
new file mode 100644
index 0000000..e07a7b0
--- /dev/null
+++ b/st.suckless.org/patches/osc52.diff
@@ -0,0 +1,96 @@
+diff --git a/base64dec.c b/base64dec.c
+new file mode 100644
+index 0000000..3f75aab
+--- /dev/null
++++ b/base64dec.c
+@@ -0,0 +1,42 @@
++/*taken from libulz with permission*/
++
++static const char base64_tbl[64] = 
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
++
++inline int chrpos(int c) {
++      int i = 0;
++      for(;i<64;i++) if(base64_tbl[i] == c) return i;
++      return -1;
++}
++static size_t base64dec(void* dst, const char* src, size_t dst_len) {
++      const char* s = src;
++      unsigned char *d = dst;
++      size_t l = dst_len, o = 0;
++      int n = 0, cnt = 0, skip = 0;
++      if(l) for(;;) {
++              int p;
++              if(*s == '=') {
++                      skip++;
++                      if(skip > 2) return 0;
++                      p = 0;
++              } else if (!*s) {
++                      if(cnt % 4 != 0 || !l) return 0;
++                      *d++ = 0;
++                      return o;
++              } else if(skip) {
++                      return 0;
++              } else if((p = chrpos(*s)) == -1) return 0;
++              n = (n << 6) | p;
++              cnt++;
++              if(cnt % 4 == 0) {
++                      if(l < 3) return 0;
++                      *d++ = n >> 16;
++                      *d++ = n >> 8 & 0xff;
++                      *d++ = n & 0xff;
++                      l -= 3;
++                      o += 3-skip;
++                      n = 0;
++              }
++              s++;
++      }
++      return 0;
++}
+diff --git a/st.c b/st.c
+index fbcd9e0..54cceeb 100644
+--- a/st.c
++++ b/st.c
+@@ -32,7 +32,7 @@
+ #include <wchar.h>
+ 
+ #include "arg.h"
+-
++#include "base64dec.c"
+ char *argv0;
+ 
+ #define Glyph Glyph_
+@@ -2533,11 +2533,21 @@ strhandle(void)
+                       if (narg > 1)
+                               xsettitle(strescseq.args[1]);
+                       return;
+-              case 4: /* color set */
++              case 52:/*set tmux clipboard*/
++                      if (narg > 2){
++                              char *src=strescseq.args[2];
++                              size_t l = (strlen(src)/4)*3;
++                              char *buf=xmalloc(l+1);
++                              base64dec(buf, src, l);
++                              xsetsel(buf, CurrentTime);
++                      }
++                      return;
++                      case 4: /* color set */
+                       if (narg < 3)
+                               break;
+                       p = strescseq.args[2];
+                       /* FALLTHROUGH */
++
+               case 104: /* color reset, here p = NULL */
+                       j = (narg > 1) ? atoi(strescseq.args[1]) : -1;
+                       if (xsetcolorname(j, p)) {
+diff --git a/st.info b/st.info
+index 13cc8eb..0b928af 100644
+--- a/st.info
++++ b/st.info
+@@ -189,6 +189,7 @@ st| simpleterm,
+       Se,
+       Ss,
+       Tc,
++      Ms=\E]52;%p1%s;%p2%s,
+ 
+ st-256color| simpleterm with 256 colors,
+       use=st,
diff --git a/st.suckless.org/patches/osc52.md b/st.suckless.org/patches/osc52.md
new file mode 100644
index 0000000..d83fc92
--- /dev/null
+++ b/st.suckless.org/patches/osc52.md
@@ -0,0 +1,21 @@
+OSC-52 tmux clipboard
+=====
+
+Description
+-----------
+
+This patch adds OSC 52 control sequence support to st to support the syncing 
of tmux's clipboard to the X PRIMARY selection..
+
+Notes
+-----
+
+For remote tmux instances, you must update the terminfo with the included 
terminfo here. 
+Download
+--------
+
+ * [osc52.diff](osc52.diff)
+
+Authors
+-------
+
+ * fpqc - <[email protected]>


Reply via email to