sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 6a1b9e0e9f04fbd480c91bbbe739a8a6e12e401e
parent 7e35b78331d9f0b3fc7fcdcc9729ab7e1f49e715
Author: fpqc <harry.gindi@live.com>
Date:   Wed, 25 Jan 2017 13:08:02 -0500

Added osc52 patch

Diffstat:
Ast.suckless.org/patches/osc52.diff | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ast.suckless.org/patches/osc52.md | 21+++++++++++++++++++++
2 files changed, 117 insertions(+), 0 deletions(-)

diff --git a/st.suckless.org/patches/osc52.diff 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\007, + + st-256color| simpleterm with 256 colors, + use=st, diff --git a/st.suckless.org/patches/osc52.md 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 - <harry.gindi@live.com>