Mercurial > vim
comparison src/viminfo.c @ 26532:255bc9a08e58 v8.2.3795
patch 8.2.3795: too many #ifdefs
Commit: https://github.com/vim/vim/commit/739f13a55b4982efb37ebc9282e7f79975fff982
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Dec 13 13:12:53 2021 +0000
patch 8.2.3795: too many #ifdefs
Problem: Too many #ifdefs.
Solution: Graduate the jumplist feature.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 13 Dec 2021 14:15:03 +0100 |
parents | 50f8204eb8f7 |
children | 3a2b222107a6 |
comparison
equal
deleted
inserted
replaced
26531:b8398b0fb0ed | 26532:255bc9a08e58 |
---|---|
1945 /* | 1945 /* |
1946 * Functions relating to reading/writing marks from viminfo | 1946 * Functions relating to reading/writing marks from viminfo |
1947 */ | 1947 */ |
1948 | 1948 |
1949 static xfmark_T *vi_namedfm = NULL; | 1949 static xfmark_T *vi_namedfm = NULL; |
1950 #ifdef FEAT_JUMPLIST | |
1951 static xfmark_T *vi_jumplist = NULL; | 1950 static xfmark_T *vi_jumplist = NULL; |
1952 static int vi_jumplist_len = 0; | 1951 static int vi_jumplist_len = 0; |
1953 #endif | |
1954 | 1952 |
1955 static void | 1953 static void |
1956 write_one_mark(FILE *fp_out, int c, pos_T *pos) | 1954 write_one_mark(FILE *fp_out, int c, pos_T *pos) |
1957 { | 1955 { |
1958 if (pos->lnum != 0) | 1956 if (pos->lnum != 0) |
1976 write_one_mark(fp_out, '*', &pos); | 1974 write_one_mark(fp_out, '*', &pos); |
1977 | 1975 |
1978 write_one_mark(fp_out, '"', &buf->b_last_cursor); | 1976 write_one_mark(fp_out, '"', &buf->b_last_cursor); |
1979 write_one_mark(fp_out, '^', &buf->b_last_insert); | 1977 write_one_mark(fp_out, '^', &buf->b_last_insert); |
1980 write_one_mark(fp_out, '.', &buf->b_last_change); | 1978 write_one_mark(fp_out, '.', &buf->b_last_change); |
1981 #ifdef FEAT_JUMPLIST | |
1982 // changelist positions are stored oldest first | 1979 // changelist positions are stored oldest first |
1983 for (i = 0; i < buf->b_changelistlen; ++i) | 1980 for (i = 0; i < buf->b_changelistlen; ++i) |
1984 { | 1981 { |
1985 // skip duplicates | 1982 // skip duplicates |
1986 if (i == 0 || !EQUAL_POS(buf->b_changelist[i - 1], | 1983 if (i == 0 || !EQUAL_POS(buf->b_changelist[i - 1], |
1987 buf->b_changelist[i])) | 1984 buf->b_changelist[i])) |
1988 write_one_mark(fp_out, '+', &buf->b_changelist[i]); | 1985 write_one_mark(fp_out, '+', &buf->b_changelist[i]); |
1989 } | 1986 } |
1990 #endif | |
1991 for (i = 0; i < NMARKS; i++) | 1987 for (i = 0; i < NMARKS; i++) |
1992 write_one_mark(fp_out, 'a' + i, &buf->b_namedm[i]); | 1988 write_one_mark(fp_out, 'a' + i, &buf->b_namedm[i]); |
1993 } | 1989 } |
1994 | 1990 |
1995 /* | 1991 /* |
2171 ++vi_idx; // skip duplicate | 2167 ++vi_idx; // skip duplicate |
2172 } | 2168 } |
2173 write_one_filemark(fp, fm, '\'', i - NMARKS + '0'); | 2169 write_one_filemark(fp, fm, '\'', i - NMARKS + '0'); |
2174 } | 2170 } |
2175 | 2171 |
2176 #ifdef FEAT_JUMPLIST | |
2177 // Write the jumplist with -' | 2172 // Write the jumplist with -' |
2178 fputs(_("\n# Jumplist (newest first):\n"), fp); | 2173 fputs(_("\n# Jumplist (newest first):\n"), fp); |
2179 setpcmark(); // add current cursor position | 2174 setpcmark(); // add current cursor position |
2180 cleanup_jumplist(curwin, FALSE); | 2175 cleanup_jumplist(curwin, FALSE); |
2181 vi_idx = 0; | 2176 vi_idx = 0; |
2199 if (fm->fmark.fnum == 0 | 2194 if (fm->fmark.fnum == 0 |
2200 || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL | 2195 || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL |
2201 && !skip_for_viminfo(buf))) | 2196 && !skip_for_viminfo(buf))) |
2202 write_one_filemark(fp, fm, '-', '\''); | 2197 write_one_filemark(fp, fm, '-', '\''); |
2203 } | 2198 } |
2204 #endif | |
2205 } | 2199 } |
2206 | 2200 |
2207 /* | 2201 /* |
2208 * Compare functions for qsort() below, that compares b_last_used. | 2202 * Compare functions for qsort() below, that compares b_last_used. |
2209 */ | 2203 */ |
2410 { | 2404 { |
2411 case '"': curbuf->b_last_cursor = pos; break; | 2405 case '"': curbuf->b_last_cursor = pos; break; |
2412 case '^': curbuf->b_last_insert = pos; break; | 2406 case '^': curbuf->b_last_insert = pos; break; |
2413 case '.': curbuf->b_last_change = pos; break; | 2407 case '.': curbuf->b_last_change = pos; break; |
2414 case '+': | 2408 case '+': |
2415 #ifdef FEAT_JUMPLIST | |
2416 // changelist positions are stored oldest | 2409 // changelist positions are stored oldest |
2417 // first | 2410 // first |
2418 if (curbuf->b_changelistlen == JUMPLISTSIZE) | 2411 if (curbuf->b_changelistlen == JUMPLISTSIZE) |
2419 // list is full, remove oldest entry | 2412 // list is full, remove oldest entry |
2420 mch_memmove(curbuf->b_changelist, | 2413 mch_memmove(curbuf->b_changelist, |
2422 sizeof(pos_T) * (JUMPLISTSIZE - 1)); | 2415 sizeof(pos_T) * (JUMPLISTSIZE - 1)); |
2423 else | 2416 else |
2424 ++curbuf->b_changelistlen; | 2417 ++curbuf->b_changelistlen; |
2425 curbuf->b_changelist[ | 2418 curbuf->b_changelist[ |
2426 curbuf->b_changelistlen - 1] = pos; | 2419 curbuf->b_changelistlen - 1] = pos; |
2427 #endif | |
2428 break; | 2420 break; |
2429 | 2421 |
2430 // Using the line number for the last-used | 2422 // Using the line number for the last-used |
2431 // timestamp. | 2423 // timestamp. |
2432 case '*': curbuf->b_last_used = pos.lnum; break; | 2424 case '*': curbuf->b_last_used = pos.lnum; break; |
2440 fputs((char *)line, fp_out); | 2432 fputs((char *)line, fp_out); |
2441 } | 2433 } |
2442 | 2434 |
2443 if (load_marks) | 2435 if (load_marks) |
2444 { | 2436 { |
2445 #ifdef FEAT_JUMPLIST | |
2446 win_T *wp; | 2437 win_T *wp; |
2447 | 2438 |
2448 FOR_ALL_WINDOWS(wp) | 2439 FOR_ALL_WINDOWS(wp) |
2449 { | 2440 { |
2450 if (wp->w_buffer == curbuf) | 2441 if (wp->w_buffer == curbuf) |
2451 wp->w_changelistidx = curbuf->b_changelistlen; | 2442 wp->w_changelistidx = curbuf->b_changelistlen; |
2452 } | 2443 } |
2453 #endif | |
2454 if (flags & VIF_ONLY_CURBUF) | 2444 if (flags & VIF_ONLY_CURBUF) |
2455 break; | 2445 break; |
2456 } | 2446 } |
2457 } | 2447 } |
2458 | 2448 |
2502 ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str))) | 2492 ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str))) |
2503 || (*virp->vir_line == '-' && *str == '\''))) | 2493 || (*virp->vir_line == '-' && *str == '\''))) |
2504 { | 2494 { |
2505 if (*str == '\'') | 2495 if (*str == '\'') |
2506 { | 2496 { |
2507 #ifdef FEAT_JUMPLIST | |
2508 // If the jumplist isn't full insert fmark as oldest entry | 2497 // If the jumplist isn't full insert fmark as oldest entry |
2509 if (curwin->w_jumplistlen == JUMPLISTSIZE) | 2498 if (curwin->w_jumplistlen == JUMPLISTSIZE) |
2510 fm = NULL; | 2499 fm = NULL; |
2511 else | 2500 else |
2512 { | 2501 { |
2516 ++curwin->w_jumplistlen; | 2505 ++curwin->w_jumplistlen; |
2517 fm = &curwin->w_jumplist[0]; | 2506 fm = &curwin->w_jumplist[0]; |
2518 fm->fmark.mark.lnum = 0; | 2507 fm->fmark.mark.lnum = 0; |
2519 fm->fname = NULL; | 2508 fm->fname = NULL; |
2520 } | 2509 } |
2521 #else | |
2522 fm = NULL; | |
2523 #endif | |
2524 } | 2510 } |
2525 else if (VIM_ISDIGIT(*str)) | 2511 else if (VIM_ISDIGIT(*str)) |
2526 fm = &namedfm_p[*str - '0' + NMARKS]; | 2512 fm = &namedfm_p[*str - '0' + NMARKS]; |
2527 else | 2513 else |
2528 fm = &namedfm_p[*str - 'A']; | 2514 fm = &namedfm_p[*str - 'A']; |
2549 */ | 2535 */ |
2550 static void | 2536 static void |
2551 prepare_viminfo_marks(void) | 2537 prepare_viminfo_marks(void) |
2552 { | 2538 { |
2553 vi_namedfm = ALLOC_CLEAR_MULT(xfmark_T, NMARKS + EXTRA_MARKS); | 2539 vi_namedfm = ALLOC_CLEAR_MULT(xfmark_T, NMARKS + EXTRA_MARKS); |
2554 #ifdef FEAT_JUMPLIST | |
2555 vi_jumplist = ALLOC_CLEAR_MULT(xfmark_T, JUMPLISTSIZE); | 2540 vi_jumplist = ALLOC_CLEAR_MULT(xfmark_T, JUMPLISTSIZE); |
2556 vi_jumplist_len = 0; | 2541 vi_jumplist_len = 0; |
2557 #endif | |
2558 } | 2542 } |
2559 | 2543 |
2560 static void | 2544 static void |
2561 finish_viminfo_marks(void) | 2545 finish_viminfo_marks(void) |
2562 { | 2546 { |
2566 { | 2550 { |
2567 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i) | 2551 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i) |
2568 vim_free(vi_namedfm[i].fname); | 2552 vim_free(vi_namedfm[i].fname); |
2569 VIM_CLEAR(vi_namedfm); | 2553 VIM_CLEAR(vi_namedfm); |
2570 } | 2554 } |
2571 #ifdef FEAT_JUMPLIST | |
2572 if (vi_jumplist != NULL) | 2555 if (vi_jumplist != NULL) |
2573 { | 2556 { |
2574 for (i = 0; i < vi_jumplist_len; ++i) | 2557 for (i = 0; i < vi_jumplist_len; ++i) |
2575 vim_free(vi_jumplist[i].fname); | 2558 vim_free(vi_jumplist[i].fname); |
2576 VIM_CLEAR(vi_jumplist); | 2559 VIM_CLEAR(vi_jumplist); |
2577 } | 2560 } |
2578 #endif | |
2579 } | 2561 } |
2580 | 2562 |
2581 /* | 2563 /* |
2582 * Accept a new style mark line from the viminfo, store it when it's new. | 2564 * Accept a new style mark line from the viminfo, store it when it's new. |
2583 */ | 2565 */ |
2610 return; | 2592 return; |
2611 timestamp = (time_t)vp[3].bv_nr; | 2593 timestamp = (time_t)vp[3].bv_nr; |
2612 | 2594 |
2613 if (name == '\'') | 2595 if (name == '\'') |
2614 { | 2596 { |
2615 #ifdef FEAT_JUMPLIST | |
2616 if (vi_jumplist != NULL) | 2597 if (vi_jumplist != NULL) |
2617 { | 2598 { |
2618 if (vi_jumplist_len < JUMPLISTSIZE) | 2599 if (vi_jumplist_len < JUMPLISTSIZE) |
2619 fm = &vi_jumplist[vi_jumplist_len++]; | 2600 fm = &vi_jumplist[vi_jumplist_len++]; |
2620 } | 2601 } |
2665 fm->fmark.mark.lnum = 0; | 2646 fm->fmark.mark.lnum = 0; |
2666 fm->fname = NULL; | 2647 fm->fname = NULL; |
2667 fm->time_set = 0; | 2648 fm->time_set = 0; |
2668 } | 2649 } |
2669 } | 2650 } |
2670 #endif | |
2671 } | 2651 } |
2672 else | 2652 else |
2673 { | 2653 { |
2674 int idx; | 2654 int idx; |
2675 xfmark_T *namedfm_p = get_namedfm(); | 2655 xfmark_T *namedfm_p = get_namedfm(); |