4
4
* The saved lines are stored in a list of lists (one for each buffer):
6
6
* b_u_oldhead------------------------------------------------+
9
* +--------------+ +--------------+ +--------------+
10
* b_u_newhead--->| u_header | | u_header | | u_header |
11
* | uh_next------>| uh_next------>| uh_next---->NULL
12
* NULL<--------uh_prev |<---------uh_prev |<---------uh_prev |
13
* | uh_entry | | uh_entry | | uh_entry |
14
* +--------|-----+ +--------|-----+ +--------|-----+
17
* +--------------+ +--------------+ +--------------+
18
* | u_entry | | u_entry | | u_entry |
19
* | ue_next | | ue_next | | ue_next |
20
* +--------|-----+ +--------|-----+ +--------|-----+
23
* +--------------+ NULL NULL
9
* +--------------+ +--------------+ +--------------+
10
* b_u_newhead--->| u_header | | u_header | | u_header |
11
* | uh_next------>| uh_next------>| uh_next---->NULL
12
* NULL<--------uh_prev |<---------uh_prev |<---------uh_prev |
13
* | uh_entry | | uh_entry | | uh_entry |
14
* +--------|-----+ +--------|-----+ +--------|-----+
17
* +--------------+ +--------------+ +--------------+
18
* | u_entry | | u_entry | | u_entry |
19
* | ue_next | | ue_next | | ue_next |
20
* +--------|-----+ +--------|-----+ +--------|-----+
23
* +--------------+ NULL NULL
31
31
* Each u_entry list contains the information for one undo or redo.
32
32
* curbuf->b_u_curhead points to the header of the last undo (the next redo),
37
37
* uh_seq field is numbered sequentially to be able to find a newer or older
40
* +---------------+ +---------------+
41
* b_u_oldhead --->| u_header | | u_header |
42
* | uh_alt_next ---->| uh_alt_next ----> NULL
43
* NULL <----- uh_alt_prev |<------ uh_alt_prev |
44
* | uh_prev | | uh_prev |
45
* +-----|---------+ +-----|---------+
48
* +---------------+ +---------------+
49
* | u_header | | u_header |
50
* | uh_alt_next | | uh_alt_next |
51
* b_u_newhead --->| uh_alt_prev | | uh_alt_prev |
52
* | uh_prev | | uh_prev |
53
* +-----|---------+ +-----|---------+
56
* NULL +---------------+ +---------------+
57
* | u_header | | u_header |
58
* | uh_alt_next ---->| uh_alt_next |
59
* | uh_alt_prev |<------ uh_alt_prev |
60
* | uh_prev | | uh_prev |
61
* +-----|---------+ +-----|---------+
40
* +---------------+ +---------------+
41
* b_u_oldhead --->| u_header | | u_header |
42
* | uh_alt_next ---->| uh_alt_next ----> NULL
43
* NULL <----- uh_alt_prev |<------ uh_alt_prev |
44
* | uh_prev | | uh_prev |
45
* +-----|---------+ +-----|---------+
48
* +---------------+ +---------------+
49
* | u_header | | u_header |
50
* | uh_alt_next | | uh_alt_next |
51
* b_u_newhead --->| uh_alt_prev | | uh_alt_prev |
52
* | uh_prev | | uh_prev |
53
* +-----|---------+ +-----|---------+
56
* NULL +---------------+ +---------------+
57
* | u_header | | u_header |
58
* | uh_alt_next ---->| uh_alt_next |
59
* | uh_alt_prev |<------ uh_alt_prev |
60
* | uh_prev | | uh_prev |
61
* +-----|---------+ +-----|---------+
66
66
* All data is allocated and will all be freed when the buffer is unloaded.
1782
1782
/* "target" is the node below which we want to be.
1783
1783
* Init "closest" to a value we can't reach. */
1784
1784
if (absolute) {
1786
// target 0 does not exist, got to 1 and above it.
1788
1794
/* When doing computations with time_t subtract starttime, because