mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 13:38:11 +00:00
Shell: Add formatter for history events
This commit is contained in:
parent
239472ba69
commit
c1b4e86004
2 changed files with 57 additions and 0 deletions
|
@ -369,6 +369,62 @@ void Formatter::visit(const AST::Glob* node)
|
|||
visited(node);
|
||||
}
|
||||
|
||||
void Formatter::visit(const AST::HistoryEvent* node)
|
||||
{
|
||||
will_visit(node);
|
||||
test_and_update_output_cursor(node);
|
||||
|
||||
current_builder().append('!');
|
||||
switch (node->selector().event.kind) {
|
||||
case AST::HistorySelector::EventKind::ContainingStringLookup:
|
||||
current_builder().append('?');
|
||||
current_builder().append(node->selector().event.text);
|
||||
break;
|
||||
case AST::HistorySelector::EventKind::StartingStringLookup:
|
||||
current_builder().append(node->selector().event.text);
|
||||
break;
|
||||
case AST::HistorySelector::EventKind::IndexFromStart:
|
||||
current_builder().append(node->selector().event.text);
|
||||
break;
|
||||
case AST::HistorySelector::EventKind::IndexFromEnd:
|
||||
if (node->selector().event.index == 0)
|
||||
current_builder().append('!');
|
||||
else
|
||||
current_builder().append(node->selector().event.text);
|
||||
break;
|
||||
}
|
||||
|
||||
auto& range = node->selector().word_selector_range;
|
||||
if (!range.end.has_value()
|
||||
|| range.end.value().kind != AST::HistorySelector::WordSelectorKind::Last
|
||||
|| range.start.kind != AST::HistorySelector::WordSelectorKind::Index || range.start.selector != 0) {
|
||||
|
||||
auto append_word = [this](auto& selector) {
|
||||
switch (selector.kind) {
|
||||
case AST::HistorySelector::WordSelectorKind::Index:
|
||||
if (selector.selector == 0)
|
||||
current_builder().append('^');
|
||||
else
|
||||
current_builder().appendff("{}", selector.selector);
|
||||
break;
|
||||
case AST::HistorySelector::WordSelectorKind::Last:
|
||||
current_builder().append('$');
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
current_builder().append(':');
|
||||
append_word(range.start);
|
||||
|
||||
if (range.end.has_value()) {
|
||||
current_builder().append('-');
|
||||
append_word(range.end.value());
|
||||
}
|
||||
}
|
||||
|
||||
visited(node);
|
||||
}
|
||||
|
||||
void Formatter::visit(const AST::Execute* node)
|
||||
{
|
||||
will_visit(node);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue