summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--edit.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/edit.c b/edit.c
index 71c5cca..9aa1c86 100644
--- a/edit.c
+++ b/edit.c
@@ -207,6 +207,10 @@ static void tabReject(void) {
 	tab.len = 0;
 }
 
+static bool isword(wchar_t ch) {
+	return !iswspace(ch) && !iswpunct(ch);
+}
+
 void edit(uint id, enum Edit op, wchar_t ch) {
 	size_t init = pos;
 	switch (op) {
@@ -215,12 +219,12 @@ void edit(uint id, enum Edit op, wchar_t ch) {
 		break; case EditPrev: if (pos) pos--;
 		break; case EditNext: if (pos < len) pos++;
 		break; case EditPrevWord: {
-			if (pos) pos--;
-			while (pos && !iswspace(buf[pos - 1])) pos--;
+			while (pos && !isword(buf[pos - 1])) pos--;
+			while (pos && isword(buf[pos - 1])) pos--;
 		}
 		break; case EditNextWord: {
-			if (pos < len) pos++;
-			while (pos < len && !iswspace(buf[pos])) pos++;
+			while (pos < len && !isword(buf[pos])) pos++;
+			while (pos < len && isword(buf[pos])) pos++;
 		}
 
 		break; case EditDeleteHead: delete(true, 0, pos); pos = 0;
@@ -229,15 +233,17 @@ void edit(uint id, enum Edit op, wchar_t ch) {
 		break; case EditDeleteNext: delete(false, pos, 1);
 		break; case EditDeletePrevWord: {
 			if (!pos) break;
-			size_t word = pos - 1;
-			while (word && !iswspace(buf[word - 1])) word--;
+			size_t word = pos;
+			while (word && !isword(buf[word - 1])) word--;
+			while (word && isword(buf[word - 1])) word--;
 			delete(true, word, pos - word);
 			pos = word;
 		}
 		break; case EditDeleteNextWord: {
 			if (pos == len) break;
-			size_t word = pos + 1;
-			while (word < len && !iswspace(buf[word])) word++;
+			size_t word = pos;
+			while (word < len && !isword(buf[word])) word++;
+			while (word < len && isword(buf[word])) word++;
 			delete(true, pos, word - pos);
 		}
 		break; case EditPaste: {
15bd0b4c2ce6c6&follow=1'>Spawn non-login shells in iTermJune McEnroe 2016-01-28Remove linux gvim aliasJune McEnroe 2016-01-28Rewrite zshrcJune McEnroe 2016-01-28Strip out useless commentsJune McEnroe 2016-01-28Trim tmux configurationJune McEnroe 2016-01-28Remove psql format wrappedJune McEnroe 2016-01-25Wow, that is so annoying, gitJune McEnroe 2016-01-25Clean up .gitconfigJune McEnroe 2016-01-15Remove gitignoreJune McEnroe 2016-01-15Eliminate escape key delay in zshJune McEnroe 2016-01-15Move pretty git log format to .gitconfigJune McEnroe 2016-01-14Remove unused git aliasesJune McEnroe 2016-01-06Hash SSH known hostsJune McEnroe 2015-12-30Ignore directory .swp filesJune McEnroe 2015-12-16Color prompt yellow in vi normal modeJune McEnroe 2015-11-23Remove colorcolumn at 120June McEnroe 2015-11-23Always git rebase --autosquashJune McEnroe 2015-11-18Add inverted shift to KarabinerJune McEnroe 2015-11-06Clean up git configsJune McEnroe 2015-11-06Add prune scriptJune McEnroe 2015-11-03Update vendored Gruvbox colorschemeJune McEnroe 2015-11-02Redefine _newline_precmd in _newline_precmdJune McEnroe 2015-11-02Print newline before every prompt after firstJune McEnroe 2015-11-02Remove first prompt placementJune McEnroe 2015-11-02Newline before prompt and start at bottom of terminalJune McEnroe 2015-10-27Add chruby to zshrcJune McEnroe