Change mode_info to contain an optional NormalParams

As @topisani pointed out in #5131, it is more user friendly to always
provide a %val{register} and %val{count} regardless of the mode.
This commit is contained in:
Maxime Coste 2024-04-01 11:03:22 +11:00
parent cc935c8cc6
commit 917db454d9
3 changed files with 9 additions and 5 deletions

View File

@ -165,12 +165,16 @@ DisplayLine Client::generate_mode_line() const
DisplayLine modeline; DisplayLine modeline;
try try
{ {
ModeInfo mode_info = context().client().input_handler().mode_info(); auto [mode_info_line, normal_params] = context().client().input_handler().mode_info();
const String& modelinefmt = context().options()["modelinefmt"].get<String>(); const String& modelinefmt = context().options()["modelinefmt"].get<String>();
HashMap<String, DisplayLine> atoms{{ "mode_info", mode_info.display_line}, HashMap<String, DisplayLine> atoms{{ "mode_info", mode_info_line},
{ "context_info", {generate_context_info(context()), { "context_info", {generate_context_info(context()),
context().faces()["Information"]}}}; context().faces()["Information"]}}};
auto expanded = expand(modelinefmt, context(), {{}, mode_info.env_vars}, ShellContext shell_context{{}, {
{"register", normal_params ? StringView{normal_params->reg}.str() : ""},
{"count", normal_params ? String{to_string(normal_params->count)} : ""},
}};
auto expanded = expand(modelinefmt, context(), shell_context,
[](String s) { return escape(s, '{', '\\'); }); [](String s) { return escape(s, '{', '\\'); });
modeline = parse_display_line(expanded, context().faces(), atoms); modeline = parse_display_line(expanded, context().faces(), atoms);
} }

View File

@ -390,7 +390,7 @@ public:
atoms.emplace_back(" reg=", context().faces()["StatusLineInfo"]); atoms.emplace_back(" reg=", context().faces()["StatusLineInfo"]);
atoms.emplace_back(StringView(m_params.reg).str(), context().faces()["StatusLineValue"]); atoms.emplace_back(StringView(m_params.reg).str(), context().faces()["StatusLineValue"]);
} }
return {atoms, {{"count", to_string(m_params.count)}, {"register", StringView(m_params.reg).str()}}}; return {atoms, m_params};
} }
KeymapMode keymap_mode() const override { return KeymapMode::Normal; } KeymapMode keymap_mode() const override { return KeymapMode::Normal; }

View File

@ -56,7 +56,7 @@ enum class InsertMode : unsigned
struct ModeInfo struct ModeInfo
{ {
DisplayLine display_line; DisplayLine display_line;
EnvVarMap env_vars; std::optional<NormalParams> normal_params;
}; };
class InputHandler : public SafeCountable class InputHandler : public SafeCountable