Hello there,
I’d like to do something as
declare-option -docstring "The length of line" int linelength 80
add-highlighter shared/too-long regex "^[^\n]{%opt{linelength}}([^\n]*)$" 1:white,yellow
and use this in my filetype config
set-option buffer linelength 72
add-highlighter buffer/ ref too-long
But it seems that %opt{linelength} is expanded first with the value 80 and not 72.
Is it possible do to something like this ?
Thanks a lot!
I believe this happens because the option expansion occurs when the regex highlighter is intially defined, and not when you reference it in the buffer highlighter.
The only way I can think of to implement this sort of behavior is to define a command that defines the highlighter. Maybe something like this could work (warning: untested):
declare-option -docstring "The length of line" int linelength 80
define-command -docstring "Update the too-long highlighter" update-too-long %{
remove-highlighter buffer/too-long
add-highlighter buffer/too-long regex "^[^\n]{%opt{linelength}}([^\n]*)$" 1:white,yellow
}
You can then do something like this in your filetype config:
set-option buffer linelength 72
update-too-long
Yeah I think ref
only works when the highlighter is supposed to be the same everywhere it is referenced.
You can update the highlighter whenever the option is set:
hook global BufSetOption linelength=.* update-too-long
also WinSetOption
.
If I am not missing something, the dynregex
highlighter is exactly what you are looking for. It evaluates its argument dynamically, so you can use the following instead (note the single quotes):
add-highlighter shared/too-long dynregex '^[^\n]{%opt{linelength}}([^\n]*)$' 1:white,yellow
4 Likes
UwU this is perfeeeeect !