mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-08 09:14:22 +01:00
188 lines
6.4 KiB
Plaintext
188 lines
6.4 KiB
Plaintext
- mouse handling and some other bits elinks needs
|
|
- line mode/char-at-a-time mode a la telnet?
|
|
- handle ioctl/termios stuff on window sockets
|
|
- figure out once and for all what is going on with backspace and del
|
|
backspace should be translated per the termios setting.
|
|
del passed through?
|
|
- window creation/idle time
|
|
- profile/optimise, particularly (i suspect) input.c
|
|
- could use bsearch all over the place or get rid of smaller tables (clientmsg)
|
|
- better errors when creating new windows/sessions (how?)
|
|
- Implicitly add exec to the commands for new windows (switch to disable it)
|
|
- it would be nice to have multichar commands so you could have C-b K K for
|
|
kill-window to limit accidental presses
|
|
- status-fg/status-bg should be able to set attributes: bold, etc
|
|
- save/restore (DECSC/DECRC) are ugly. maybe a struct screen_attr and memcpy
|
|
- force-default option: assume terminal supports default colours even if AX
|
|
is missing (like, eg, xterm-color in an aterm). DITTO for 256 colours
|
|
- refer to windows by name etc (duplicates? fnmatch?)
|
|
- commands:
|
|
command to run something without a window at all?
|
|
command to purge window history
|
|
extend list-clients to list clients attached to a session (-a for all?)
|
|
bring back detach-session to detach all clients on a session?
|
|
clone-session command to link all windows to a new session
|
|
- function groups, bind-key ^W { select-window 0; send-key ^W } etc ***
|
|
- allow fnmatch for -c, so that you can, eg, detach all clients
|
|
- bind non prefix keys
|
|
- garbage collect window history (100 lines at a time?) if it hasn't been used
|
|
in $x time (need window creation/use times)
|
|
- lift SHRT_MAX limits for history
|
|
- audit copy/scroll and other modes for problems with very small windows
|
|
- screen_draw_* moved out/renamed (accept TTY_*?)
|
|
- split clients into three RB trees by fd: attached/unattached/dead?
|
|
or tailqs? what would be fastest per-char?
|
|
- window splitting?
|
|
- c/p is still borken in some ways
|
|
- different screen model? layers perhaps? hmm
|
|
- better mode features: search, back word, forward word, etc
|
|
- flags to centre screen in window
|
|
- better terminal emulation (identify, insert mode, some other bits)
|
|
|
|
-- 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
|
|
----
|
|
|
|
21:09 < merdely> NicM: if I run 'tmux attach -t main' and there is no tmux session named main, start a new one.
|
|
- commands: save-buffer -b number filename
|
|
load-buffer -b number filename
|
|
copy-buffer -s src-session -t dst-session
|
|
-a src-index -b dst-index
|
|
(copy from other session)
|
|
- clear EOL etc CANNOT rely on term using the current colour/attr and probably
|
|
should not emulate it doing so
|
|
- activity/bell should be per-window not per-link? what if it is cur win in
|
|
session not being watched?
|
|
- tidy up window modes
|
|
- support \033_string\033\\ for window title too
|
|
- list-keys should be sorted
|
|
- problems with force-width when wrapping line in emacs?
|
|
- command history for command-prompt. better tab completion (use options too)
|
|
- window options should be done similarly to standard options
|
|
- next prev word etc in command prompt
|
|
- many more info() displays for various things
|
|
- document mode-keys
|
|
- vi half page scroll
|
|
- bugs with 256 colour test perl script...
|