summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--catgirl.14
-rw-r--r--chat.h2
-rw-r--r--edit.c17
-rw-r--r--ui.c7
4 files changed, 26 insertions, 4 deletions
diff --git a/catgirl.1 b/catgirl.1
index 9cb208e..6f8256b 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -211,8 +211,12 @@ Move right.
 Delete to end of line.
 .It Ic C-u
 Delete to beginning of line.
+.It Ic C-w
+Delete previous word.
 .It Ic M-b
 Move to previous word.
+.It Ic M-d
+Delete next word.
 .It Ic M-f
 Move to next word.
 .El
diff --git a/chat.h b/chat.h
index ac56f51..fc18b15 100644
--- a/chat.h
+++ b/chat.h
@@ -155,6 +155,8 @@ enum Edit {
 	EditDeleteTail,
 	EditDeletePrev,
 	EditDeleteNext,
+	EditDeletePrevWord,
+	EditDeleteNextWord,
 	EditInsert,
 	EditComplete,
 	EditEnter,
diff --git a/edit.c b/edit.c
index 7b20079..47478ec 100644
--- a/edit.c
+++ b/edit.c
@@ -146,10 +146,23 @@ void edit(size_t id, enum Edit op, wchar_t ch) {
 			while (pos < len && buf[pos] != L' ') pos++;
 		}
 
-		break; case EditDeletePrev: if (pos) delete(--pos, 1);
-		break; case EditDeleteNext: delete(pos, 1);
 		break; case EditDeleteHead: delete(0, pos); pos = 0;
 		break; case EditDeleteTail: delete(pos, len - pos);
+		break; case EditDeletePrev: if (pos) delete(--pos, 1);
+		break; case EditDeleteNext: delete(pos, 1);
+		break; case EditDeletePrevWord: {
+			if (!pos) break;
+			size_t word = pos - 1;
+			while (word && buf[word - 1] != L' ') word--;
+			delete(word, pos - word);
+			pos = word;
+		}
+		break; case EditDeleteNextWord: {
+			if (pos == len) break;
+			size_t word = pos + 1;
+			while (word < len && buf[word] != L' ') word++;
+			delete(pos, word - pos);
+		}
 
 		break; case EditInsert: {
 			reserve(pos, 1);
diff --git a/ui.c b/ui.c
index e3b9cb5..65b4760 100644
--- a/ui.c
+++ b/ui.c
@@ -192,8 +192,9 @@ static void errExit(void) {
 	X(KeyMeta7, "\0337") \
 	X(KeyMeta8, "\0338") \
 	X(KeyMeta9, "\0339") \
-	X(KeyMetaB, "\033b") \
-	X(KeyMetaF, "\033f") \
+	X(KeyMetaB, "\33b") \
+	X(KeyMetaD, "\33d") \
+	X(KeyMetaF, "\33f") \
 	X(KeyMetaM, "\33m") \
 	X(KeyFocusIn, "\33[I") \
 	X(KeyFocusOut, "\33[O") \
@@ -625,6 +626,7 @@ static void keyCode(int code) {
 		break; case KeyPasteOff:; // TODO
 
 		break; case KeyMetaB: edit(id, EditPrevWord, 0);
+		break; case KeyMetaD: edit(id, EditDeleteNextWord, 0);
 		break; case KeyMetaF: edit(id, EditNextWord, 0);
 		break; case KeyMetaM: waddch(windows.active->pad, '\n');
 
@@ -659,6 +661,7 @@ static void keyCtrl(wchar_t ch) {
 		break; case L'K': edit(id, EditDeleteTail, 0);
 		break; case L'L': clearok(curscr, true);
 		break; case L'U': edit(id, EditDeleteHead, 0);
+		break; case L'W': edit(id, EditDeletePrevWord, 0);
 	}
 }
 
7bcc7c4067c1244&follow=1'>Replace nerdcommenter with vim-commentaryJune McEnroe 2013-03-24Add paredit.vimJune McEnroe 2013-03-14Update base16-vimJune McEnroe It's still crap 2013-03-12Hide mode from below statuslineJune McEnroe 2013-03-12Switch to powerlineJune McEnroe Which I'm not going to bother configuring because it thinks it's all fancy and for other things that aren't Vim so it stores its config file in ~/.config which I keep in a different repo and I only want to use it for Vim so fuck you, Powerline. </rant> 2013-03-12Remove vim-powerlineJune McEnroe 2013-02-03Update base16 and refheapJune McEnroe 2013-02-03Ignore plugin/private.vimJune McEnroe 2012-09-29Disable GUI dialogsJune McEnroe