Lines Matching refs:el

57 #include "el.h"
63 #define EL_CURSOR(el) \
64 ((el)->el_line.cursor + (((el)->el_map.type == MAP_VI) && \
65 ((el)->el_map.current == (el)->el_map.alt)))
71 search_init(EditLine *el)
74 el->el_search.patbuf = el_malloc(EL_BUFSIZ *
75 sizeof(*el->el_search.patbuf));
76 if (el->el_search.patbuf == NULL)
78 el->el_search.patlen = 0;
79 el->el_search.patdir = -1;
80 el->el_search.chacha = '\0';
81 el->el_search.chadir = CHAR_FWD;
82 el->el_search.chatflg = 0;
91 search_end(EditLine *el)
94 el_free(el->el_search.patbuf);
95 el->el_search.patbuf = NULL;
164 c_hmatch(EditLine *el, const Char *str)
167 (void) fprintf(el->el_errfile, "match `%s' with `%s'\n",
168 el->el_search.patbuf, str);
171 return el_match(str, el->el_search.patbuf);
179 c_setpat(EditLine *el)
181 if (el->el_state.lastcmd != ED_SEARCH_PREV_HISTORY &&
182 el->el_state.lastcmd != ED_SEARCH_NEXT_HISTORY) {
183 el->el_search.patlen =
184 (size_t)(EL_CURSOR(el) - el->el_line.buffer);
185 if (el->el_search.patlen >= EL_BUFSIZ)
186 el->el_search.patlen = EL_BUFSIZ - 1;
187 if (el->el_search.patlen != 0) {
188 (void) Strncpy(el->el_search.patbuf, el->el_line.buffer,
189 el->el_search.patlen);
190 el->el_search.patbuf[el->el_search.patlen] = '\0';
192 el->el_search.patlen = Strlen(el->el_search.patbuf);
195 (void) fprintf(el->el_errfile, "\neventno = %d\n",
196 el->el_history.eventno);
197 (void) fprintf(el->el_errfile, "patlen = %d\n", el->el_search.patlen);
198 (void) fprintf(el->el_errfile, "patbuf = \"%s\"\n",
199 el->el_search.patbuf);
200 (void) fprintf(el->el_errfile, "cursor %d lastchar %d\n",
201 EL_CURSOR(el) - el->el_line.buffer,
202 el->el_line.lastchar - el->el_line.buffer);
211 ce_inc_search(EditLine *el, int dir)
217 Char *ocursor = el->el_line.cursor, oldpchar = pchar, ch;
223 int ohisteventno = el->el_history.eventno;
224 size_t oldpatlen = el->el_search.patlen;
228 if (el->el_line.lastchar + sizeof(STRfwd) /
229 sizeof(*el->el_line.lastchar) + 2 +
230 el->el_search.patlen >= el->el_line.limit)
235 if (el->el_search.patlen == 0) { /* first round */
239 el->el_search.patbuf[el->el_search.patlen++] = '.';
240 el->el_search.patbuf[el->el_search.patlen++] = '*';
246 *el->el_line.lastchar++ = '\n';
248 *cp; *el->el_line.lastchar++ = *cp++)
250 *el->el_line.lastchar++ = pchar;
251 for (cp = &el->el_search.patbuf[LEN];
252 cp < &el->el_search.patbuf[el->el_search.patlen];
253 *el->el_line.lastchar++ = *cp++)
255 *el->el_line.lastchar = '\0';
256 re_refresh(el);
258 if (el_wgetc(el, &wch) != 1)
259 return ed_end_of_file(el, 0);
263 switch (el->el_map.current[(unsigned char) ch]) {
266 if (el->el_search.patlen >= EL_BUFSIZ - LEN)
267 terminal_beep(el);
269 el->el_search.patbuf[el->el_search.patlen++] =
271 *el->el_line.lastchar++ = ch;
272 *el->el_line.lastchar = '\0';
273 re_refresh(el);
289 if (el->el_search.patlen > LEN)
292 terminal_beep(el);
304 for (cp = &el->el_search.patbuf[LEN];; cp++)
305 if (cp >= &el->el_search.patbuf[
306 el->el_search.patlen]) {
307 el->el_line.cursor +=
308 el->el_search.patlen - LEN - 1;
309 cp = c__next_word(el->el_line.cursor,
310 el->el_line.lastchar, 1,
312 while (el->el_line.cursor < cp &&
313 *el->el_line.cursor != '\n') {
314 if (el->el_search.patlen >=
316 terminal_beep(el);
319 el->el_search.patbuf[el->el_search.patlen++] =
320 *el->el_line.cursor;
321 *el->el_line.lastchar++ =
322 *el->el_line.cursor++;
324 el->el_line.cursor = ocursor;
325 *el->el_line.lastchar = '\0';
326 re_refresh(el);
329 terminal_beep(el);
336 FUN(el,push)(el, endcmd);
347 while (el->el_line.lastchar > el->el_line.buffer &&
348 *el->el_line.lastchar != '\n')
349 *el->el_line.lastchar-- = '\0';
350 *el->el_line.lastchar = '\0';
355 for (cp = &el->el_search.patbuf[el->el_search.patlen-1],
357 cp >= &el->el_search.patbuf[LEN];
363 if (el->el_search.patlen > LEN && ch != L'[') {
366 el->el_history.eventno =
368 if (hist_get(el) == CC_ERROR)
369 /* el->el_history.event
372 (void) hist_get(el);
373 el->el_line.cursor = newdir ==
375 el->el_line.lastchar :
376 el->el_line.buffer;
378 el->el_line.cursor +=
384 el->el_search.patbuf[el->el_search.patlen++] =
386 el->el_search.patbuf[el->el_search.patlen++] =
389 el->el_search.patbuf[el->el_search.patlen] =
391 if (el->el_line.cursor < el->el_line.buffer ||
392 el->el_line.cursor > el->el_line.lastchar ||
393 (ret = ce_search_line(el, newdir))
396 el->el_state.lastcmd =
400 ed_search_prev_history(el, 0) :
401 ed_search_next_history(el, 0));
403 el->el_line.cursor = newdir ==
405 el->el_line.lastchar :
406 el->el_line.buffer;
407 (void) ce_search_line(el,
411 el->el_search.patlen -= LEN;
412 el->el_search.patbuf[el->el_search.patlen] =
415 terminal_beep(el);
416 if (el->el_history.eventno !=
418 el->el_history.eventno =
420 if (hist_get(el) == CC_ERROR)
423 el->el_line.cursor = ocursor;
429 ret = ce_inc_search(el, newdir);
442 el->el_search.patlen = oldpatlen;
443 if (el->el_history.eventno != ohisteventno) {
444 el->el_history.eventno = ohisteventno;
445 if (hist_get(el) == CC_ERROR)
448 el->el_line.cursor = ocursor;
450 re_refresh(el);
462 cv_search(EditLine *el, int dir)
474 el->el_search.patdir = dir;
476 tmplen = c_gets(el, &tmpbuf[LEN],
489 if (el->el_search.patlen == 0) {
490 re_refresh(el);
494 if (el->el_search.patbuf[0] != '.' &&
495 el->el_search.patbuf[0] != '*') {
496 (void) Strncpy(tmpbuf, el->el_search.patbuf,
498 el->el_search.patbuf[0] = '.';
499 el->el_search.patbuf[1] = '*';
500 (void) Strncpy(&el->el_search.patbuf[2], tmpbuf,
502 el->el_search.patlen++;
503 el->el_search.patbuf[el->el_search.patlen++] = '.';
504 el->el_search.patbuf[el->el_search.patlen++] = '*';
505 el->el_search.patbuf[el->el_search.patlen] = '\0';
514 (void) Strncpy(el->el_search.patbuf, tmpbuf, EL_BUFSIZ - 1);
515 el->el_search.patlen = (size_t)tmplen;
517 el->el_state.lastcmd = (el_action_t) dir; /* avoid c_setpat */
518 el->el_line.cursor = el->el_line.lastchar = el->el_line.buffer;
519 if ((dir == ED_SEARCH_PREV_HISTORY ? ed_search_prev_history(el, 0) :
520 ed_search_next_history(el, 0)) == CC_ERROR) {
521 re_refresh(el);
525 re_refresh(el);
526 return ed_newline(el, 0);
536 ce_search_line(EditLine *el, int dir)
538 Char *cp = el->el_line.cursor;
539 Char *pattern = el->el_search.patbuf;
551 for (; cp >= el->el_line.buffer; cp--) {
554 el->el_line.cursor = cp;
561 for (; *cp != '\0' && cp < el->el_line.limit; cp++) {
564 el->el_line.cursor = cp;
578 cv_repeat_srch(EditLine *el, wint_t c)
582 (void) fprintf(el->el_errfile, "dir %d patlen %d patbuf %s\n",
583 c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf));
586 el->el_state.lastcmd = (el_action_t) c; /* Hack to stop c_setpat */
587 el->el_line.lastchar = el->el_line.buffer;
591 return ed_search_next_history(el, 0);
593 return ed_search_prev_history(el, 0);
604 cv_csearch(EditLine *el, int direction, wint_t ch, int count, int tflag)
612 if (el_wgetc(el, &ch) != 1)
613 return ed_end_of_file(el, 0);
617 el->el_search.chacha = (Char)ch;
618 el->el_search.chadir = direction;
619 el->el_search.chatflg = (char)tflag;
621 cp = el->el_line.cursor;
626 if (cp >= el->el_line.lastchar)
628 if (cp < el->el_line.buffer)
638 el->el_line.cursor = cp;
640 if (el->el_chared.c_vcmd.action != NOP) {
642 el->el_line.cursor++;
643 cv_delfini(el);