There are many different space characters in unicode, and even more punctuation characters. Instead of having people list them all in configuration as delimiters for double-click selection, consider all 'punct' and 'space' class characters delimiters by default (unless explicitly configured not to be).
This applies on top of my previous diff to use wcschr() instead of utf8strchr(). >From ce6e5aa60965f9446ee1fe08e17d1c65594ffa2f Mon Sep 17 00:00:00 2001 From: Lauri Tirkkonen <[email protected]> Date: Wed, 13 Mar 2019 17:15:04 +0200 Subject: [PATCH] use iswspace()/iswpunct() to find word delimiters this inverts the configuration logic: you no longer provide a list of delimiters -- all space and punctuation characters are considered delimiters, unless listed in extrawordchars. --- config.def.h | 7 ++++--- st.c | 3 ++- st.h | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/config.def.h b/config.def.h index 482901e..9ce45a7 100644 --- a/config.def.h +++ b/config.def.h @@ -28,11 +28,12 @@ static float cwscale = 1.0; static float chscale = 1.0; /* - * word delimiter string + * all space and punctuation characters are considered word delimiters, unless + * listed here. * - * More advanced example: L" `'\"()[]{}" + * More advanced example: L"#$%&+,-./:=?_~" */ -wchar_t *worddelimiters = L" "; +wchar_t *extrawordchars = L"./:"; /* selection timeouts (in milliseconds) */ static unsigned int doubleclicktimeout = 300; diff --git a/st.c b/st.c index 812f30c..c383b43 100644 --- a/st.c +++ b/st.c @@ -16,6 +16,7 @@ #include <termios.h> #include <unistd.h> #include <wchar.h> +#include <wctype.h> #include "st.h" #include "win.h" @@ -41,7 +42,7 @@ #define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177') #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) -#define ISDELIM(u) (u != 0 && wcschr(worddelimiters, u) != NULL) +#define ISDELIM(u) ((iswspace(u) || iswpunct(u)) && wcschr(extrawordchars, u) == NULL) enum term_mode { MODE_WRAP = 1 << 0, diff --git a/st.h b/st.h index 4da3051..a3b19de 100644 --- a/st.h +++ b/st.h @@ -114,7 +114,7 @@ char *xstrdup(char *); extern char *utmp; extern char *stty_args; extern char *vtiden; -extern wchar_t *worddelimiters; +extern wchar_t *extrawordchars; extern int allowaltscreen; extern char *termname; extern unsigned int tabspaces; -- 2.20.1 -- Lauri Tirkkonen | lotheac @ IRCnet
