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