diff options
| -rw-r--r-- | catgirl.1 | 3 | ||||
| -rw-r--r-- | chat.h | 1 | ||||
| -rw-r--r-- | edit.c | 11 | ||||
| -rw-r--r-- | ui.c | 1 | 
4 files changed, 16 insertions, 0 deletions
@@ -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 @@ -162,6 +162,7 @@ enum Edit {  	EditKillBackWord,  	EditKillForeWord,  	EditKillLine, +	EditROT13,  	EditComplete,  	EditEnter,  }; @@ -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); @@ -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');  | 
