mirror of
https://github.com/fltk/fltk.git
synced 2026-05-30 21:25:30 +08:00
Fl_Terminal doc fixes, private->protected for utf8_char_at_*()
This commit is contained in:
@@ -1012,8 +1012,10 @@ private:
|
|||||||
void display_modified(void);
|
void display_modified(void);
|
||||||
void display_modified_clear(void);
|
void display_modified_clear(void);
|
||||||
void clear_char_at_disp(int drow, int dcol);
|
void clear_char_at_disp(int drow, int dcol);
|
||||||
|
protected:
|
||||||
const Utf8Char* utf8_char_at_disp(int drow, int dcol) const;
|
const Utf8Char* utf8_char_at_disp(int drow, int dcol) const;
|
||||||
const Utf8Char* utf8_char_at_glob(int grow, int gcol) const;
|
const Utf8Char* utf8_char_at_glob(int grow, int gcol) const;
|
||||||
|
private:
|
||||||
void repeat_char(char c, int rep);
|
void repeat_char(char c, int rep);
|
||||||
void utf8_cache_clear(void);
|
void utf8_cache_clear(void);
|
||||||
void utf8_cache_flush(void);
|
void utf8_cache_flush(void);
|
||||||
|
|||||||
@@ -194,10 +194,10 @@ into the history, all without moving memory around.
|
|||||||
In fact the only time screen memory is moved around is during these infrequent
|
In fact the only time screen memory is moved around is during these infrequent
|
||||||
operations:
|
operations:
|
||||||
|
|
||||||
- during scrolling "down"
|
- during "scroll down" escape sequences, e.g. ESC[\#T
|
||||||
- character insert/delete operations within a line
|
- character insert/delete operations within a line, e.g. ESC[\#@, ESC[\#P
|
||||||
- changing the display size
|
- changing the display size e.g. Fl_Terminal::resize()
|
||||||
- changing the history size
|
- changing the history size e.g. Fl_Terminal::history_lines()
|
||||||
|
|
||||||
So a class "RingBuffer" is defined to manage the ring, and accessing its various
|
So a class "RingBuffer" is defined to manage the ring, and accessing its various
|
||||||
parts, either as the entire entity ring, just the history, or just the display.
|
parts, either as the entire entity ring, just the history, or just the display.
|
||||||
|
|||||||
+46
-13
@@ -911,8 +911,8 @@ void Fl_Terminal::RingBuffer::scroll(int rows, const CharStyle& style) {
|
|||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk ALL rows in the ring buffer..
|
// // Walk ALL rows in the ring buffer..
|
||||||
// for (int row=0; row<ring.rows(); row++) {
|
// for (int row=0; row<ring_rows(); row++) {
|
||||||
// Utf8Char *u8c = ring.u8c_ring_row(row);
|
// Utf8Char *u8c = u8c_ring_row(row);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@@ -925,7 +925,7 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::RingBuffer::u8c_ring_row(int row) cons
|
|||||||
// Return UTF-8 char for beginning of 'row' in the history buffer.
|
// Return UTF-8 char for beginning of 'row' in the history buffer.
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk ALL rows in history..
|
// // Walk ALL rows in history..
|
||||||
// for (int hrow=0; hrow<ring.hrows(); hrow++) {
|
// for (int hrow=0; hrow<hist_rows(); hrow++) {
|
||||||
// Utf8Char *u8c = u8c_hist_row(hrow);
|
// Utf8Char *u8c = u8c_hist_row(hrow);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
@@ -940,7 +940,7 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::RingBuffer::u8c_hist_row(int hrow) con
|
|||||||
// Special case to walk the "in use" rows of the history
|
// Special case to walk the "in use" rows of the history
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk the "in use" rows of history..
|
// // Walk the "in use" rows of history..
|
||||||
// for (int hrow=0; hrow<ring.hist_use(); hrow++) {
|
// for (int hrow=0; hrow<hist_use(); hrow++) {
|
||||||
// Utf8Char *u8c = u8c_hist_use_row(hrow);
|
// Utf8Char *u8c = u8c_hist_use_row(hrow);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
@@ -957,7 +957,7 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::RingBuffer::u8c_hist_use_row(int hurow
|
|||||||
// Return UTF-8 char for beginning of 'row' in the display buffer
|
// Return UTF-8 char for beginning of 'row' in the display buffer
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk ALL rows in display..
|
// // Walk ALL rows in display..
|
||||||
// for (int drow=0; drow<ring.drows(); drow++) {
|
// for (int drow=0; drow<disp_rows(); drow++) {
|
||||||
// Utf8Char *u8c = u8c_disp_row(drow);
|
// Utf8Char *u8c = u8c_disp_row(drow);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
@@ -975,8 +975,8 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::RingBuffer::u8c_disp_row(int drow) con
|
|||||||
// Scrolling offset is NOT applied; this is raw access to the ring's rows.
|
// Scrolling offset is NOT applied; this is raw access to the ring's rows.
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk ALL rows in the ring buffer..
|
// // Walk ALL rows in the ring buffer..
|
||||||
// for (int row=0; row<ring.rows(); row++) {
|
// for (int row=0; row<ring_rows(); row++) {
|
||||||
// Utf8Char *u8c = ring.u8c_ring_row(row);
|
// Utf8Char *u8c = u8c_ring_row(row);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@@ -992,7 +992,7 @@ Fl_Terminal::Utf8Char* Fl_Terminal::RingBuffer::u8c_hist_use_row(int hurow)
|
|||||||
// Return UTF-8 char for beginning of 'row' in the display buffer
|
// Return UTF-8 char for beginning of 'row' in the display buffer
|
||||||
// Example:
|
// Example:
|
||||||
// // Walk ALL rows in display..
|
// // Walk ALL rows in display..
|
||||||
// for (int drow=0; drow<ring.drows(); drow++) {
|
// for (int drow=0; drow<disp_rows(); drow++) {
|
||||||
// Utf8Char *u8c = u8c_disp_row(drow);
|
// Utf8Char *u8c = u8c_disp_row(drow);
|
||||||
// ..
|
// ..
|
||||||
// }
|
// }
|
||||||
@@ -1081,10 +1081,15 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::u8c_disp_row(int drow) const
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
\code
|
\code
|
||||||
// Walk ALL rows and cols in the ring buffer..
|
// Walk ALL rows and cols in the raw ring buffer..
|
||||||
for (int row=0; row<ring.rows(); row++) {
|
// These will not necessarily be in order as they appear
|
||||||
Utf8Char *u8c = ring.u8c_ring_row(row);
|
// on-screen.
|
||||||
for (int col=0; col<ring.cols(); col++,u8c++) {
|
// For walking the terminal lines in order, see examples
|
||||||
|
// for u8c_hist_use_row() and u8c_disp_row().
|
||||||
|
//
|
||||||
|
for (int row=0; row<ring_rows(); row++) {
|
||||||
|
Utf8Char *u8c = u8c_ring_row(row);
|
||||||
|
for (int col=0; col<ring_cols(); col++,u8c++) {
|
||||||
..make use of u8c->xxx() methods..
|
..make use of u8c->xxx() methods..
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1111,6 +1116,19 @@ Fl_Terminal::Utf8Char* Fl_Terminal::u8c_hist_row(int hrow)
|
|||||||
aren't many (or any) rows in the history buffer that have been
|
aren't many (or any) rows in the history buffer that have been
|
||||||
populated with scrollback text yet.
|
populated with scrollback text yet.
|
||||||
|
|
||||||
|
Example to walk all "in use" lines of the history buffer:
|
||||||
|
\code
|
||||||
|
// Walk the entire screen history ("in use") and display to stdout
|
||||||
|
for (int row=0; row<hist_use(); row++) {
|
||||||
|
const Utf8Char *u8c = u8c_hist_use_row(row); // first char in row
|
||||||
|
for (int col=0; col<=hist_cols(); col++,u8c++) { // walk columns left-to-right
|
||||||
|
// ..Do things here with each u8c char..
|
||||||
|
::printf("%.*s", u8c->length(), u8c->text_utf8()); // show each utf8 char to stdout
|
||||||
|
}
|
||||||
|
::printf("\n"); // end of each line
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
\see u8c_disp_row(int) for example use.
|
\see u8c_disp_row(int) for example use.
|
||||||
*/
|
*/
|
||||||
Fl_Terminal::Utf8Char* Fl_Terminal::u8c_hist_use_row(int hurow)
|
Fl_Terminal::Utf8Char* Fl_Terminal::u8c_hist_use_row(int hurow)
|
||||||
@@ -1130,6 +1148,21 @@ Fl_Terminal::Utf8Char* Fl_Terminal::u8c_hist_use_row(int hurow)
|
|||||||
::printf("<%.*s>", len, text); // print potentially multibyte char
|
::printf("<%.*s>", len, text); // print potentially multibyte char
|
||||||
}
|
}
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
|
- This can also be used to walk all rows on the display screen up to the cursor row, e.g.
|
||||||
|
\code
|
||||||
|
// Write all chars in display up to cursor row to stdout
|
||||||
|
for (int row=0; row<disp_rows() && row<=cursor_row(); row++) {
|
||||||
|
const Utf8Char *u8c = u8c_disp_row(row); // first char in row
|
||||||
|
for (int col=0; col<=display_cols(); col++,u8c++) { // walk columns left-to-right
|
||||||
|
// ..Do things here with each u8c char..
|
||||||
|
::printf("%.*s", u8c->text_utf8(), u8c->length()); // write each utf8 char to stdout
|
||||||
|
}
|
||||||
|
::printf("\n");
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\see u8c_hist_use_row() for examples of walking the screen history
|
||||||
*/
|
*/
|
||||||
Fl_Terminal::Utf8Char* Fl_Terminal::u8c_disp_row(int drow)
|
Fl_Terminal::Utf8Char* Fl_Terminal::u8c_disp_row(int drow)
|
||||||
{ return const_cast<Utf8Char*>(const_cast<const Fl_Terminal*>(this)->u8c_disp_row(drow)); }
|
{ return const_cast<Utf8Char*>(const_cast<const Fl_Terminal*>(this)->u8c_disp_row(drow)); }
|
||||||
@@ -3925,7 +3958,7 @@ int Fl_Terminal::handle(int e) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Return a string copy of all lines in the terminal (including history).
|
Return a string copy of all lines in the terminal (including history).
|
||||||
The returned string is allocated with strdup(3), which the caller must free.
|
The returned string is allocated with `strdup(3)`, which the caller must `free(3)`.
|
||||||
|
|
||||||
If \p 'lines_below_cursor' is false (default), lines below the cursor on down
|
If \p 'lines_below_cursor' is false (default), lines below the cursor on down
|
||||||
to the bottom of the display are ignored, and not included in the returned string.
|
to the bottom of the display are ignored, and not included in the returned string.
|
||||||
|
|||||||
Reference in New Issue
Block a user