feat: screen-reader-friendly linear view (L key)

Plain-text appointment list with numbered indicators, no box-drawing
characters, and explicit labels. Reuses agenda data and navigation.
Binds to uppercase L to preserve vim-style hjkl grid navigation.
This commit is contained in:
2026-07-23 18:24:06 +01:00
parent a159933baa
commit 40fc4651cb
5 changed files with 308 additions and 0 deletions

View File

@@ -87,6 +87,7 @@ struct ScreenState {
bool show_calendar_picker{false};
std::size_t calendar_index{0};
bool show_agenda{false};
bool show_linear_view{false};
std::chrono::year_month_day agenda_start_day{
std::chrono::year{1970}, std::chrono::month{1}, std::chrono::day{1}};
std::vector<AgendaItem> agenda_items;
@@ -138,6 +139,7 @@ enum class Action {
search,
agenda,
calendars,
linear_view,
sync,
quit,
};

View File

@@ -121,9 +121,12 @@ private:
void toggle_selected_calendar();
void begin_agenda();
void close_agenda();
void begin_linear_view();
void close_linear_view();
void refresh_agenda();
void shift_agenda(int direction);
void choose_agenda_item();
void choose_linear_item();
[[nodiscard]] HistorySnapshot capture_history_snapshot() const;
void restore_history_snapshot(HistorySnapshot snapshot);
void push_history(std::vector<HistoryEntry>& history, HistoryEntry entry);