summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--catgirl.13
-rw-r--r--chat.h1
-rw-r--r--edit.c11
-rw-r--r--ui.c1
4 files changed, 16 insertions, 0 deletions
diff --git a/catgirl.1 b/catgirl.1
index 62f373e..e9476b7 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -293,6 +293,9 @@ Delete line after cursor.
.It Aq Sy Tab
Cycle through completions
for commands, nicks and channels.
+.
+.It Sy M-?
+ROT13-encode line.
.El
.
.Ss IRC Formatting
diff --git a/chat.h b/chat.h
index 441056c..03f3251 100644
--- a/chat.h
+++ b/chat.h
@@ -162,6 +162,7 @@ enum Edit {
EditKillBackWord,
EditKillForeWord,
EditKillLine,
+ EditROT13,
EditComplete,
EditEnter,
};
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);
diff --git a/ui.c b/ui.c
index a4fedf5..fbbaae2 100644
--- a/ui.c
+++ b/ui.c
@@ -472,6 +472,7 @@ static void keyChar(wchar_t ch) {
break; case L'f': edit(ui.view->tag, EditForeWord, 0);
break; case L'\b': edit(ui.view->tag, EditKillBackWord, 0);
break; case L'd': edit(ui.view->tag, EditKillForeWord, 0);
+ break; case L'?': edit(ui.view->tag, EditROT13, 0);
break; case L'm': uiLog(ui.view->tag, UICold, L"");
break; default: {
if (ch >= L'0' && ch <= L'9') uiViewNum(ch - L'0');