From 78f1da727768cc398a09939fdb8d325fdcdca863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 11 Feb 2016 10:47:28 +0100 Subject: vis: try to make * and # motions work on more systems The used regular expression \<%s\> where %s refers to the search term/word under cursor is not POSIX compliant but happens to work on both musl and glibc. First try the alternate syntax [[:<:]]%s[[:>:]] which works on Mac OS X. The reason it is done in this order is that musl/glibc will reject it as invalid pattern when compiling while the Mac OS X libc will accept \<%s\> but not match anything. Based on a patch by Erlend Fagerheim. --- vis-motions.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'vis-motions.c') diff --git a/vis-motions.c b/vis-motions.c index 91224b5..63cb0dc 100644 --- a/vis-motions.c +++ b/vis-motions.c @@ -16,9 +16,14 @@ static bool search_word(Vis *vis, Text *txt, size_t pos) { char *buf = text_bytes_alloc0(txt, word.start, text_range_size(&word)); if (!buf) return false; - snprintf(expr, sizeof(expr), "\\<%s\\>", buf); + snprintf(expr, sizeof(expr), "[[:<:]]%s[[:>:]]", buf); + bool ret = text_regex_compile(vis->search_pattern, expr, REG_EXTENDED) == 0; + if (!ret) { + snprintf(expr, sizeof(expr), "\\<%s\\>", buf); + ret = text_regex_compile(vis->search_pattern, expr, REG_EXTENDED) == 0; + } free(buf); - return text_regex_compile(vis->search_pattern, expr, REG_EXTENDED) == 0; + return ret; } /** motion implementations */ -- cgit v1.2.3