mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:47:44 +00:00
Shell: Make program-based completion with no actual token possible
31ca48e
made this default to paths, but now that we have a few sensible
ways to complete things, let's make those work too.
For instance, prior to this `kill <tab>` would've suggested paths, but
now it will suggest processes.
This commit is contained in:
parent
302a0c54f0
commit
ae27d7e442
2 changed files with 6 additions and 3 deletions
|
@ -393,6 +393,7 @@ Vector<Line::CompletionSuggestion> Node::complete_for_editor(Shell& shell, size_
|
|||
auto result = hit_test_position(offset);
|
||||
if (!result.matching_node)
|
||||
return shell.complete_path("", "", 0, Shell::ExecutableOnly::No, result.closest_command_node.ptr(), nullptr, Shell::EscapeMode::Bareword);
|
||||
|
||||
auto node = result.matching_node;
|
||||
if (node->is_bareword() || node != result.closest_node_with_semantic_meaning)
|
||||
node = result.closest_node_with_semantic_meaning;
|
||||
|
@ -744,6 +745,8 @@ HitTestResult CastToCommand::hit_test_position(size_t offset) const
|
|||
auto result = m_inner->hit_test_position(offset);
|
||||
if (!result.closest_node_with_semantic_meaning)
|
||||
result.closest_node_with_semantic_meaning = this;
|
||||
if (!result.closest_command_node && position().contains(offset))
|
||||
result.closest_command_node = this;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -1678,9 +1678,9 @@ ErrorOr<Vector<Line::CompletionSuggestion>> Shell::complete_via_program_itself(s
|
|||
completion_command.argv.extend({ "--complete", "--" });
|
||||
|
||||
struct Visitor : public AST::NodeVisitor {
|
||||
Visitor(Shell& shell, AST::Node const& node)
|
||||
Visitor(Shell& shell, AST::Position position)
|
||||
: shell(shell)
|
||||
, completion_position(node.position())
|
||||
, completion_position(position)
|
||||
{
|
||||
lists.empend();
|
||||
}
|
||||
|
@ -1824,7 +1824,7 @@ ErrorOr<Vector<Line::CompletionSuggestion>> Shell::complete_via_program_itself(s
|
|||
virtual void visit(AST::ReadWriteRedirection const*) override { }
|
||||
virtual void visit(AST::WriteAppendRedirection const*) override { }
|
||||
virtual void visit(AST::WriteRedirection const*) override { }
|
||||
} visitor { *this, *node };
|
||||
} visitor { *this, node ? node->position() : AST::Position() };
|
||||
|
||||
command_node->visit(visitor);
|
||||
if (visitor.fail)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue