2#include "di/bit/bitset/prelude.h"
3#include "di/container/string/string_view.h"
4#include "di/container/view/cache_last.h"
5#include "di/reflect/prelude.h"
50 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<SavedCursor>) {
76 auto max_width() const -> u32 {
return m_size.cols; }
77 auto size() const ->
Size const& {
return m_size; }
95 void set_cursor(u32 row, u32 col,
bool overflow_pending);
128 auto total_rows() const -> usize {
return m_scroll_back.total_rows() + m_active_rows.total_rows(); }
135 return m_visual_scroll_offset;
158 return group.iterate_row(r);
171 bool explicitly_sized,
bool complex_grapheme_cluster);
175 bool explicitly_sized,
bool complex_grapheme_cluster);
177 bool explicitly_sized,
bool complex_grapheme_cluster);
180 auto translate_row(u32 row) const -> u32;
181 auto translate_col(u32 col) const -> u32;
182 auto min_row() const -> u32;
183 auto max_row_inclusive() const -> u32;
184 auto min_col() const -> u32;
185 auto max_col_inclusive() const -> u32;
187 auto cursor_in_scroll_region() const ->
bool;
190 void clamp_selection();
197 void invalidate_region(
Selection const& region);
199 auto begin_row_iterator() {
return rows().begin() + m_scroll_region.
start_row; }
200 auto end_row_iterator() {
return rows().begin() + m_scroll_region.
end_row; }
202 auto rows() -> di::Ring<Row>& {
return m_active_rows.
rows(); }
203 auto rows() const -> di::Ring<Row> const& {
return m_active_rows.rows(); }
206 RowGroup m_active_rows;
207 bool m_whole_screen_dirty {
true };
210 ScrollBack m_scroll_back;
212 u64 m_visual_scroll_offset { 0 };
213 bool m_never_got_input {
true };
216 di::Optional<Selection> m_selection;
221 u16 m_graphics_id { 0 };
222 u16 m_hyperlink_id { 0 };
226 ScrollRegion m_scroll_region;
Represents a group of terminal rows.
Definition row_group.h:23
auto rows() -> di::Ring< Row > &
Definition row_group.h:31
auto max_width() const -> u32
Definition screen.h:76
BeginSelectionMode
Definition screen.h:142
@ Word
Definition screen.h:144
@ Line
Definition screen.h:145
@ Single
Definition screen.h:143
void clear_row()
Definition screen.cpp:568
void clear_scroll_back()
Definition screen.cpp:1282
void delete_characters(u32 count)
Definition screen.cpp:415
void set_origin_mode(OriginMode mode)
Definition screen.cpp:228
void clear_row_before_cursor()
Definition screen.cpp:617
auto visual_scroll_offset() const -> u64
Definition screen.h:132
void begin_selection(SelectionPoint const &point, BeginSelectionMode mode)
Definition screen.cpp:1341
auto total_rows() const -> usize
Definition screen.h:128
auto find_row(u64 row) const -> di::Tuple< u32, RowGroup const & >
Definition screen.cpp:1501
void put_code_point(c32 code_point, AutoWrapMode auto_wrap_mode)
Definition screen.cpp:722
Screen(Size const &size, ScrollBackEnabled scroll_back_enabled)
Definition screen.cpp:23
auto max_height() const -> u32
Definition screen.h:75
auto absolute_row_start() const -> u64
Definition screen.h:125
void clear_damage_tracking()
Definition screen.cpp:1308
void put_cell(di::StringView text, MultiCellInfo const &multi_cell_info, AutoWrapMode auto_wrap_mode, bool explicitly_sized, bool complex_grapheme_cluster)
Definition screen.cpp:972
void set_cursor(u32 row, u32 col)
Definition screen.cpp:248
void insert_blank_lines(u32 count)
Definition screen.cpp:378
void set_cursor_row(u32 row)
Definition screen.cpp:276
auto in_selection(SelectionPoint const &point) const -> bool
Definition screen.cpp:1411
void clear()
Definition screen.cpp:506
void set_scroll_region(ScrollRegion const ®ion)
Definition screen.cpp:137
void erase_characters(u32 n)
Definition screen.cpp:641
auto scroll_region() const -> ScrollRegion const &
Definition screen.h:78
void set_cursor_col_relative(u32 col)
Definition screen.cpp:280
auto whole_screen_dirty() const -> bool
Definition screen.h:121
void set_cursor_col(u32 col)
Definition screen.cpp:284
void scroll_down()
Definition screen.cpp:684
void clear_after_cursor()
Definition screen.cpp:528
void set_current_graphics_rendition(GraphicsRendition const &rendition)
Definition screen.cpp:151
auto size() const -> Size const &
Definition screen.h:77
auto state_as_escape_sequences() const -> di::String
Serialize screen contents to terminal escape sequences.
Definition screen.cpp:1511
ScrollBackEnabled
Definition screen.h:68
@ Yes
Definition screen.h:68
@ No
Definition screen.h:68
auto current_graphics_rendition() const -> GraphicsRendition const &
Definition screen.cpp:143
void put_osc66(OSC66 const &sized_text, AutoWrapMode auto_wrap_mode)
Definition screen.cpp:901
void restore_cursor(SavedCursor const &cursor)
Definition screen.cpp:217
auto selected_text() const -> di::String
Definition screen.cpp:1451
void set_cursor_relative(u32 row, u32 col)
Definition screen.cpp:239
void delete_lines(u32 count)
Definition screen.cpp:466
auto absolute_row_screen_start() const -> u64
Definition screen.h:126
void resize(Size const &size)
Definition screen.cpp:28
auto absolute_row_end() const -> u64
Definition screen.h:127
void visual_scroll_up()
Definition screen.cpp:1287
void visual_scroll_down()
Definition screen.cpp:1294
auto selection() const -> di::Optional< Selection >
Definition screen.h:148
auto origin_mode() const -> OriginMode
Definition screen.h:87
void set_cursor_row_relative(u32 row)
Definition screen.cpp:272
void update_selection(SelectionPoint const &point)
Definition screen.cpp:1397
void set_current_hyperlink(di::Optional< Hyperlink const & > hyperlink)
Definition screen.cpp:179
void visual_scroll_to_bottom()
Definition screen.cpp:1301
void clear_selection()
Definition screen.cpp:1317
auto current_hyperlink() const -> di::Optional< Hyperlink const & >
Definition screen.cpp:147
void insert_blank_characters(u32 count)
Definition screen.cpp:316
auto visual_scroll_at_bottom() const -> bool
Definition screen.h:137
void clear_whole_screen_dirty_flag()
Definition screen.h:122
void clear_row_after_cursor()
Definition screen.cpp:583
void invalidate_all()
Definition screen.h:120
void clear_before_cursor()
Definition screen.cpp:545
auto iterate_row(u64 row) const
Definition screen.h:156
auto save_cursor() const -> SavedCursor
Definition screen.cpp:207
auto cursor() const -> Cursor
Definition screen.h:86
Definition capability.h:8
OriginMode
Whether or not origin mode (DEC mode 6) is enabled.
Definition screen.h:31
@ Disabled
Definition screen.h:32
AutoWrapMode
Whether or not auto-wrap (DEC mode 7) is enabled.
Definition screen.h:20
@ Enabled
Definition screen.h:22
@ Disabled
Definition screen.h:21
Definition graphics_rendition.h:114
Represents the current cursor position of the terminal.
Definition cursor.h:8
Represents a hyperlink specified via OSC 6.
Definition hyperlink.h:21
Shared information for cells linked via text sizing protocol (OSC 66) or double width characters.
Definition multi_cell_info.h:8
Represents text annotated using the text sizing protocol.
Definition osc_66.h:12
Represents the saved cursor state, which is used for save/restore cursor operations.
Definition screen.h:40
u32 col
Column (x coordinate)
Definition screen.h:42
bool overflow_pending
Signals that the previous text outputted reached the end of a row.
Definition screen.h:43
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< SavedCursor >)
Definition screen.h:50
u32 row
Row (y coordinate)
Definition screen.h:41
auto operator<=>(SavedCursor const &) const =default
GraphicsRendition graphics_rendition
Active graphics rendition.
Definition screen.h:44
auto operator==(SavedCursor const &) const -> bool=default
OriginMode origin_mode
Origin mode.
Definition screen.h:45
Represents a coordinate of a visual selection.
Definition selection.h:12
Represents the visual selection of a terminal.
Definition selection.h:26