about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-12-16 17:19:06 -0500
committerJune McEnroe <june@causal.agency>2018-12-16 17:19:06 -0500
commit0b3d927e030876e20a5f408447ecf0238269a9eb (patch)
tree0210780c61cd8f2380f04b0a4af2af72c3d3d134
parentMove base64 back to pls.c (diff)
downloadcatgirl-0b3d927e030876e20a5f408447ecf0238269a9eb.tar.gz
catgirl-0b3d927e030876e20a5f408447ecf0238269a9eb.zip
Add M-? to apply ROT13
Diffstat (limited to '')
-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');
de9a61e2d6217a48fd49192&follow=1'>Match sh functions as TagJune McEnroe 2019-02-18Match Sh and Ss as Tag in mdocJune McEnroe 2019-02-18Match statics and typedefs as TagJune McEnroe 2019-02-18Clean up htmlHeaderJune McEnroe 2019-02-18Remove hi line numberingJune McEnroe Tags are much better for referring to specific parts of a file and line numbering is better done by a post-processing tool such as cat -n or producing a two-column HTML <table>. 2019-02-18Add Tag class to hiJune McEnroe 2019-02-17Generate HTML with hi -n -f html -o anchorJune McEnroe Running hi twice to insert stuff between the head and the content is a bit of a hack but oh well. 2019-02-17Add hi -f html -o anchor for line number linksJune McEnroe 2019-02-17Simplify temp trap in upJune McEnroe 2019-02-17Add line numbers to hiJune McEnroe Renames previous -n option to -m to stay consistent with cat -n. Prefixing lines with line numbers affects where the first tab indent ends up relative to the text above it. Not sure if it's worth fixing somehow. 2019-02-17Always split spans after newlinesJune McEnroe Simplifies ANSI and IRC output code, and prepares for line numbered output. 2019-02-15Color format specifiers light cyan in vimJune McEnroe 2019-02-15Highlight Interp as yellowJune McEnroe 2019-02-15Highlight strings in sh command substitutionsJune McEnroe 2019-02-15Add nmap gpJune McEnroe 2019-02-14Avoid newline when copying URL to pasteboardJune McEnroe 2019-02-13Add forgotten "sixth" book of H2G2June McEnroe