pass window param to highlighters
This commit is contained in:
parent
6c290eff9a
commit
81ce4e4720
|
@ -20,14 +20,14 @@ class Window;
|
|||
// color, adding information text (line numbering for example) or replacing
|
||||
// buffer content (folding for example)
|
||||
|
||||
typedef std::function<void (DisplayBuffer& display_buffer)> HighlighterFunc;
|
||||
typedef std::function<void (const Window& window, DisplayBuffer& display_buffer)> HighlighterFunc;
|
||||
typedef std::pair<String, HighlighterFunc> HighlighterAndId;
|
||||
typedef memoryview<String> HighlighterParameters;
|
||||
|
||||
using HighlighterFactory = std::function<HighlighterAndId (const HighlighterParameters& params,
|
||||
Window& window)>;
|
||||
|
||||
using HighlighterGroup = FunctionGroup<DisplayBuffer&>;
|
||||
using HighlighterGroup = FunctionGroup<const Window&, DisplayBuffer&>;
|
||||
|
||||
struct HighlighterRegistry : FunctionRegistry<HighlighterFactory>,
|
||||
Singleton<HighlighterRegistry>
|
||||
|
|
|
@ -71,7 +71,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
void operator()(DisplayBuffer& display_buffer)
|
||||
void operator()(const Window&, DisplayBuffer& display_buffer)
|
||||
{
|
||||
update_cache_ifn(display_buffer.range());
|
||||
for (auto& match : m_cache_matches)
|
||||
|
@ -160,7 +160,7 @@ public:
|
|||
DynamicRegexHighlighter(const ColorSpec& colors, RegexGetter getter)
|
||||
: m_regex_getter(getter), m_colors(colors), m_colorizer(Regex(), m_colors) {}
|
||||
|
||||
void operator()(DisplayBuffer& display_buffer)
|
||||
void operator()(const Window& window, DisplayBuffer& display_buffer)
|
||||
{
|
||||
Regex regex = m_regex_getter();
|
||||
if (regex != m_last_regex)
|
||||
|
@ -170,7 +170,7 @@ public:
|
|||
m_colorizer = RegexColorizer{m_last_regex, m_colors};
|
||||
}
|
||||
if (not m_last_regex.empty())
|
||||
m_colorizer(display_buffer);
|
||||
m_colorizer(window, display_buffer);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -214,9 +214,9 @@ HighlighterAndId highlight_regex_option_factory(const HighlighterParameters para
|
|||
return {"hloption_" + option_name, DynamicRegexHighlighter<decltype(get_regex)>{colors, get_regex}};
|
||||
}
|
||||
|
||||
void expand_tabulations(const OptionManager& options, DisplayBuffer& display_buffer)
|
||||
void expand_tabulations(const Window& window, DisplayBuffer& display_buffer)
|
||||
{
|
||||
const int tabstop = options["tabstop"].get<int>();
|
||||
const int tabstop = window.options()["tabstop"].get<int>();
|
||||
for (auto& line : display_buffer.lines())
|
||||
{
|
||||
for (auto atom_it = line.begin(); atom_it != line.end(); ++atom_it)
|
||||
|
@ -258,9 +258,9 @@ void expand_tabulations(const OptionManager& options, DisplayBuffer& display_buf
|
|||
}
|
||||
}
|
||||
|
||||
void show_line_numbers(DisplayBuffer& display_buffer)
|
||||
void show_line_numbers(const Window& window, DisplayBuffer& display_buffer)
|
||||
{
|
||||
LineCount last_line = display_buffer.range().first.buffer().line_count();
|
||||
LineCount last_line = window.buffer().line_count();
|
||||
int digit_count = 0;
|
||||
for (LineCount c = last_line; c > 0; c /= 10)
|
||||
++digit_count;
|
||||
|
@ -301,7 +301,7 @@ void highlight_selections(const Window& window, DisplayBuffer& display_buffer)
|
|||
}
|
||||
}
|
||||
|
||||
void expand_unprintable(DisplayBuffer& display_buffer)
|
||||
void expand_unprintable(const Window&, DisplayBuffer& display_buffer)
|
||||
{
|
||||
for (auto& line : display_buffer.lines())
|
||||
{
|
||||
|
@ -345,7 +345,7 @@ public:
|
|||
update_shared_option_updater();
|
||||
}
|
||||
|
||||
void operator()(DisplayBuffer& display_buffer)
|
||||
void operator()(const Window&, DisplayBuffer& display_buffer)
|
||||
{
|
||||
update_shared_option_updater();
|
||||
auto& lines = m_window.options()[m_option_name].get<std::vector<LineAndFlag>>();
|
||||
|
@ -451,7 +451,7 @@ HighlighterAndId flag_lines_factory(const HighlighterParameters& params, Window&
|
|||
return {"hlflags_" + params[1], FlagLines{str_to_color(params[0]), params[1], window}};
|
||||
}
|
||||
|
||||
template<void (*highlighter_func)(DisplayBuffer&)>
|
||||
template<void (*highlighter_func)(const Window&, DisplayBuffer&)>
|
||||
class SimpleHighlighterFactory
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -13,8 +13,8 @@ namespace Kakoune
|
|||
|
||||
// Implementation in highlighters.cc
|
||||
void highlight_selections(const Window& window, DisplayBuffer& display_buffer);
|
||||
void expand_tabulations(const OptionManager& options, DisplayBuffer& display_buffer);
|
||||
void expand_unprintable(DisplayBuffer& display_buffer);
|
||||
void expand_tabulations(const Window& window, DisplayBuffer& display_buffer);
|
||||
void expand_unprintable(const Window& window, DisplayBuffer& display_buffer);
|
||||
|
||||
Window::Window(Buffer& buffer)
|
||||
: Editor(buffer),
|
||||
|
@ -25,9 +25,9 @@ Window::Window(Buffer& buffer)
|
|||
m_hooks.run_hook("WinCreate", buffer.name(), hook_context);
|
||||
m_options.register_watcher(*this);
|
||||
|
||||
m_builtin_highlighters.append({"tabulations", [this](DisplayBuffer& db) { expand_tabulations(m_options, db); }});
|
||||
m_builtin_highlighters.append({"tabulations", expand_tabulations});
|
||||
m_builtin_highlighters.append({"unprintable", expand_unprintable});
|
||||
m_builtin_highlighters.append({"selections", [this](DisplayBuffer& db) { highlight_selections(*this, db); }});
|
||||
m_builtin_highlighters.append({"selections", highlight_selections});
|
||||
|
||||
for (auto& option : m_options.flatten_options())
|
||||
on_option_changed(*option);
|
||||
|
@ -80,8 +80,8 @@ void Window::update_display_buffer()
|
|||
}
|
||||
|
||||
m_display_buffer.compute_range();
|
||||
m_highlighters(m_display_buffer);
|
||||
m_builtin_highlighters(m_display_buffer);
|
||||
m_highlighters(*this, m_display_buffer);
|
||||
m_builtin_highlighters(*this, m_display_buffer);
|
||||
m_display_buffer.optimize();
|
||||
|
||||
m_timestamp = buffer().timestamp();
|
||||
|
@ -134,8 +134,8 @@ void Window::scroll_to_keep_cursor_visible_ifn()
|
|||
lines.back().push_back(DisplayAtom(AtomContent(line_begin, line_end)));
|
||||
|
||||
display_buffer.compute_range();
|
||||
m_highlighters(display_buffer);
|
||||
m_builtin_highlighters(display_buffer);
|
||||
m_highlighters(*this, display_buffer);
|
||||
m_builtin_highlighters(*this, display_buffer);
|
||||
|
||||
// now we can compute where the cursor is in display columns
|
||||
// (this is only valid if highlighting one line and multiple lines put
|
||||
|
|
Loading…
Reference in New Issue
Block a user