summaryrefslogtreecommitdiffstats
path: root/TODO
blob: e0e3de6ded2b52e9a4303822daf02d75d85302ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
- command bits and pieces:
	* allow multiple targets: fnmatch for -t/-c, for example detach all
	  clients with -t*
	* add -c for new-session like new-window
	* ' and " should be parsed the same (eg "\e" vs '\e') in config
	  and command prompt
	* last-pane across sessions
	* list-keys should quote output so that bindings can just be used in
          config file as-is

- make command sequences more usable
	* don't require space after ;
	* options for error handling: && and ||?

- options bits and pieces:
	* set-remain-on-exit is a complete hack
	* way to set socket path from config file

- format improvements:
	* option to quote format (#{q:session_name})
	* formats need conditions for >0 (for #P)
	* some way to pad # stuff with spaces
	* formats to show if a window is linked into multiple sessions, into
	  multiple attached sessions, and is the active window in multiple
	  attached sessions?

- choose mode improvements:
	* choose-pane command (augment choose-tree to do this?)
	* choose-mode and copy-mode are very similar, make choose-mode a subset?
	* flag to choose-* for sort order
	* choose mode would be better per client than per window?
	* two choices (first one then second, for swap-pane and join-pane)
	* choose modes should ditch the key bindings and just have fixed keys, and
          be more customized to their purpose (d to delete a buffer for choose-buffer,
          a preview of buffer contents, etc)

- improve monitor-*:
	* straighten out rules for multiple clients
	* think about what happens across sessions
	* monitor changes within a region
	* perhaps monitor /all/ panes in the window not just one

- improve mouse support:
	* bind commands to mouse in different areas? 
	* commands executed when clicking on a pattern (URL)

- hooks!

- warts on current naming:
	* display-time but message-fg/bg/attr
	* list-* vs show-*
	* split-window -> split-pane?

- better UTF-8 support:
	* message display
	* prompt input
	* searching in copy mode

- copy/paste improvements:
	* incremental searching
	* paste w/o trailing whitespace
	* command to toggle selection not to move it in copy-mode
	* regex searching
	* copy-pipe should have -x as well
	* copy mode key bindings should just be a standard key table, using
          something like "copy-mode start-selection"; it could use
          command-prompt for search, goto, etc:

              bind -Temacs command-prompt -p'Search Up: ' 'copy-mode search-up %%'

          it'd need a separate lookup, because modes are per-pane, perhaps a
          table() cb to give the table name ("vi" or "emacs"). anything in the
          table fires the command, anything not in the table is injected as a
          key
	* searching in copy mode should unwrap lines, so if you seach for "foobar"
          then it should be found even if it is now "foo\nbar" (if the WRAP flag
          is set on the line)
	* {} to go to next/previous blank line in copy mode

- layout stuff
	* way to tag a layout as a number/name
	* maybe keep last layout + size around and if size reverts just put it
	  back
	* revamp layouts: they are too complicated, should be more closely
	  integrated, should support hints, layout sets should just be a
	  special case of custom layouts, and we should support panes that are
	  not attached to a cell at all. this could be the time to introduce
	  panelink to replace layout_cell
	* way to set hints/limits about pane size for resizing
	* panning over window (window larger than visible)
	* a mode where one application can cross two panes (ie x|y, width =
	  COLUMNS/2 but height = ROWS * 2)
	* general key to space cells out evenly (horiz or vert) within their
	  parent cell (could replace even-vert/even-horiz layouts)
	* separate active panes for different clients

- terminfo bits
	* use a better termcap internally instead of screen, perhaps xterm
	* use screen-256color when started on 256 colour terminal?

- code cleanup
	* instead of separate window and session options, just one master
	  options list with each option having a type (window or session), then
	  options on window, on session, and global. for window options we look
	  window->session->global, and for session we look session->global
	* the way pane, window, session destroy is handled is too complicated
	  and the distinction between session.c, window.c and server-fn.c
	  functions is not clear. could we just have kill_pane(),
	  kill_window(), unlink_window(), kill_session() that fix up all data
	  structures (flagging sessions as dead) and return a value to say
	  whether clients need to be checked for dead sessions? sort of like
	  session_detach now but more so. or some other scheme to make it
	  simpler and clearer? also would be nice to remove/rename server-fn.c
	* more readable way to work out the various things commands need to
	  know about the client, notably:
		- is this the config file? (cmdq->c == NULL)
		- is this a command client? (cmdq->c != NULL &&
		  cmdq->c->session == NULL)
		- is this a control client?
		- can i do stdin or stdout to this client?
	  or even guarantee that cmdq->c != NULL and provide a better way to
	  tell when in the config file - then we use cmdq->c if we need a
	  client w/o a session else cmd_current_client
	* optimize pane redraws, 20120318184853.GK10965@yelena.nicm.ath.cx

- miscellaneous
	* way to keep a job running just read its last line of output for #()
	* link panes into multiple windows
	* live update: server started with -U connects to server, requests
	  sessions and windows, receives file descriptors
	* there are inconsistencies in what we get from old shell and what
	  comes from config for new sessions and windows. likewise, panes and
	  jobs and run-shell and lock command all start with slightly different
	  environments
	* multiline status line? separate command prompt and status line?
	* customizable command aliases
	* automatic pane logging
	* BCE? We are halfway there (output side is done for pane backgrounds),
	  just need to change how screen/grid handles erase