diff options
| -rw-r--r-- | catgirl.1 | 4 | ||||
| -rw-r--r-- | chat.h | 2 | ||||
| -rw-r--r-- | edit.c | 17 | ||||
| -rw-r--r-- | ui.c | 7 | 
4 files changed, 26 insertions, 4 deletions
@@ -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 @@ -155,6 +155,8 @@ enum Edit {  	EditDeleteTail,  	EditDeletePrev,  	EditDeleteNext, +	EditDeletePrevWord, +	EditDeleteNextWord,  	EditInsert,  	EditComplete,  	EditEnter, @@ -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); @@ -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);  	}  }  | 
