mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 02:12:09 -05:00
Shell: Add an option to autosave history every N ms
...and set it to 10 seconds by default.
This commit is contained in:
parent
4d01183f5c
commit
a527256356
4 changed files with 45 additions and 0 deletions
|
@ -38,3 +38,5 @@ if [ "$(id -u)" = "0" ] {
|
||||||
}
|
}
|
||||||
|
|
||||||
export PROMPT="\\X\\u@\\h:\\w\\a\\e[$prompt_color;1m\\h\\e[0m:\\e[34;1m\\w\\e[0m \\p "
|
export PROMPT="\\X\\u@\\h:\\w\\a\\e[$prompt_color;1m\\h\\e[0m:\\e[34;1m\\w\\e[0m \\p "
|
||||||
|
|
||||||
|
export HISTORY_AUTOSAVE_TIME_MS=10000
|
||||||
|
|
|
@ -33,6 +33,13 @@ Note: This variable is respected by every program using `Line::Editor`, e.g. [`j
|
||||||
The value of this variable is used as the Shell's history file path, both for reading history at startup and writing history on exit.
|
The value of this variable is used as the Shell's history file path, both for reading history at startup and writing history on exit.
|
||||||
Its default value is `~/.history`.
|
Its default value is `~/.history`.
|
||||||
|
|
||||||
|
`HISTORY_AUTOSAVE_TIME_MS` (environment)
|
||||||
|
|
||||||
|
Setting this variable to a value `t` other than zero (0) will make the shell save the history to the history file every `t` milliseconds.
|
||||||
|
If `t` is not a non-negative integer, zero will be assumed.
|
||||||
|
Note that multiple shell instances will not interfere with each other if they are to save to the same history file, instead, the entries will all be merged together chronologically.
|
||||||
|
The default value for this option is set in `/etc/shellrc`.
|
||||||
|
|
||||||
## Visual
|
## Visual
|
||||||
|
|
||||||
1. Prompting
|
1. Prompting
|
||||||
|
|
|
@ -1844,6 +1844,8 @@ Shell::Shell(Line::Editor& editor, bool attempt_interactive)
|
||||||
|
|
||||||
return EDITOR_INTERNAL_FUNCTION(finish)(editor);
|
return EDITOR_INTERNAL_FUNCTION(finish)(editor);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
start_timer(3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
Shell::~Shell()
|
Shell::~Shell()
|
||||||
|
@ -2056,6 +2058,36 @@ Optional<int> Shell::resolve_job_spec(const String& str)
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Shell::timer_event(Core::TimerEvent& event)
|
||||||
|
{
|
||||||
|
event.accept();
|
||||||
|
|
||||||
|
if (m_is_subshell)
|
||||||
|
return;
|
||||||
|
|
||||||
|
StringView option = getenv("HISTORY_AUTOSAVE_TIME_MS");
|
||||||
|
|
||||||
|
auto time = option.to_uint();
|
||||||
|
if (!time.has_value() || time.value() == 0) {
|
||||||
|
m_history_autosave_time.clear();
|
||||||
|
stop_timer();
|
||||||
|
start_timer(3000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_history_autosave_time != time) {
|
||||||
|
m_history_autosave_time = time.value();
|
||||||
|
stop_timer();
|
||||||
|
start_timer(m_history_autosave_time.value());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_history_autosave_time.has_value())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_editor)
|
||||||
|
m_editor->save_history(get_history_path());
|
||||||
|
}
|
||||||
|
|
||||||
void FileDescriptionCollector::collect()
|
void FileDescriptionCollector::collect()
|
||||||
{
|
{
|
||||||
for (auto fd : m_fds)
|
for (auto fd : m_fds)
|
||||||
|
|
|
@ -276,6 +276,8 @@ private:
|
||||||
Shell();
|
Shell();
|
||||||
virtual ~Shell() override;
|
virtual ~Shell() override;
|
||||||
|
|
||||||
|
void timer_event(Core::TimerEvent&) override;
|
||||||
|
|
||||||
// FIXME: Port to Core::Property
|
// FIXME: Port to Core::Property
|
||||||
void save_to(JsonObject&);
|
void save_to(JsonObject&);
|
||||||
void bring_cursor_to_beginning_of_a_line() const;
|
void bring_cursor_to_beginning_of_a_line() const;
|
||||||
|
@ -347,6 +349,8 @@ private:
|
||||||
bool m_default_constructed { false };
|
bool m_default_constructed { false };
|
||||||
|
|
||||||
mutable bool m_last_continuation_state { false }; // false == not needed.
|
mutable bool m_last_continuation_state { false }; // false == not needed.
|
||||||
|
|
||||||
|
Optional<size_t> m_history_autosave_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
[[maybe_unused]] static constexpr bool is_word_character(char c)
|
[[maybe_unused]] static constexpr bool is_word_character(char c)
|
||||||
|
|
Loading…
Add table
Reference in a new issue