diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-03-01 13:28:06 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-03-02 20:53:28 +1100 |
| commit | 0a66eb9c47ba9a7d3b90286d66a70b5bd7eee15a (patch) | |
| tree | 66d125cdf38c006b9acacea73213da8deca13ed2 /src/buffer_utils.cc | |
| parent | b8eef27e041ce68fda01f66e3cc902e97b25fbaf (diff) | |
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.
Diffstat (limited to 'src/buffer_utils.cc')
| -rw-r--r-- | src/buffer_utils.cc | 41 |
1 files changed, 23 insertions, 18 deletions
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<size_t>(id)); } -String history_as_string(const Vector<Buffer::HistoryNode>& 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<String> history_as_strings(const Vector<Buffer::HistoryNode>& history) +{ + Vector<String> res; + for (auto& node : history) + { auto seconds = std::chrono::duration_cast<std::chrono::seconds>(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<String> 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<String> res; + for (auto& modification : undo_group) + res.push_back(modification_as_string(modification)); + return res; } } |
