Lines Matching refs:el
62 #define EL_CURSOR(el) \ argument
63 ((el)->el_line.cursor + (((el)->el_map.type == MAP_VI) && \
64 ((el)->el_map.current == (el)->el_map.alt)))
70 search_init(EditLine *el) in search_init() argument
73 el->el_search.patbuf = el_calloc(EL_BUFSIZ, in search_init()
74 sizeof(*el->el_search.patbuf)); in search_init()
75 if (el->el_search.patbuf == NULL) in search_init()
77 el->el_search.patbuf[0] = L'\0'; in search_init()
78 el->el_search.patlen = 0; in search_init()
79 el->el_search.patdir = -1; in search_init()
80 el->el_search.chacha = L'\0'; in search_init()
81 el->el_search.chadir = CHAR_FWD; in search_init()
82 el->el_search.chatflg = 0; in search_init()
91 search_end(EditLine *el) in search_end() argument
94 el_free(el->el_search.patbuf); in search_end()
95 el->el_search.patbuf = NULL; in search_end()
162 c_hmatch(EditLine *el, const wchar_t *str) in c_hmatch() argument
165 (void) fprintf(el->el_errfile, "match `%ls' with `%ls'\n", in c_hmatch()
166 el->el_search.patbuf, str); in c_hmatch()
169 return el_match(str, el->el_search.patbuf); in c_hmatch()
177 c_setpat(EditLine *el) in c_setpat() argument
179 if (el->el_state.lastcmd != ED_SEARCH_PREV_HISTORY && in c_setpat()
180 el->el_state.lastcmd != ED_SEARCH_NEXT_HISTORY) { in c_setpat()
181 el->el_search.patlen = in c_setpat()
182 (size_t)(EL_CURSOR(el) - el->el_line.buffer); in c_setpat()
183 if (el->el_search.patlen >= EL_BUFSIZ) in c_setpat()
184 el->el_search.patlen = EL_BUFSIZ - 1; in c_setpat()
185 (void) wcsncpy(el->el_search.patbuf, el->el_line.buffer, in c_setpat()
186 el->el_search.patlen); in c_setpat()
187 el->el_search.patbuf[el->el_search.patlen] = '\0'; in c_setpat()
190 (void) fprintf(el->el_errfile, "\neventno = %d\n", in c_setpat()
191 el->el_history.eventno); in c_setpat()
192 (void) fprintf(el->el_errfile, "patlen = %ld\n", el->el_search.patlen); in c_setpat()
193 (void) fprintf(el->el_errfile, "patbuf = \"%ls\"\n", in c_setpat()
194 el->el_search.patbuf); in c_setpat()
195 (void) fprintf(el->el_errfile, "cursor %ld lastchar %ld\n", in c_setpat()
196 EL_CURSOR(el) - el->el_line.buffer, in c_setpat()
197 el->el_line.lastchar - el->el_line.buffer); in c_setpat()
206 ce_inc_search(EditLine *el, int dir) in ce_inc_search() argument
211 wchar_t *ocursor = el->el_line.cursor, oldpchar = pchar, ch; in ce_inc_search()
216 int ohisteventno = el->el_history.eventno; in ce_inc_search()
217 size_t oldpatlen = el->el_search.patlen; in ce_inc_search()
221 if (el->el_line.lastchar + sizeof(STRfwd) / in ce_inc_search()
222 sizeof(*el->el_line.lastchar) + 2 + in ce_inc_search()
223 el->el_search.patlen >= el->el_line.limit) in ce_inc_search()
228 if (el->el_search.patlen == 0) { /* first round */ in ce_inc_search()
232 el->el_search.patbuf[el->el_search.patlen++] = '.'; in ce_inc_search()
233 el->el_search.patbuf[el->el_search.patlen++] = '*'; in ce_inc_search()
239 *el->el_line.lastchar++ = '\n'; in ce_inc_search()
241 *cp; *el->el_line.lastchar++ = *cp++) in ce_inc_search()
243 *el->el_line.lastchar++ = pchar; in ce_inc_search()
244 for (cp = &el->el_search.patbuf[LEN]; in ce_inc_search()
245 cp < &el->el_search.patbuf[el->el_search.patlen]; in ce_inc_search()
246 *el->el_line.lastchar++ = *cp++) in ce_inc_search()
248 *el->el_line.lastchar = '\0'; in ce_inc_search()
249 re_refresh(el); in ce_inc_search()
251 if (el_wgetc(el, &ch) != 1) in ce_inc_search()
252 return ed_end_of_file(el, 0); in ce_inc_search()
254 switch (el->el_map.current[(unsigned char) ch]) { in ce_inc_search()
257 if (el->el_search.patlen >= EL_BUFSIZ - LEN) in ce_inc_search()
258 terminal_beep(el); in ce_inc_search()
260 el->el_search.patbuf[el->el_search.patlen++] = in ce_inc_search()
262 *el->el_line.lastchar++ = ch; in ce_inc_search()
263 *el->el_line.lastchar = '\0'; in ce_inc_search()
264 re_refresh(el); in ce_inc_search()
280 if (el->el_search.patlen > LEN) in ce_inc_search()
283 terminal_beep(el); in ce_inc_search()
295 for (cp = &el->el_search.patbuf[LEN];; cp++) in ce_inc_search()
296 if (cp >= &el->el_search.patbuf[ in ce_inc_search()
297 el->el_search.patlen]) { in ce_inc_search()
298 if (el->el_line.cursor == in ce_inc_search()
299 el->el_line.buffer) in ce_inc_search()
301 el->el_line.cursor += in ce_inc_search()
302 el->el_search.patlen - LEN - 1; in ce_inc_search()
303 cp = c__next_word(el->el_line.cursor, in ce_inc_search()
304 el->el_line.lastchar, 1, in ce_inc_search()
306 while (el->el_line.cursor < cp && in ce_inc_search()
307 *el->el_line.cursor != '\n') { in ce_inc_search()
308 if (el->el_search.patlen >= in ce_inc_search()
310 terminal_beep(el); in ce_inc_search()
313 el->el_search.patbuf[el->el_search.patlen++] = in ce_inc_search()
314 *el->el_line.cursor; in ce_inc_search()
315 *el->el_line.lastchar++ = in ce_inc_search()
316 *el->el_line.cursor++; in ce_inc_search()
318 el->el_line.cursor = ocursor; in ce_inc_search()
319 *el->el_line.lastchar = '\0'; in ce_inc_search()
320 re_refresh(el); in ce_inc_search()
323 terminal_beep(el); in ce_inc_search()
330 el_wpush(el, endcmd); in ce_inc_search()
341 while (el->el_line.lastchar > el->el_line.buffer && in ce_inc_search()
342 *el->el_line.lastchar != '\n') in ce_inc_search()
343 *el->el_line.lastchar-- = '\0'; in ce_inc_search()
344 *el->el_line.lastchar = '\0'; in ce_inc_search()
349 for (cp = &el->el_search.patbuf[el->el_search.patlen-1], in ce_inc_search()
351 cp >= &el->el_search.patbuf[LEN]; in ce_inc_search()
357 if (el->el_search.patlen > LEN && ch != L'[') { in ce_inc_search()
360 el->el_history.eventno = in ce_inc_search()
362 if (hist_get(el) == CC_ERROR) in ce_inc_search()
366 (void) hist_get(el); in ce_inc_search()
367 el->el_line.cursor = newdir == in ce_inc_search()
369 el->el_line.lastchar : in ce_inc_search()
370 el->el_line.buffer; in ce_inc_search()
372 el->el_line.cursor += in ce_inc_search()
378 el->el_search.patbuf[el->el_search.patlen++] = in ce_inc_search()
380 el->el_search.patbuf[el->el_search.patlen++] = in ce_inc_search()
383 el->el_search.patbuf[el->el_search.patlen] = in ce_inc_search()
385 if (el->el_line.cursor < el->el_line.buffer || in ce_inc_search()
386 el->el_line.cursor > el->el_line.lastchar || in ce_inc_search()
387 (ret = ce_search_line(el, newdir)) in ce_inc_search()
390 el->el_state.lastcmd = in ce_inc_search()
394 ed_search_prev_history(el, 0) : in ce_inc_search()
395 ed_search_next_history(el, 0)); in ce_inc_search()
397 el->el_line.cursor = newdir == in ce_inc_search()
399 el->el_line.lastchar : in ce_inc_search()
400 el->el_line.buffer; in ce_inc_search()
401 (void) ce_search_line(el, in ce_inc_search()
405 el->el_search.patlen -= LEN; in ce_inc_search()
406 el->el_search.patbuf[el->el_search.patlen] = in ce_inc_search()
409 terminal_beep(el); in ce_inc_search()
410 if (el->el_history.eventno != in ce_inc_search()
412 el->el_history.eventno = in ce_inc_search()
414 if (hist_get(el) == CC_ERROR) in ce_inc_search()
417 el->el_line.cursor = ocursor; in ce_inc_search()
423 ret = ce_inc_search(el, newdir); in ce_inc_search()
436 el->el_search.patlen = oldpatlen; in ce_inc_search()
437 if (el->el_history.eventno != ohisteventno) { in ce_inc_search()
438 el->el_history.eventno = ohisteventno; in ce_inc_search()
439 if (hist_get(el) == CC_ERROR) in ce_inc_search()
442 el->el_line.cursor = ocursor; in ce_inc_search()
444 re_refresh(el); in ce_inc_search()
456 cv_search(EditLine *el, int dir) in cv_search() argument
468 el->el_search.patdir = dir; in cv_search()
470 tmplen = c_gets(el, &tmpbuf[LEN], in cv_search()
483 if (el->el_search.patlen == 0) { in cv_search()
484 re_refresh(el); in cv_search()
488 if (el->el_search.patbuf[0] != '.' && in cv_search()
489 el->el_search.patbuf[0] != '*') { in cv_search()
490 (void) wcsncpy(tmpbuf, el->el_search.patbuf, in cv_search()
492 el->el_search.patbuf[0] = '.'; in cv_search()
493 el->el_search.patbuf[1] = '*'; in cv_search()
494 (void) wcsncpy(&el->el_search.patbuf[2], tmpbuf, in cv_search()
496 el->el_search.patlen++; in cv_search()
497 el->el_search.patbuf[el->el_search.patlen++] = '.'; in cv_search()
498 el->el_search.patbuf[el->el_search.patlen++] = '*'; in cv_search()
499 el->el_search.patbuf[el->el_search.patlen] = '\0'; in cv_search()
508 (void) wcsncpy(el->el_search.patbuf, tmpbuf, EL_BUFSIZ - 1); in cv_search()
509 el->el_search.patlen = (size_t)tmplen; in cv_search()
511 el->el_state.lastcmd = (el_action_t) dir; /* avoid c_setpat */ in cv_search()
512 el->el_line.cursor = el->el_line.lastchar = el->el_line.buffer; in cv_search()
513 if ((dir == ED_SEARCH_PREV_HISTORY ? ed_search_prev_history(el, 0) : in cv_search()
514 ed_search_next_history(el, 0)) == CC_ERROR) { in cv_search()
515 re_refresh(el); in cv_search()
519 re_refresh(el); in cv_search()
520 return ed_newline(el, 0); in cv_search()
530 ce_search_line(EditLine *el, int dir) in ce_search_line() argument
532 wchar_t *cp = el->el_line.cursor; in ce_search_line()
533 wchar_t *pattern = el->el_search.patbuf; in ce_search_line()
545 for (; cp >= el->el_line.buffer; cp--) { in ce_search_line()
548 el->el_line.cursor = cp; in ce_search_line()
555 for (; *cp != '\0' && cp < el->el_line.limit; cp++) { in ce_search_line()
558 el->el_line.cursor = cp; in ce_search_line()
572 cv_repeat_srch(EditLine *el, wint_t c) in cv_repeat_srch() argument
577 (void) fprintf(el->el_errfile, "dir %d patlen %ld patbuf %s\n", in cv_repeat_srch()
578 c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf, &conv)); in cv_repeat_srch()
581 el->el_state.lastcmd = (el_action_t) c; /* Hack to stop c_setpat */ in cv_repeat_srch()
582 el->el_line.lastchar = el->el_line.buffer; in cv_repeat_srch()
586 return ed_search_next_history(el, 0); in cv_repeat_srch()
588 return ed_search_prev_history(el, 0); in cv_repeat_srch()
599 cv_csearch(EditLine *el, int direction, wint_t ch, int count, int tflag) in cv_csearch() argument
608 if (el_wgetc(el, &c) != 1) in cv_csearch()
609 return ed_end_of_file(el, 0); in cv_csearch()
614 el->el_search.chacha = ch; in cv_csearch()
615 el->el_search.chadir = direction; in cv_csearch()
616 el->el_search.chatflg = (char)tflag; in cv_csearch()
618 cp = el->el_line.cursor; in cv_csearch()
623 if (cp >= el->el_line.lastchar) in cv_csearch()
625 if (cp < el->el_line.buffer) in cv_csearch()
635 el->el_line.cursor = cp; in cv_csearch()
637 if (el->el_chared.c_vcmd.action != NOP) { in cv_csearch()
639 el->el_line.cursor++; in cv_csearch()
640 cv_delfini(el); in cv_csearch()