Trim whitespace from spell check word length variable
Due to ambiguity in the POSIX standard, GNU and BSD versions of the `wc` utility use slightly different whitespace conventions when formatting their output [1]. When limiting the output to just counting the number of bytes (as is done by Kakoune when calculating the length of words for spell check highlighting), the BSD version of `wc -c` has some additional leading whitespace: gnu$ printf %s "test" | wc -c 4 bsd$ printf %s "test" | wc -c 4 This leading whitespace needs to be removed before defining the "region" to highlight, or `set-option` will not be able to parse the given `spell_regions` and will complain that there are "not enough elements in tuple." In other words, the region `1.21+8|Error` on Linux ends up looking like `1.21+ 8|Error` on macOS, which is invalid. Removing the whitespace could be accomplished in a number of ways, but using arithmetic expansion [2] is POSIX compliant and does not require shelling out to another process. [1]: https://unix.stackexchange.com/questions/205906/extra-space-with-counted-line-number [2]: https://mywiki.wooledge.org/ArithmeticExpression
This commit is contained in:
parent
1ebea85e6f
commit
3a401f0771
|
@ -41,7 +41,8 @@ Formats of language supported:
|
||||||
pos=$(printf %s\\n "$line" | cut -d ' ' -f 3)
|
pos=$(printf %s\\n "$line" | cut -d ' ' -f 3)
|
||||||
fi
|
fi
|
||||||
word=$(printf %s\\n "$line" | cut -d ' ' -f 2)
|
word=$(printf %s\\n "$line" | cut -d ' ' -f 2)
|
||||||
len=$(printf %s "$word" | wc -c)
|
# trim whitespace to make `wc` output consistent across implementations
|
||||||
|
len=$(($(printf %s "$word" | wc -c)))
|
||||||
regions="$regions $line_num.$pos+${len}|Error"
|
regions="$regions $line_num.$pos+${len}|Error"
|
||||||
;;
|
;;
|
||||||
'') line_num=$((line_num + 1));;
|
'') line_num=$((line_num + 1));;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user