---
base64dec.c | 42 ++++++++++++++++++++++++++++++++++++++++++
st.c | 10 +++++++++-
st.info | 1 +
3 files changed, 52 insertions(+), 1 deletion(-)
create mode 100644 base64dec.c
diff --git a/base64dec.c b/base64dec.c
new file mode 100644
index 0000000..3f75aab
--- /dev/null
+++ b/base64dec.c
_AT_@ -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..9a668c4 100644
--- a/st.c
+++ b/st.c
_AT_@ -32,7 +32,7 @@
#include <wchar.h>
#include "arg.h"
-
+#include "base64dec.c"
char *argv0;
#define Glyph Glyph_
_AT_@ -2538,6 +2538,14 @@ strhandle(void)
break;
p = strescseq.args[2];
/* FALLTHROUGH */
+ case 52:
+ 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);
+ }
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
_AT_@ -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,
--
2.11.0
Received on Wed Jan 18 2017 - 18:38:20 CET
This archive was generated by hypermail 2.3.0 : Wed Jan 18 2017 - 18:48:24 CET