Add -width <max_width>
support in the wrap highlighter
Will always wrap at the minimum between max_width and actual window width. Fixes #1424
This commit is contained in:
parent
acc2dbf79c
commit
eadf8930fb
|
@ -1251,7 +1251,8 @@ General highlighters are:
|
||||||
-hlcursor switch will highlight the cursor line with a separate face. With the
|
-hlcursor switch will highlight the cursor line with a separate face. With the
|
||||||
-separator switch one can specify a string to separate the line numbers column with
|
-separator switch one can specify a string to separate the line numbers column with
|
||||||
the rest of the buffer, default is `|`.
|
the rest of the buffer, default is `|`.
|
||||||
* `wrap \<-word>`: Soft wrap buffer content to window width, wrap at word boundaries if `-word` is specified.
|
* `wrap \<-word> \<-width <max_width>`: Soft wrap buffer content to the smallest of window width and
|
||||||
|
max_width. Wrap at word boundaries if `-word` is specified.
|
||||||
* `fill <face>`: fill using given face, mostly useful with <<regions-highlighters,Regions highlighters>>
|
* `fill <face>`: fill using given face, mostly useful with <<regions-highlighters,Regions highlighters>>
|
||||||
* `ranges <option_name>`: use the data in the range-specs option of the given name to highlight the buffer.
|
* `ranges <option_name>`: use the data in the range-specs option of the given name to highlight the buffer.
|
||||||
The string part of the is interpretted as a face to apply to the range.
|
The string part of the is interpretted as a face to apply to the range.
|
||||||
|
|
|
@ -90,6 +90,9 @@ General highlighters
|
||||||
*-word*:::
|
*-word*:::
|
||||||
wrap at word boundaries instead of codepoint boundaries.
|
wrap at word boundaries instead of codepoint boundaries.
|
||||||
|
|
||||||
|
*-width <max_width>*:::
|
||||||
|
wrap text at *max_width* if the window is wider.
|
||||||
|
|
||||||
*ranges* <option_name>::
|
*ranges* <option_name>::
|
||||||
use the data in the range-specs option of the given name to highlight
|
use the data in the range-specs option of the given name to highlight
|
||||||
the buffer. The string part of the is interpretted as a face to apply
|
the buffer. The string part of the is interpretted as a face to apply
|
||||||
|
|
|
@ -704,12 +704,13 @@ HighlighterAndId create_column_highlighter(HighlighterParameters params)
|
||||||
|
|
||||||
struct WrapHighlighter : Highlighter
|
struct WrapHighlighter : Highlighter
|
||||||
{
|
{
|
||||||
WrapHighlighter(bool word_wrap) : Highlighter{HighlightPass::Wrap}, m_word_wrap{word_wrap} {}
|
WrapHighlighter(ColumnCount max_width, bool word_wrap)
|
||||||
|
: Highlighter{HighlightPass::Wrap}, m__max_width{max_width}, m_word_wrap{word_wrap} {}
|
||||||
|
|
||||||
void do_highlight(const Context& context, HighlightPass pass,
|
void do_highlight(const Context& context, HighlightPass pass,
|
||||||
DisplayBuffer& display_buffer, BufferRange) override
|
DisplayBuffer& display_buffer, BufferRange) override
|
||||||
{
|
{
|
||||||
const ColumnCount wrap_column = context.window().range().column;
|
const ColumnCount wrap_column = std::min(m__max_width, context.window().range().column);
|
||||||
if (wrap_column <= 0)
|
if (wrap_column <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -759,7 +760,7 @@ struct WrapHighlighter : Highlighter
|
||||||
|
|
||||||
void do_compute_display_setup(const Context& context, HighlightPass, DisplaySetup& setup) override
|
void do_compute_display_setup(const Context& context, HighlightPass, DisplaySetup& setup) override
|
||||||
{
|
{
|
||||||
const ColumnCount wrap_column = setup.window_range.column;
|
const ColumnCount wrap_column = std::min(setup.window_range.column, m__max_width);
|
||||||
if (wrap_column <= 0)
|
if (wrap_column <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -862,15 +863,21 @@ struct WrapHighlighter : Highlighter
|
||||||
static HighlighterAndId create(HighlighterParameters params)
|
static HighlighterAndId create(HighlighterParameters params)
|
||||||
{
|
{
|
||||||
static const ParameterDesc param_desc{
|
static const ParameterDesc param_desc{
|
||||||
{ { "word", { false, "" } } },
|
{ { "word", { false, "" } },
|
||||||
|
{ "width", { true, "" } } },
|
||||||
ParameterDesc::Flags::None, 0, 0
|
ParameterDesc::Flags::None, 0, 0
|
||||||
};
|
};
|
||||||
ParametersParser parser(params, param_desc);
|
ParametersParser parser(params, param_desc);
|
||||||
|
|
||||||
return {"wrap", make_unique<WrapHighlighter>((bool)parser.get_switch("word"))};
|
ColumnCount max_width{std::numeric_limits<int>::max()};
|
||||||
|
if (auto width = parser.get_switch("width"))
|
||||||
|
max_width = str_to_int(*width);
|
||||||
|
|
||||||
|
return {"wrap", make_unique<WrapHighlighter>(max_width, (bool)parser.get_switch("word"))};
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool m_word_wrap;
|
const bool m_word_wrap;
|
||||||
|
const ColumnCount m__max_width;
|
||||||
};
|
};
|
||||||
|
|
||||||
void expand_tabulations(const Context& context, HighlightPass, DisplayBuffer& display_buffer, BufferRange)
|
void expand_tabulations(const Context& context, HighlightPass, DisplayBuffer& display_buffer, BufferRange)
|
||||||
|
@ -2002,8 +2009,8 @@ void register_highlighters()
|
||||||
registry.insert({
|
registry.insert({
|
||||||
"wrap",
|
"wrap",
|
||||||
{ WrapHighlighter::create,
|
{ WrapHighlighter::create,
|
||||||
"Parameters: [-word]\n"
|
"Parameters: [-word] [-width <max_width>]\n"
|
||||||
"Wrap lines to given column,\n"
|
"Wrap lines to window width, or max_width if given and window is wider,\n"
|
||||||
"wrap at word boundaries instead of codepoint boundaries if -word is given" } });
|
"wrap at word boundaries instead of codepoint boundaries if -word is given" } });
|
||||||
registry.insert({
|
registry.insert({
|
||||||
"ref",
|
"ref",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user