## Maximum amount of characters per line decl int autowrap_column 80 # remove the whitespaces selected by `autowrap-line` # and handle "recursive" calls when needed def -hidden _autowrap-cut-selection %{ try %{ # remove the whitespaces # then save the indentation of the original line and apply it to the new one exec -draft c K # if there's text after the current line, merge the two exec xX [^\n]\n[^\n] } eval autowrap-line } def autowrap-line -docstring "Wrap the current line" %{ eval -draft %{ try %{ # check that the line is too long and has to be wrapped exec " s^(?=.*\h).{%opt{autowrap_column}}[^\n]" try %{ # either select the trailing whitespaces, or the ones before the last word of the line exec s\h+(?=[^\h]+\')|\h+\' eval _autowrap-cut-selection } catch %{ try %{ # wrap the line on the first whitespace that's past the column limit exec "x s^[^\h]{%opt{autowrap_column},}\K\h+" eval _autowrap-cut-selection } } } } } def autowrap-enable -docstring "Wrap the lines in which characters are inserted" %{ hook -group autowrap window InsertChar [^\n] %{ eval autowrap-line } } def autowrap-disable -docstring "Disable automatic line wrapping" %{ rmhooks window autowrap }