Lines Matching refs:el

47 #include "el.h"
58 cv_undo(EditLine *el)
60 c_undo_t *vu = &el->el_chared.c_undo;
61 c_redo_t *r = &el->el_chared.c_redo;
65 size = el->el_line.lastchar - el->el_line.buffer;
67 vu->cursor = (int)(el->el_line.cursor - el->el_line.buffer);
68 memcpy(vu->buf, el->el_line.buffer, size);
71 r->count = el->el_state.doingarg ? el->el_state.argument : 0;
72 r->action = el->el_chared.c_vcmd.action;
74 r->cmd = el->el_state.thiscmd;
75 r->ch = el->el_state.thisch;
82 cv_yank(EditLine *el, const char *ptr, int size)
84 c_kill_t *k = &el->el_chared.c_kill;
95 c_insert(EditLine *el, int num)
99 if (el->el_line.lastchar + num >= el->el_line.limit) {
100 if (!ch_enlargebufs(el, (size_t)num))
104 if (el->el_line.cursor < el->el_line.lastchar) {
106 for (cp = el->el_line.lastchar; cp >= el->el_line.cursor; cp--)
109 el->el_line.lastchar += num;
117 c_delafter(EditLine *el, int num)
120 if (el->el_line.cursor + num > el->el_line.lastchar)
121 num = (int)(el->el_line.lastchar - el->el_line.cursor);
123 if (el->el_map.current != el->el_map.emacs) {
124 cv_undo(el);
125 cv_yank(el, el->el_line.cursor, num);
131 for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++)
134 el->el_line.lastchar -= num;
143 c_delafter1(EditLine *el)
147 for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++)
150 el->el_line.lastchar--;
158 c_delbefore(EditLine *el, int num)
161 if (el->el_line.cursor - num < el->el_line.buffer)
162 num = (int)(el->el_line.cursor - el->el_line.buffer);
164 if (el->el_map.current != el->el_map.emacs) {
165 cv_undo(el);
166 cv_yank(el, el->el_line.cursor - num, num);
172 for (cp = el->el_line.cursor - num;
173 cp <= el->el_line.lastchar;
177 el->el_line.lastchar -= num;
186 c_delbefore1(EditLine *el)
190 for (cp = el->el_line.cursor - 1; cp <= el->el_line.lastchar; cp++)
193 el->el_line.lastchar--;
277 cv_next_word(EditLine *el, char *p, char *high, int n, int (*wtest)(int))
289 if (n || el->el_chared.c_vcmd.action != (DELETE|INSERT))
366 cv_delfini(EditLine *el)
369 int action = el->el_chared.c_vcmd.action;
372 el->el_map.current = el->el_map.key;
374 if (el->el_chared.c_vcmd.pos == 0)
378 size = (int)(el->el_line.cursor - el->el_chared.c_vcmd.pos);
381 el->el_line.cursor = el->el_chared.c_vcmd.pos;
384 cv_yank(el, el->el_line.cursor, size);
386 cv_yank(el, el->el_line.cursor + size, -size);
389 c_delafter(el, size);
390 re_refresh_cursor(el);
392 c_delbefore(el, -size);
393 el->el_line.cursor += size;
396 el->el_chared.c_vcmd.action = NOP;
448 ch_init(EditLine *el)
450 c_macro_t *ma = &el->el_chared.c_macro;
452 el->el_line.buffer = (char *) el_malloc(EL_BUFSIZ);
453 if (el->el_line.buffer == NULL)
456 (void) memset(el->el_line.buffer, 0, EL_BUFSIZ);
457 el->el_line.cursor = el->el_line.buffer;
458 el->el_line.lastchar = el->el_line.buffer;
459 el->el_line.limit = &el->el_line.buffer[EL_BUFSIZ - EL_LEAVE];
461 el->el_chared.c_undo.buf = (char *) el_malloc(EL_BUFSIZ);
462 if (el->el_chared.c_undo.buf == NULL)
464 (void) memset(el->el_chared.c_undo.buf, 0, EL_BUFSIZ);
465 el->el_chared.c_undo.len = -1;
466 el->el_chared.c_undo.cursor = 0;
467 el->el_chared.c_redo.buf = (char *) el_malloc(EL_BUFSIZ);
468 if (el->el_chared.c_redo.buf == NULL)
470 el->el_chared.c_redo.pos = el->el_chared.c_redo.buf;
471 el->el_chared.c_redo.lim = el->el_chared.c_redo.buf + EL_BUFSIZ;
472 el->el_chared.c_redo.cmd = ED_UNASSIGNED;
474 el->el_chared.c_vcmd.action = NOP;
475 el->el_chared.c_vcmd.pos = el->el_line.buffer;
477 el->el_chared.c_kill.buf = (char *) el_malloc(EL_BUFSIZ);
478 if (el->el_chared.c_kill.buf == NULL)
480 (void) memset(el->el_chared.c_kill.buf, 0, EL_BUFSIZ);
481 el->el_chared.c_kill.mark = el->el_line.buffer;
482 el->el_chared.c_kill.last = el->el_chared.c_kill.buf;
484 el->el_map.current = el->el_map.key;
486 el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */
487 el->el_state.doingarg = 0;
488 el->el_state.metanext = 0;
489 el->el_state.argument = 1;
490 el->el_state.lastcmd = ED_UNASSIGNED;
504 ch_reset(EditLine *el, int mclear)
506 el->el_line.cursor = el->el_line.buffer;
507 el->el_line.lastchar = el->el_line.buffer;
509 el->el_chared.c_undo.len = -1;
510 el->el_chared.c_undo.cursor = 0;
512 el->el_chared.c_vcmd.action = NOP;
513 el->el_chared.c_vcmd.pos = el->el_line.buffer;
515 el->el_chared.c_kill.mark = el->el_line.buffer;
517 el->el_map.current = el->el_map.key;
519 el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */
520 el->el_state.doingarg = 0;
521 el->el_state.metanext = 0;
522 el->el_state.argument = 1;
523 el->el_state.lastcmd = ED_UNASSIGNED;
525 el->el_history.eventno = 0;
528 ch__clearmacro(el);
532 ch__clearmacro(EditLine *el)
534 c_macro_t *ma = &el->el_chared.c_macro;
544 ch_enlargebufs(EditLine *el, size_t addlen)
549 sz = el->el_line.limit - el->el_line.buffer + EL_LEAVE;
563 newbuffer = el_realloc(el->el_line.buffer, newsz);
570 oldbuf = el->el_line.buffer;
572 el->el_line.buffer = newbuffer;
573 el->el_line.cursor = newbuffer + (el->el_line.cursor - oldbuf);
574 el->el_line.lastchar = newbuffer + (el->el_line.lastchar - oldbuf);
576 el->el_line.limit = &newbuffer[sz - EL_LEAVE];
581 newbuffer = el_realloc(el->el_chared.c_kill.buf, newsz);
588 oldkbuf = el->el_chared.c_kill.buf;
590 el->el_chared.c_kill.buf = newbuffer;
591 el->el_chared.c_kill.last = newbuffer +
592 (el->el_chared.c_kill.last - oldkbuf);
593 el->el_chared.c_kill.mark = el->el_line.buffer +
594 (el->el_chared.c_kill.mark - oldbuf);
599 newbuffer = el_realloc(el->el_chared.c_undo.buf, newsz);
605 el->el_chared.c_undo.buf = newbuffer;
607 newbuffer = el_realloc(el->el_chared.c_redo.buf, newsz);
610 el->el_chared.c_redo.pos = newbuffer +
611 (el->el_chared.c_redo.pos - el->el_chared.c_redo.buf);
612 el->el_chared.c_redo.lim = newbuffer +
613 (el->el_chared.c_redo.lim - el->el_chared.c_redo.buf);
614 el->el_chared.c_redo.buf = newbuffer;
616 if (!hist_enlargebuf(el, sz, newsz))
620 el->el_line.limit = &el->el_line.buffer[newsz - EL_LEAVE];
628 ch_end(EditLine *el)
630 el_free((ptr_t) el->el_line.buffer);
631 el->el_line.buffer = NULL;
632 el->el_line.limit = NULL;
633 el_free((ptr_t) el->el_chared.c_undo.buf);
634 el->el_chared.c_undo.buf = NULL;
635 el_free((ptr_t) el->el_chared.c_redo.buf);
636 el->el_chared.c_redo.buf = NULL;
637 el->el_chared.c_redo.pos = NULL;
638 el->el_chared.c_redo.lim = NULL;
639 el->el_chared.c_redo.cmd = ED_UNASSIGNED;
640 el_free((ptr_t) el->el_chared.c_kill.buf);
641 el->el_chared.c_kill.buf = NULL;
642 ch_reset(el, 1);
643 el_free((ptr_t) el->el_chared.c_macro.macro);
644 el->el_chared.c_macro.macro = NULL;
652 el_insertstr(EditLine *el, const char *s)
658 if (el->el_line.lastchar + len >= el->el_line.limit) {
659 if (!ch_enlargebufs(el, len))
663 c_insert(el, (int)len);
665 *el->el_line.cursor++ = *s++;
674 el_deletestr(EditLine *el, int n)
679 if (el->el_line.cursor < &el->el_line.buffer[n])
682 c_delbefore(el, n); /* delete before dot */
683 el->el_line.cursor -= n;
684 if (el->el_line.cursor < el->el_line.buffer)
685 el->el_line.cursor = el->el_line.buffer;
692 c_gets(EditLine *el, char *buf, const char *prompt)
696 char *cp = el->el_line.buffer;
706 el->el_line.cursor = cp;
708 el->el_line.lastchar = cp + 1;
709 re_refresh(el);
711 if (el_getc(el, &ch) != 1) {
712 ed_end_of_file(el, 0);
736 term_beep(el);
746 el->el_line.buffer[0] = '\0';
747 el->el_line.lastchar = el->el_line.buffer;
748 el->el_line.cursor = el->el_line.buffer;
757 c_hpos(EditLine *el)
764 if (el->el_line.cursor == el->el_line.buffer)
767 for (ptr = el->el_line.cursor - 1;
768 ptr >= el->el_line.buffer && *ptr != '\n';
771 return (int)(el->el_line.cursor - ptr - 1);