mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00: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...
 |