mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 21:56:57 +00:00
Internal screen data rewrite for better 256 colour/UTF-8 support.
This commit is contained in:
125
TODO
125
TODO
@ -41,127 +41,10 @@
|
||||
|
||||
-- For 0.5 --------------------------------------------------------------------
|
||||
|
||||
XXX
|
||||
screen contains grid
|
||||
|
||||
screen_write <-- write to TTY and to screen using close-to-ANSI functions
|
||||
screen_redraw <-- write areas of screen to TTY
|
||||
grid_view <-- write to viewable area of grid
|
||||
grid <-- manipulate grid and history
|
||||
|
||||
XXX
|
||||
grid_view has ox,oy
|
||||
XXX
|
||||
|
||||
- FINISH UTF8: fix copy and paste
|
||||
- SPLIT u_short attr into attr,flags?
|
||||
- maybe rethink backend data structure?
|
||||
- utf8 can be 1-4 bytes
|
||||
- most common is 1 bytes
|
||||
- there can be double-width characters which take n bytes but 2 columns on screen
|
||||
- they are not only drawn as two characters, they also require two backspaces to remove
|
||||
- three operations:
|
||||
- simultaneously update screen and ttys
|
||||
- redraw screen or section of screen to ttys
|
||||
- write to ttys without updating screen
|
||||
|
||||
---
|
||||
NEED to be able to:
|
||||
resize screen
|
||||
apply ops to both screen and tty simultaneously
|
||||
both when parsing input and when eg scrolling history
|
||||
draw on the top of the screen without modifying it
|
||||
display arbitrary parts of the history
|
||||
redraw arbitrary parts of the visible screen
|
||||
---
|
||||
NEVER need to draw into the history
|
||||
|
||||
split off grid manip:
|
||||
16-bit characters
|
||||
8-bit flags
|
||||
8-bit attributes
|
||||
8-bit fg colour
|
||||
8-bit bg colour
|
||||
|
||||
struct grid_data {
|
||||
struct grid_cell **data;
|
||||
int *sizes;
|
||||
|
||||
int sx;
|
||||
int sy;
|
||||
|
||||
int hsize;
|
||||
int hlimit;
|
||||
};
|
||||
struct grid_cell {
|
||||
u_short data;
|
||||
u_char attr;
|
||||
u_char flags;
|
||||
u_char fg;
|
||||
u_char bg;
|
||||
};
|
||||
const struct grid_default_cell = { 0x20, 0, 0, 8, 8 };
|
||||
|
||||
; grid logically split from
|
||||
; -hlimit to 0 and 0 to sy
|
||||
|
||||
; ALWAYS fill with default
|
||||
|
||||
const struct grid_cell *grid_get(int x, int y);
|
||||
void grid_set(int x, int y, const struct grid_cell *cell);
|
||||
|
||||
void grid_resize()
|
||||
void grid_shift() /* shift lines into history */
|
||||
|
||||
struct grid_view {
|
||||
int ox;
|
||||
int oy;
|
||||
|
||||
int sx;
|
||||
int sy;
|
||||
|
||||
struct grid_data *gdata;
|
||||
struct grid_view *parent;
|
||||
};
|
||||
|
||||
struct grid_cell *grid_view_get_cell(int x, int y)
|
||||
void grid_view_set_cell(int x, int y, const struct grid_cell *cell);
|
||||
|
||||
int grid_view_absolute_x(int x);
|
||||
int grid_view_absolute_y(int y);
|
||||
|
||||
int grid_view_relative_x(int x);
|
||||
int grid_view_relative_y(int y);
|
||||
|
||||
void grid_view_delete_lines(int y, int ny)
|
||||
void grid_view_insert_lines(int y, int ny)
|
||||
void grid_view_clear_lines(int y, int ny)
|
||||
void grid_view_fill_lines(int y, int ny, const struct grid_cell *cell)
|
||||
|
||||
void grid_view_delete_cells(int x, int y, int nx)
|
||||
void grid_view_insert_cells(int x, int y, int nx)
|
||||
void grid_view_clear_cells(int x, int y, int nx)
|
||||
void grid_view_fill_cells(int x, int nx, const struct grid_cell *cell)
|
||||
|
||||
void grid_view_clear_area(int x, int y, int nx, int ny)
|
||||
void grid_view_fill_area(int x, int y, int nx, int ny, const struct grid_cell *cell)
|
||||
|
||||
---
|
||||
|
||||
screen has two (both grid_view):
|
||||
base and overlay
|
||||
|
||||
---
|
||||
screen_write writes into overlay if it exists and then base, also optionally to tty
|
||||
screen_draw draws overlay + base to display
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
Would it be better to just expand char to 16-bits and use it as an index only
|
||||
for >2-byte characters? or - better - don't support entire UTF range? only the BMP?
|
||||
this would get rid of UTF table and limits, but still leave double-width character annoyances
|
||||
also would double memory usage
|
||||
TODO -- 2 fix window-*.c
|
||||
3 resizing
|
||||
4 audit for leftover/unused code
|
||||
5 next phase of tidying
|
||||
----
|
||||
|
||||
21:09 < merdely> NicM: if I run 'tmux attach -t main' and there is no tmux session named main, start a new one.
|
||||
|
Reference in New Issue
Block a user