mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:27:34 +00:00
Shell: Cache PATH for faster tab completion
This patch reduces the O(n) tab completion to something like O(log(n)). The cache is just a sorted vector of strings and we binary search it to get a string matching our input, and then check the surrounding strings to see if we need to remove any characters. Also we no longer stat each file every time. Also added an #include in BinarySearch since it was using size_t. Oops. If `export` is called, we recache. Need to implement the `hash` builtin for when an executable has been added to a directory in PATH.
This commit is contained in:
parent
431abc8846
commit
aa8b40dce6
4 changed files with 58 additions and 30 deletions
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/BinarySearch.h>
|
||||
#include <AK/QuickSort.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/Vector.h>
|
||||
|
@ -16,9 +18,12 @@ public:
|
|||
void add_to_history(const String&);
|
||||
const Vector<String>& history() const { return m_history; }
|
||||
|
||||
void cache_path();
|
||||
|
||||
private:
|
||||
void clear_line();
|
||||
void append(const String&);
|
||||
void cut_mismatching_chars(String& completion, const String& program, int token_length);
|
||||
void tab_complete_first_token();
|
||||
void vt_save_cursor();
|
||||
void vt_restore_cursor();
|
||||
|
@ -32,6 +37,8 @@ private:
|
|||
int m_history_cursor { 0 };
|
||||
int m_history_capacity { 100 };
|
||||
|
||||
Vector<String, 256> m_path;
|
||||
|
||||
enum class InputState {
|
||||
Free,
|
||||
ExpectBracket,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue