summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--catgirl.14
-rw-r--r--chat.h2
-rw-r--r--edit.c8
-rw-r--r--ui.c4
4 files changed, 18 insertions, 0 deletions
diff --git a/catgirl.1 b/catgirl.1
index a356fe0..9cb208e 100644
--- a/catgirl.1
+++ b/catgirl.1
@@ -211,6 +211,10 @@ Move right.
Delete to end of line.
.It Ic C-u
Delete to beginning of line.
+.It Ic M-b
+Move to previous word.
+.It Ic M-f
+Move to next word.
.El
.
.Ss Window Keys
diff --git a/chat.h b/chat.h
index aa1bcc1..6b68eae 100644
--- a/chat.h
+++ b/chat.h
@@ -149,6 +149,8 @@ enum Edit {
EditTail,
EditPrev,
EditNext,
+ EditPrevWord,
+ EditNextWord,
EditKillPrev,
EditKillNext,
EditDeletePrev,
diff --git a/edit.c b/edit.c
index 7fcff40..38b2dea 100644
--- a/edit.c
+++ b/edit.c
@@ -137,6 +137,14 @@ void edit(size_t id, enum Edit op, wchar_t ch) {
break; case EditTail: pos = len;
break; case EditPrev: if (pos) pos--;
break; case EditNext: if (pos < len) pos++;
+ break; case EditPrevWord: {
+ if (pos) pos--;
+ while (pos && buf[pos - 1] != L' ') pos--;
+ }
+ break; case EditNextWord: {
+ if (pos < len) pos++;
+ while (pos < len && buf[pos] != L' ') pos++;
+ }
break; case EditDeletePrev: if (pos) delete(--pos, 1);
break; case EditDeleteNext: delete(pos, 1);
diff --git a/ui.c b/ui.c
index d83a1f3..7811e88 100644
--- a/ui.c
+++ b/ui.c
@@ -192,6 +192,8 @@ static void errExit(void) {
X(KeyMeta7, "\0337") \
X(KeyMeta8, "\0338") \
X(KeyMeta9, "\0339") \
+ X(KeyMetaB, "\033b") \
+ X(KeyMetaF, "\033f") \
X(KeyMetaM, "\33m") \
X(KeyFocusIn, "\33[I") \
X(KeyFocusOut, "\33[O") \
@@ -622,6 +624,8 @@ static void keyCode(int code) {
break; case KeyPasteOn:; // TODO
break; case KeyPasteOff:; // TODO
+ break; case KeyMetaB: edit(id, EditPrevWord, 0);
+ break; case KeyMetaF: edit(id, EditNextWord, 0);
break; case KeyMetaM: waddch(windows.active->pad, '\n');
break; case KEY_BACKSPACE: edit(id, EditDeletePrev, 0);