1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 15:57:35 +00:00

Shell: Add an option to autosave history every N ms

...and set it to 10 seconds by default.
This commit is contained in:
Ali Mohammad Pur 2021-05-11 11:42:36 +04:30 committed by Linus Groh
parent 4d01183f5c
commit a527256356
4 changed files with 45 additions and 0 deletions

View file

@ -1844,6 +1844,8 @@ Shell::Shell(Line::Editor& editor, bool attempt_interactive)
return EDITOR_INTERNAL_FUNCTION(finish)(editor);
});
start_timer(3000);
}
Shell::~Shell()
@ -2056,6 +2058,36 @@ Optional<int> Shell::resolve_job_spec(const String& str)
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()
{
for (auto fd : m_fds)

View file

@ -276,6 +276,8 @@ private:
Shell();
virtual ~Shell() override;
void timer_event(Core::TimerEvent&) override;
// FIXME: Port to Core::Property
void save_to(JsonObject&);
void bring_cursor_to_beginning_of_a_line() const;
@ -347,6 +349,8 @@ private:
bool m_default_constructed { false };
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)