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: {
> Nothing must be executed when running /copy, et al. 2021-01-23Drop network capability after ircConnect()Klemens Nanni catgirl has no reconnect feature and generally must not do anything but read/write from/to the connected socket which does not require "inet" or "dns" promises. 2021-01-23Call pledge(2) after unveil(2)Klemens Nanni Simplify logic, be more idiomatic and finalize by pledging after all unveiling is done by omitting the "unveil" promise and thereby not allowing further calls to it. 2021-01-23Separate kiosk mode from restrict modeJune McEnroe Restrict mode will focus on sandboxing, while kiosk will continue to restrict IRC access through a public kiosk. Kiosk mode without restrict mode allows execution of man 1 catgirl with /help, assuming external sandboxing. The /list and /part commands are also added to the list of disabled commands in kiosk mode, since they are pointless without access to /join. 2021-01-21Simplify windowUpdate loops and factor out windowTopJune McEnroe No idea why I made that more complicated than it had to be looping backwards. 2021-01-21Document that M-l shows timestampsJune McEnroe 2021-01-19Don't lose swapped window when navigating to current bufferJeremy O'Brien 2021-01-19Use Warm heat for manually inserted blank linesJune McEnroe Oops, forgot about these. 2021-01-18Add example tmux(1) configKlemens Nanni Spawn one catgirl per network and handle reconnects through tmux, no extra tool required. 2021-01-17Use Warm heat for blank linesJune McEnroe So they're not hidden by M-+. 2021-01-16Add -I highlight option and /highlightJune McEnroe