summaryrefslogtreecommitdiff
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);
}
}