diff options
author | June McEnroe <june@causal.agency> | 2018-12-16 17:19:06 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-12-16 17:19:06 -0500 |
commit | 0b3d927e030876e20a5f408447ecf0238269a9eb (patch) | |
tree | 0210780c61cd8f2380f04b0a4af2af72c3d3d134 /edit.c | |
parent | Move base64 back to pls.c (diff) | |
download | catgirl-0b3d927e030876e20a5f408447ecf0238269a9eb.tar.gz catgirl-0b3d927e030876e20a5f408447ecf0238269a9eb.zip |
Add M-? to apply ROT13
Diffstat (limited to 'edit.c')
-rw-r--r-- | edit.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/edit.c b/edit.c index 88301f6..93cba12 100644 --- a/edit.c +++ b/edit.c @@ -19,6 +19,7 @@ #include <stdlib.h> #include <sysexits.h> #include <wchar.h> +#include <wctype.h> #include "chat.h" @@ -94,6 +95,14 @@ static void killForeWord(void) { line.ptr = from; } +static void rot13(void) { + for (wchar_t *ch = line.buf; ch != line.end; ++ch) { + if (!iswascii(*ch)) continue; + if (iswupper(*ch)) *ch = L'A' + (*ch - L'A' + 13) % 26; + if (iswlower(*ch)) *ch = L'a' + (*ch - L'a' + 13) % 26; + } +} + static char *prefix; static void complete(struct Tag tag) { if (!line.tab) { @@ -175,6 +184,8 @@ void edit(struct Tag tag, enum Edit op, wchar_t ch) { break; case EditKillForeWord: reject(); killForeWord(); break; case EditKillLine: reject(); line.end = line.ptr; + break; case EditROT13: accept(); rot13(); + break; case EditComplete: complete(tag); break; case EditEnter: accept(); enter(tag); |