| st-paste_controls-0.9.2.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| st-paste_controls-0.9.2.diff (1021B) | |
| --- | |
| 1 diff --git a/x.c b/x.c | |
| 2 index bd23686..254d3d0 100644 | |
| 3 --- a/x.c | |
| 4 +++ b/x.c | |
| 5 @@ -580,11 +580,33 @@ selnotify(XEvent *e) | |
| 6 * copy and pasting. When receiving some selection data, | |
| 7 * replace all '\n' with '\r'. | |
| 8 * FIXME: Fix the computer world. | |
| 9 + * | |
| 10 + * Also, replace most C0 control codes with spaces, exc… | |
| 11 + * HT and CR. Note that we are not replacing C1 control… | |
| 12 + * (0x80 to 0x9F), as these are possibly valid UTF-8 | |
| 13 + * continuation bytes. | |
| 14 */ | |
| 15 repl = data; | |
| 16 last = data + nitems * format / 8; | |
| 17 - while ((repl = memchr(repl, '\n', last - repl))) { | |
| 18 - *repl++ = '\r'; | |
| 19 + while (repl != last) { | |
| 20 + if (*repl <= 0x1f) { | |
| 21 + switch (*repl) { | |
| 22 + case 0x09: /* HT \t */ | |
| 23 + case 0x0D: /* CR \r */ | |
| 24 + repl++; | |
| 25 + break; | |
| 26 + case 0x0a: /* LF \n */ | |
| 27 + *repl++ = '\r'; | |
| 28 + break; | |
| 29 + default: | |
| 30 + *repl++ = ' '; | |
| 31 + break; | |
| 32 + }; | |
| 33 + } else if (*repl == 0x7f) { /* DEL */ | |
| 34 + *repl++ = ' '; | |
| 35 + } else { | |
| 36 + repl++; | |
| 37 + } | |
| 38 } | |
| 39 | |
| 40 if (IS_SET(MODE_BRCKTPASTE) && ofs == 0) |