Add M-? to apply ROT13

master
Curtis McEnroe 2018-12-16 17:19:06 -05:00
parent ef916ddaff
commit 0b3d927e03
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
4 changed files with 16 additions and 0 deletions

View File

@ -293,6 +293,9 @@ Delete line after cursor.
.It Aq Sy Tab .It Aq Sy Tab
Cycle through completions Cycle through completions
for commands, nicks and channels. for commands, nicks and channels.
.
.It Sy M-?
ROT13-encode line.
.El .El
. .
.Ss IRC Formatting .Ss IRC Formatting

1
chat.h
View File

@ -162,6 +162,7 @@ enum Edit {
EditKillBackWord, EditKillBackWord,
EditKillForeWord, EditKillForeWord,
EditKillLine, EditKillLine,
EditROT13,
EditComplete, EditComplete,
EditEnter, EditEnter,
}; };

11
edit.c
View File

@ -19,6 +19,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <sysexits.h> #include <sysexits.h>
#include <wchar.h> #include <wchar.h>
#include <wctype.h>
#include "chat.h" #include "chat.h"
@ -94,6 +95,14 @@ static void killForeWord(void) {
line.ptr = from; 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 char *prefix;
static void complete(struct Tag tag) { static void complete(struct Tag tag) {
if (!line.tab) { 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 EditKillForeWord: reject(); killForeWord();
break; case EditKillLine: reject(); line.end = line.ptr; break; case EditKillLine: reject(); line.end = line.ptr;
break; case EditROT13: accept(); rot13();
break; case EditComplete: complete(tag); break; case EditComplete: complete(tag);
break; case EditEnter: accept(); enter(tag); break; case EditEnter: accept(); enter(tag);

1
ui.c
View File

@ -472,6 +472,7 @@ static void keyChar(wchar_t ch) {
break; case L'f': edit(ui.view->tag, EditForeWord, 0); break; case L'f': edit(ui.view->tag, EditForeWord, 0);
break; case L'\b': edit(ui.view->tag, EditKillBackWord, 0); break; case L'\b': edit(ui.view->tag, EditKillBackWord, 0);
break; case L'd': edit(ui.view->tag, EditKillForeWord, 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; case L'm': uiLog(ui.view->tag, UICold, L"");
break; default: { break; default: {
if (ch >= L'0' && ch <= L'9') uiViewNum(ch - L'0'); if (ch >= L'0' && ch <= L'9') uiViewNum(ch - L'0');