summaryrefslogtreecommitdiff
path: root/src/buffer_utils.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2020-03-01 13:28:06 +1100
committerMaxime Coste <mawww@kakoune.org>2020-03-02 20:53:28 +1100
commit0a66eb9c47ba9a7d3b90286d66a70b5bd7eee15a (patch)
tree66d125cdf38c006b9acacea73213da8deca13ed2 /src/buffer_utils.cc
parentb8eef27e041ce68fda01f66e3cc902e97b25fbaf (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.cc41
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;
}
}