Lines Matching refs:el
51 #include "el.h"
62 cv_undo(EditLine *el)
64 c_undo_t *vu = &el->el_chared.c_undo;
65 c_redo_t *r = &el->el_chared.c_redo;
69 size = (size_t)(el->el_line.lastchar - el->el_line.buffer);
71 vu->cursor = (int)(el->el_line.cursor - el->el_line.buffer);
72 (void)memcpy(vu->buf, el->el_line.buffer, size * sizeof(*vu->buf));
75 r->count = el->el_state.doingarg ? el->el_state.argument : 0;
76 r->action = el->el_chared.c_vcmd.action;
78 r->cmd = el->el_state.thiscmd;
79 r->ch = el->el_state.thisch;
86 cv_yank(EditLine *el, const wchar_t *ptr, int size)
88 c_kill_t *k = &el->el_chared.c_kill;
99 c_insert(EditLine *el, int num)
103 if (el->el_line.lastchar + num >= el->el_line.limit) {
104 if (!ch_enlargebufs(el, (size_t)num))
108 if (el->el_line.cursor < el->el_line.lastchar) {
110 for (cp = el->el_line.lastchar; cp >= el->el_line.cursor; cp--)
113 el->el_line.lastchar += num;
121 c_delafter(EditLine *el, int num)
124 if (el->el_line.cursor + num > el->el_line.lastchar)
125 num = (int)(el->el_line.lastchar - el->el_line.cursor);
127 if (el->el_map.current != el->el_map.emacs) {
128 cv_undo(el);
129 cv_yank(el, el->el_line.cursor, num);
135 for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++)
138 el->el_line.lastchar -= num;
147 c_delafter1(EditLine *el)
151 for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++)
154 el->el_line.lastchar--;
162 c_delbefore(EditLine *el, int num)
165 if (el->el_line.cursor - num < el->el_line.buffer)
166 num = (int)(el->el_line.cursor - el->el_line.buffer);
168 if (el->el_map.current != el->el_map.emacs) {
169 cv_undo(el);
170 cv_yank(el, el->el_line.cursor - num, num);
176 for (cp = el->el_line.cursor - num;
177 &cp[num] <= el->el_line.lastchar;
181 el->el_line.lastchar -= num;
190 c_delbefore1(EditLine *el)
194 for (cp = el->el_line.cursor - 1; cp <= el->el_line.lastchar; cp++)
197 el->el_line.lastchar--;
281 cv_next_word(EditLine *el, wchar_t *p, wchar_t *high, int n,
294 if (n || el->el_chared.c_vcmd.action != (DELETE|INSERT))
339 cv_delfini(EditLine *el)
342 int action = el->el_chared.c_vcmd.action;
345 el->el_map.current = el->el_map.key;
347 if (el->el_chared.c_vcmd.pos == 0)
351 size = (int)(el->el_line.cursor - el->el_chared.c_vcmd.pos);
354 el->el_line.cursor = el->el_chared.c_vcmd.pos;
357 cv_yank(el, el->el_line.cursor, size);
359 cv_yank(el, el->el_line.cursor + size, -size);
362 c_delafter(el, size);
363 re_refresh_cursor(el);
365 c_delbefore(el, -size);
366 el->el_line.cursor += size;
369 el->el_chared.c_vcmd.action = NOP;
399 ch_init(EditLine *el)
401 el->el_line.buffer = el_calloc(EL_BUFSIZ,
402 sizeof(*el->el_line.buffer));
403 if (el->el_line.buffer == NULL)
406 el->el_line.cursor = el->el_line.buffer;
407 el->el_line.lastchar = el->el_line.buffer;
408 el->el_line.limit = &el->el_line.buffer[EL_BUFSIZ - EL_LEAVE];
410 el->el_chared.c_undo.buf = el_calloc(EL_BUFSIZ,
411 sizeof(*el->el_chared.c_undo.buf));
412 if (el->el_chared.c_undo.buf == NULL)
414 el->el_chared.c_undo.len = -1;
415 el->el_chared.c_undo.cursor = 0;
416 el->el_chared.c_redo.buf = el_calloc(EL_BUFSIZ,
417 sizeof(*el->el_chared.c_redo.buf));
418 if (el->el_chared.c_redo.buf == NULL)
420 el->el_chared.c_redo.pos = el->el_chared.c_redo.buf;
421 el->el_chared.c_redo.lim = el->el_chared.c_redo.buf + EL_BUFSIZ;
422 el->el_chared.c_redo.cmd = ED_UNASSIGNED;
424 el->el_chared.c_vcmd.action = NOP;
425 el->el_chared.c_vcmd.pos = el->el_line.buffer;
427 el->el_chared.c_kill.buf = el_calloc(EL_BUFSIZ,
428 sizeof(*el->el_chared.c_kill.buf));
429 if (el->el_chared.c_kill.buf == NULL)
431 el->el_chared.c_kill.mark = el->el_line.buffer;
432 el->el_chared.c_kill.last = el->el_chared.c_kill.buf;
433 el->el_chared.c_resizefun = NULL;
434 el->el_chared.c_resizearg = NULL;
435 el->el_chared.c_aliasfun = NULL;
436 el->el_chared.c_aliasarg = NULL;
438 el->el_map.current = el->el_map.key;
440 el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */
441 el->el_state.doingarg = 0;
442 el->el_state.metanext = 0;
443 el->el_state.argument = 1;
444 el->el_state.lastcmd = ED_UNASSIGNED;
448 ch_end(el);
456 ch_reset(EditLine *el)
458 el->el_line.cursor = el->el_line.buffer;
459 el->el_line.lastchar = el->el_line.buffer;
461 el->el_chared.c_undo.len = -1;
462 el->el_chared.c_undo.cursor = 0;
464 el->el_chared.c_vcmd.action = NOP;
465 el->el_chared.c_vcmd.pos = el->el_line.buffer;
467 el->el_chared.c_kill.mark = el->el_line.buffer;
469 el->el_map.current = el->el_map.key;
471 el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */
472 el->el_state.doingarg = 0;
473 el->el_state.metanext = 0;
474 el->el_state.argument = 1;
475 el->el_state.lastcmd = ED_UNASSIGNED;
477 el->el_history.eventno = 0;
485 ch_enlargebufs(EditLine *el, size_t addlen)
490 sz = (size_t)(el->el_line.limit - el->el_line.buffer + EL_LEAVE);
504 newbuffer = el_realloc(el->el_line.buffer, newsz * sizeof(*newbuffer));
511 oldbuf = el->el_line.buffer;
513 el->el_line.buffer = newbuffer;
514 el->el_line.cursor = newbuffer + (el->el_line.cursor - oldbuf);
515 el->el_line.lastchar = newbuffer + (el->el_line.lastchar - oldbuf);
517 el->el_line.limit = &newbuffer[sz - EL_LEAVE];
522 newbuffer = el_realloc(el->el_chared.c_kill.buf, newsz *
530 oldkbuf = el->el_chared.c_kill.buf;
532 el->el_chared.c_kill.buf = newbuffer;
533 el->el_chared.c_kill.last = newbuffer +
534 (el->el_chared.c_kill.last - oldkbuf);
535 el->el_chared.c_kill.mark = el->el_line.buffer +
536 (el->el_chared.c_kill.mark - oldbuf);
541 newbuffer = el_realloc(el->el_chared.c_undo.buf,
548 el->el_chared.c_undo.buf = newbuffer;
550 newbuffer = el_realloc(el->el_chared.c_redo.buf,
554 el->el_chared.c_redo.pos = newbuffer +
555 (el->el_chared.c_redo.pos - el->el_chared.c_redo.buf);
556 el->el_chared.c_redo.lim = newbuffer +
557 (el->el_chared.c_redo.lim - el->el_chared.c_redo.buf);
558 el->el_chared.c_redo.buf = newbuffer;
560 if (!hist_enlargebuf(el, sz, newsz))
564 el->el_line.limit = &el->el_line.buffer[newsz - EL_LEAVE];
565 if (el->el_chared.c_resizefun)
566 (*el->el_chared.c_resizefun)(el, el->el_chared.c_resizearg);
574 ch_end(EditLine *el)
576 el_free(el->el_line.buffer);
577 el->el_line.buffer = NULL;
578 el->el_line.limit = NULL;
579 el_free(el->el_chared.c_undo.buf);
580 el->el_chared.c_undo.buf = NULL;
581 el_free(el->el_chared.c_redo.buf);
582 el->el_chared.c_redo.buf = NULL;
583 el->el_chared.c_redo.pos = NULL;
584 el->el_chared.c_redo.lim = NULL;
585 el->el_chared.c_redo.cmd = ED_UNASSIGNED;
586 el_free(el->el_chared.c_kill.buf);
587 el->el_chared.c_kill.buf = NULL;
588 ch_reset(el);
596 el_winsertstr(EditLine *el, const wchar_t *s)
602 if (el->el_line.lastchar + len >= el->el_line.limit) {
603 if (!ch_enlargebufs(el, len))
607 c_insert(el, (int)len);
609 *el->el_line.cursor++ = *s++;
618 el_deletestr(EditLine *el, int n)
623 if (el->el_line.cursor < &el->el_line.buffer[n])
626 c_delbefore(el, n); /* delete before dot */
627 el->el_line.cursor -= n;
628 if (el->el_line.cursor < el->el_line.buffer)
629 el->el_line.cursor = el->el_line.buffer;
636 el_deletestr1(EditLine *el, int start, int end)
644 line_length = (size_t)(el->el_line.lastchar - el->el_line.buffer);
653 p1 = el->el_line.buffer + start;
654 p2 = el->el_line.buffer + end;
657 el->el_line.lastchar--;
660 if (el->el_line.cursor < el->el_line.buffer)
661 el->el_line.cursor = el->el_line.buffer;
670 el_wreplacestr(EditLine *el, const wchar_t *s)
678 if (el->el_line.buffer + len >= el->el_line.limit) {
679 if (!ch_enlargebufs(el, len))
683 p = el->el_line.buffer;
687 el->el_line.buffer[len] = '\0';
688 el->el_line.lastchar = el->el_line.buffer + len;
689 if (el->el_line.cursor > el->el_line.lastchar)
690 el->el_line.cursor = el->el_line.lastchar;
699 el_cursor(EditLine *el, int n)
704 el->el_line.cursor += n;
706 if (el->el_line.cursor < el->el_line.buffer)
707 el->el_line.cursor = el->el_line.buffer;
708 if (el->el_line.cursor > el->el_line.lastchar)
709 el->el_line.cursor = el->el_line.lastchar;
711 return (int)(el->el_line.cursor - el->el_line.buffer);
718 c_gets(EditLine *el, wchar_t *buf, const wchar_t *prompt)
721 wchar_t *cp = el->el_line.buffer, ch;
731 el->el_line.cursor = cp;
733 el->el_line.lastchar = cp + 1;
734 re_refresh(el);
736 if (el_wgetc(el, &ch) != 1) {
737 ed_end_of_file(el, 0);
762 terminal_beep(el);
772 el->el_line.buffer[0] = '\0';
773 el->el_line.lastchar = el->el_line.buffer;
774 el->el_line.cursor = el->el_line.buffer;
783 c_hpos(EditLine *el)
790 if (el->el_line.cursor == el->el_line.buffer)
793 for (ptr = el->el_line.cursor - 1;
794 ptr >= el->el_line.buffer && *ptr != '\n';
797 return (int)(el->el_line.cursor - ptr - 1);
802 ch_resizefun(EditLine *el, el_zfunc_t f, void *a)
804 el->el_chared.c_resizefun = f;
805 el->el_chared.c_resizearg = a;
810 ch_aliasfun(EditLine *el, el_afunc_t f, void *a)
812 el->el_chared.c_aliasfun = f;
813 el->el_chared.c_aliasarg = a;