From 0a66eb9c47ba9a7d3b90286d66a70b5bd7eee15a Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sun, 1 Mar 2020 13:28:06 +1100 Subject: Expand env vars as list of strings This makes it possible to do :select `%val{selections_decs}` and to correctly combine $kak_quoted with those. --- src/buffer_utils.cc | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'src/buffer_utils.cc') diff --git a/src/buffer_utils.cc b/src/buffer_utils.cc index 8c0f3f80..cbead31d 100644 --- a/src/buffer_utils.cc +++ b/src/buffer_utils.cc @@ -228,30 +228,35 @@ auto to_string(Buffer::HistoryId id) return to_string(static_cast(id)); } -String history_as_string(const Vector& history, Quoting quoting) +static String modification_as_string(const Buffer::Modification& modification) { - auto format_history_node = [&](const Buffer::HistoryNode& node) { + return format("{}{}.{}|{}", + modification.type == Buffer::Modification::Type::Insert ? '+' : '-', + modification.coord.line, modification.coord.column, + modification.content->strview()); +} + +Vector history_as_strings(const Vector& history) +{ + Vector res; + for (auto& node : history) + { auto seconds = std::chrono::duration_cast(node.committed.time_since_epoch()); - return format("{} {} {}{}{}", - node.parent, - seconds.count(), - node.redo_child, - node.undo_group.empty() ? "" : " ", - undo_group_as_string(node.undo_group, quoting)); + res.push_back(to_string(node.parent)); + res.push_back(to_string(seconds.count())); + res.push_back(to_string(node.redo_child)); + for (auto& modification : node.undo_group) + res.push_back(modification_as_string(modification)); }; - return join(history | transform(format_history_node), ' ', false); + return res; } -String undo_group_as_string(const Buffer::UndoGroup& undo_group, Quoting quoting) +Vector undo_group_as_strings(const Buffer::UndoGroup& undo_group) { - auto modification_as_string = [&](const Buffer::Modification& modification) { - auto quote = quoter(quoting); - return quote(format("{}{}.{}|{}", - modification.type == Buffer::Modification::Type::Insert ? '+' : '-', - modification.coord.line, modification.coord.column, - modification.content->strview())); - }; - return join(undo_group | transform(modification_as_string), ' ', false); + Vector res; + for (auto& modification : undo_group) + res.push_back(modification_as_string(modification)); + return res; } } -- cgit v1.2.3