mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 01:20:25 +00:00
dccab569d2
This patch adds a function to LineEditor that takes the current shell buffer, searches PATH for the first program that starts with that buffer and then compares that to any other programs starting with the buffer to remove any mismatching characters off the end. The result is appended to the buffer. This may be faster with a data structure but that seems overkill.
42 lines
947 B
C++
42 lines
947 B
C++
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <AK/StringBuilder.h>
|
|
#include <AK/Vector.h>
|
|
#include <LibCore/CDirIterator.h>
|
|
#include <sys/stat.h>
|
|
|
|
class LineEditor {
|
|
public:
|
|
LineEditor();
|
|
~LineEditor();
|
|
|
|
String get_line(const String& prompt);
|
|
|
|
void add_to_history(const String&);
|
|
const Vector<String>& history() const { return m_history; }
|
|
|
|
private:
|
|
void clear_line();
|
|
void append(const String&);
|
|
void tab_complete_first_token();
|
|
void vt_save_cursor();
|
|
void vt_restore_cursor();
|
|
void vt_clear_to_end_of_line();
|
|
|
|
Vector<char, 1024> m_buffer;
|
|
int m_cursor { 0 };
|
|
|
|
// FIXME: This should be something more take_first()-friendly.
|
|
Vector<String> m_history;
|
|
int m_history_cursor { 0 };
|
|
int m_history_capacity { 100 };
|
|
|
|
enum class InputState {
|
|
Free,
|
|
ExpectBracket,
|
|
ExpectFinal,
|
|
ExpectTerminator,
|
|
};
|
|
InputState m_state { InputState::Free };
|
|
};
|