Mercurial > vim
comparison src/eval.c @ 6991:814f1f569e4a v7.4.813
patch 7.4.813
Problem: It is not possible to save and restore character search state.
Solution: Add getcharsearch() and setcharsearch(). (James McCoy)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 11 Aug 2015 14:26:19 +0200 |
parents | 1efa7c2b9368 |
children | fc099c55a36a |
comparison
equal
deleted
inserted
replaced
6990:9c248be4e7d2 | 6991:814f1f569e4a |
---|---|
553 static void f_get __ARGS((typval_T *argvars, typval_T *rettv)); | 553 static void f_get __ARGS((typval_T *argvars, typval_T *rettv)); |
554 static void f_getbufline __ARGS((typval_T *argvars, typval_T *rettv)); | 554 static void f_getbufline __ARGS((typval_T *argvars, typval_T *rettv)); |
555 static void f_getbufvar __ARGS((typval_T *argvars, typval_T *rettv)); | 555 static void f_getbufvar __ARGS((typval_T *argvars, typval_T *rettv)); |
556 static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv)); | 556 static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv)); |
557 static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv)); | 557 static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv)); |
558 static void f_getcharsearch __ARGS((typval_T *argvars, typval_T *rettv)); | |
558 static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv)); | 559 static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv)); |
559 static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); | 560 static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); |
560 static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv)); | 561 static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv)); |
561 static void f_getcmdwintype __ARGS((typval_T *argvars, typval_T *rettv)); | 562 static void f_getcmdwintype __ARGS((typval_T *argvars, typval_T *rettv)); |
562 static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv)); | 563 static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv)); |
686 static void f_searchpairpos __ARGS((typval_T *argvars, typval_T *rettv)); | 687 static void f_searchpairpos __ARGS((typval_T *argvars, typval_T *rettv)); |
687 static void f_searchpos __ARGS((typval_T *argvars, typval_T *rettv)); | 688 static void f_searchpos __ARGS((typval_T *argvars, typval_T *rettv)); |
688 static void f_server2client __ARGS((typval_T *argvars, typval_T *rettv)); | 689 static void f_server2client __ARGS((typval_T *argvars, typval_T *rettv)); |
689 static void f_serverlist __ARGS((typval_T *argvars, typval_T *rettv)); | 690 static void f_serverlist __ARGS((typval_T *argvars, typval_T *rettv)); |
690 static void f_setbufvar __ARGS((typval_T *argvars, typval_T *rettv)); | 691 static void f_setbufvar __ARGS((typval_T *argvars, typval_T *rettv)); |
692 static void f_setcharsearch __ARGS((typval_T *argvars, typval_T *rettv)); | |
691 static void f_setcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); | 693 static void f_setcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); |
692 static void f_setline __ARGS((typval_T *argvars, typval_T *rettv)); | 694 static void f_setline __ARGS((typval_T *argvars, typval_T *rettv)); |
693 static void f_setloclist __ARGS((typval_T *argvars, typval_T *rettv)); | 695 static void f_setloclist __ARGS((typval_T *argvars, typval_T *rettv)); |
694 static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv)); | 696 static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv)); |
695 static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv)); | 697 static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv)); |
8147 {"get", 2, 3, f_get}, | 8149 {"get", 2, 3, f_get}, |
8148 {"getbufline", 2, 3, f_getbufline}, | 8150 {"getbufline", 2, 3, f_getbufline}, |
8149 {"getbufvar", 2, 3, f_getbufvar}, | 8151 {"getbufvar", 2, 3, f_getbufvar}, |
8150 {"getchar", 0, 1, f_getchar}, | 8152 {"getchar", 0, 1, f_getchar}, |
8151 {"getcharmod", 0, 0, f_getcharmod}, | 8153 {"getcharmod", 0, 0, f_getcharmod}, |
8154 {"getcharsearch", 0, 0, f_getcharsearch}, | |
8152 {"getcmdline", 0, 0, f_getcmdline}, | 8155 {"getcmdline", 0, 0, f_getcmdline}, |
8153 {"getcmdpos", 0, 0, f_getcmdpos}, | 8156 {"getcmdpos", 0, 0, f_getcmdpos}, |
8154 {"getcmdtype", 0, 0, f_getcmdtype}, | 8157 {"getcmdtype", 0, 0, f_getcmdtype}, |
8155 {"getcmdwintype", 0, 0, f_getcmdwintype}, | 8158 {"getcmdwintype", 0, 0, f_getcmdwintype}, |
8156 {"getcurpos", 0, 0, f_getcurpos}, | 8159 {"getcurpos", 0, 0, f_getcurpos}, |
8283 {"searchpairpos", 3, 7, f_searchpairpos}, | 8286 {"searchpairpos", 3, 7, f_searchpairpos}, |
8284 {"searchpos", 1, 4, f_searchpos}, | 8287 {"searchpos", 1, 4, f_searchpos}, |
8285 {"server2client", 2, 2, f_server2client}, | 8288 {"server2client", 2, 2, f_server2client}, |
8286 {"serverlist", 0, 0, f_serverlist}, | 8289 {"serverlist", 0, 0, f_serverlist}, |
8287 {"setbufvar", 3, 3, f_setbufvar}, | 8290 {"setbufvar", 3, 3, f_setbufvar}, |
8291 {"setcharsearch", 1, 1, f_setcharsearch}, | |
8288 {"setcmdpos", 1, 1, f_setcmdpos}, | 8292 {"setcmdpos", 1, 1, f_setcmdpos}, |
8289 {"setline", 2, 2, f_setline}, | 8293 {"setline", 2, 2, f_setline}, |
8290 {"setloclist", 2, 3, f_setloclist}, | 8294 {"setloclist", 2, 3, f_setloclist}, |
8291 {"setmatches", 1, 1, f_setmatches}, | 8295 {"setmatches", 1, 1, f_setmatches}, |
8292 {"setpos", 2, 2, f_setpos}, | 8296 {"setpos", 2, 2, f_setpos}, |
11659 f_getcharmod(argvars, rettv) | 11663 f_getcharmod(argvars, rettv) |
11660 typval_T *argvars UNUSED; | 11664 typval_T *argvars UNUSED; |
11661 typval_T *rettv; | 11665 typval_T *rettv; |
11662 { | 11666 { |
11663 rettv->vval.v_number = mod_mask; | 11667 rettv->vval.v_number = mod_mask; |
11668 } | |
11669 | |
11670 /* | |
11671 * "getcharsearch()" function | |
11672 */ | |
11673 static void | |
11674 f_getcharsearch(argvars, rettv) | |
11675 typval_T *argvars UNUSED; | |
11676 typval_T *rettv; | |
11677 { | |
11678 if (rettv_dict_alloc(rettv) != FAIL) | |
11679 { | |
11680 dict_T *dict = rettv->vval.v_dict; | |
11681 | |
11682 dict_add_nr_str(dict, "char", 0L, last_csearch()); | |
11683 dict_add_nr_str(dict, "forward", last_csearch_forward(), NULL); | |
11684 dict_add_nr_str(dict, "until", last_csearch_until(), NULL); | |
11685 } | |
11664 } | 11686 } |
11665 | 11687 |
11666 /* | 11688 /* |
11667 * "getcmdline()" function | 11689 * "getcmdline()" function |
11668 */ | 11690 */ |
16999 } | 17021 } |
17000 } | 17022 } |
17001 | 17023 |
17002 /* reset notion of buffer */ | 17024 /* reset notion of buffer */ |
17003 aucmd_restbuf(&aco); | 17025 aucmd_restbuf(&aco); |
17026 } | |
17027 } | |
17028 | |
17029 static void | |
17030 f_setcharsearch(argvars, rettv) | |
17031 typval_T *argvars; | |
17032 typval_T *rettv UNUSED; | |
17033 { | |
17034 dict_T *d; | |
17035 dictitem_T *di; | |
17036 char_u *csearch; | |
17037 | |
17038 if (argvars[0].v_type != VAR_DICT) | |
17039 { | |
17040 EMSG(_(e_dictreq)); | |
17041 return; | |
17042 } | |
17043 | |
17044 if ((d = argvars[0].vval.v_dict) != NULL) | |
17045 { | |
17046 csearch = get_dict_string(d, (char_u *)"char", FALSE); | |
17047 if (csearch != NULL) | |
17048 { | |
17049 if (enc_utf8) | |
17050 { | |
17051 int pcc[MAX_MCO]; | |
17052 int c = utfc_ptr2char(csearch, pcc); | |
17053 set_last_csearch(c, csearch, utfc_ptr2len(csearch)); | |
17054 } | |
17055 else | |
17056 set_last_csearch(mb_ptr2char(csearch), | |
17057 csearch, mb_ptr2len(csearch)); | |
17058 } | |
17059 | |
17060 di = dict_find(d, (char_u *)"forward", -1); | |
17061 if (di != NULL) | |
17062 set_csearch_direction(get_tv_number(&di->di_tv) | |
17063 ? FORWARD : BACKWARD); | |
17064 | |
17065 di = dict_find(d, (char_u *)"until", -1); | |
17066 if (di != NULL) | |
17067 set_csearch_until(!!get_tv_number(&di->di_tv)); | |
17004 } | 17068 } |
17005 } | 17069 } |
17006 | 17070 |
17007 /* | 17071 /* |
17008 * "setcmdpos()" function | 17072 * "setcmdpos()" function |