selection: strip non-formatting C0, BS, HT and DEL from pasted text

This commit is contained in:
Daniel Eklöf 2021-01-23 11:22:22 +01:00
parent b31d0c080b
commit 357af41d7e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 19 additions and 0 deletions

View file

@ -61,6 +61,8 @@
* Extending a word/line-wise selection now uses the original selection
mode instead of switching to character-wise.
* The scrollback search box no longer accepts non-printable characters.
* Non-formatting C0 control characters, `BS`, `HT` and `DEL` are now
stripped from pasted text.
### Deprecated

View file

@ -1612,6 +1612,7 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
* Call cb while at same time replace:
* - \r\n -> \r
* - \n -> \r
* - C0 -> <nothing> (stript non-formatting C0 characters)
* - \e -> <nothing> (i.e. strip ESC)
*/
char *p = text;
@ -1627,6 +1628,7 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
break;
case '\r':
/* Convert \r\n -> \r */
if (i + 1 < left && p[i + 1] == '\n') {
ctx->decoder(ctx, p, i + 1);
@ -1637,6 +1639,21 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
}
break;
/* C0 non-formatting control characters (\b \t \n \r excluded) */
case '\x01': case '\x02': case '\x03': case '\x04': case '\x05':
case '\x06': case '\x07': case '\x0b': case '\x0c': case '\x0e':
case '\x0f': case '\x10': case '\x11': case '\x12': case '\x13':
case '\x14': case '\x15': case '\x16': case '\x17': case '\x18':
case '\x19': case '\x1a': case '\x1b': case '\x1c': case '\x1d':
case '\x1e': case '\x1f':
/* FALLTHROUGH */
/* Additional control characters stripped by default (but
* configurable) in XTerm: BS, HT, DEL */
case '\b': case '\t': case '\x1f':
/* FALLTHROUGH */
/* ESC */
case '\x1b':
ctx->decoder(ctx, p, i);