- 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...