diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-02-11 10:47:28 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-02-11 12:09:10 +0100 |
| commit | 78f1da727768cc398a09939fdb8d325fdcdca863 (patch) | |
| tree | 05787dea98953d4690195625d5ebf4bd71c35b33 /vis-motions.c | |
| parent | a9db1caf19d34f13319a3ebf92100c2c92015582 (diff) | |
| download | vis-78f1da727768cc398a09939fdb8d325fdcdca863.tar.gz vis-78f1da727768cc398a09939fdb8d325fdcdca863.tar.xz | |
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.
Diffstat (limited to 'vis-motions.c')
| -rw-r--r-- | vis-motions.c | 9 |
1 files changed, 7 insertions, 2 deletions
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 */ |
