Lines Matching defs:el

52 #include "el.h"
66 #define __F el->el_errfile
79 re_printstr(EditLine *el, const char *str, wchar_t *f, wchar_t *t)
96 re_nextline(EditLine *el)
98 el->el_refresh.r_cursor.h = 0; /* reset it. */
106 if (el->el_refresh.r_cursor.v + 1 >= el->el_terminal.t_size.v) {
107 int i, lins = el->el_terminal.t_size.v;
108 wint_t *firstline = el->el_vdisplay[0];
111 el->el_vdisplay[i - 1] = el->el_vdisplay[i];
114 el->el_vdisplay[i - 1] = firstline;
116 el->el_refresh.r_cursor.v++;
118 ELRE_ASSERT(el->el_refresh.r_cursor.v >= el->el_terminal.t_size.v,
120 el->el_refresh.r_cursor.v, el->el_terminal.t_size.v),
128 re_addc(EditLine *el, wint_t c)
133 re_putc(el, ' ', 1);
134 if ((el->el_refresh.r_cursor.h & 07) == 0)
139 int oldv = el->el_refresh.r_cursor.v;
140 re_putc(el, '\0', 0); /* assure end of line */
141 if (oldv == el->el_refresh.r_cursor.v) /* XXX */
142 re_nextline(el);
146 re_putc(el, c, 1);
153 re_putc(el, visbuf[i], 1);
163 re_putliteral(EditLine *el, const wchar_t *begin, const wchar_t *end)
165 coord_t *cur = &el->el_refresh.r_cursor;
167 int sizeh = el->el_terminal.t_size.h;
170 c = literal_add(el, begin, end, &w);
173 el->el_vdisplay[cur->v][cur->h] = c;
179 el->el_vdisplay[cur->v][cur->h + i] = MB_FILL_CHAR;
184 el->el_vdisplay[cur->v][sizeh] = '\0';
185 re_nextline(el);
193 re_putc(EditLine *el, wint_t c, int shift)
195 coord_t *cur = &el->el_refresh.r_cursor;
197 int sizeh = el->el_terminal.t_size.h;
204 re_putc(el, ' ', 1);
206 el->el_vdisplay[cur->v][cur->h] = c;
210 el->el_vdisplay[cur->v][cur->h + i] = MB_FILL_CHAR;
218 el->el_vdisplay[cur->v][sizeh] = '\0';
219 re_nextline(el);
231 re_refresh(EditLine *el)
240 ELRE_DEBUG(1, (__F, "el->el_line.buffer = :%ls:\r\n",
241 el->el_line.buffer));
243 literal_clear(el);
245 el->el_refresh.r_cursor.h = 0;
246 el->el_refresh.r_cursor.v = 0;
248 terminal_move_to_char(el, 0);
251 prompt_print(el, EL_RPROMPT);
254 el->el_refresh.r_cursor.h = 0;
255 el->el_refresh.r_cursor.v = 0;
257 if (el->el_line.cursor >= el->el_line.lastchar) {
258 if (el->el_map.current == el->el_map.alt
259 && el->el_line.lastchar != el->el_line.buffer)
260 el->el_line.cursor = el->el_line.lastchar - 1;
262 el->el_line.cursor = el->el_line.lastchar;
268 prompt_print(el, EL_PROMPT);
272 termsz = el->el_terminal.t_size.h * el->el_terminal.t_size.v;
273 if (el->el_line.lastchar - el->el_line.buffer > termsz) {
278 size_t rem = (el->el_line.lastchar-el->el_line.buffer)%termsz;
280 st = el->el_line.lastchar - rem
281 - (termsz - (((rem / el->el_terminal.t_size.v) - 1)
282 * el->el_terminal.t_size.v));
285 st = el->el_line.buffer;
287 for (cp = st; cp < el->el_line.lastchar; cp++) {
288 if (cp == el->el_line.cursor) {
291 cur.h = el->el_refresh.r_cursor.h;
292 cur.v = el->el_refresh.r_cursor.v;
294 if (w > 1 && el->el_refresh.r_cursor.h + w >
295 el->el_terminal.t_size.h) {
300 re_addc(el, *cp);
304 cur.h = el->el_refresh.r_cursor.h;
305 cur.v = el->el_refresh.r_cursor.v;
307 rhdiff = el->el_terminal.t_size.h - el->el_refresh.r_cursor.h -
308 el->el_rprompt.p_pos.h;
309 if (el->el_rprompt.p_pos.h && !el->el_rprompt.p_pos.v &&
310 !el->el_refresh.r_cursor.v && rhdiff > 1) {
317 re_putc(el, ' ', 1);
318 prompt_print(el, EL_RPROMPT);
320 el->el_rprompt.p_pos.h = 0; /* flag "not using rprompt" */
321 el->el_rprompt.p_pos.v = 0;
324 re_putc(el, '\0', 0); /* make line ended with NUL, no cursor shift */
326 el->el_refresh.r_newcv = el->el_refresh.r_cursor.v;
330 el->el_terminal.t_size.h, el->el_refresh.r_cursor.h,
331 el->el_refresh.r_cursor.v, ct_encode_string(el->el_vdisplay[0],
332 &el->el_scratch)));
334 ELRE_DEBUG(1, (__F, "updating %d lines.\r\n", el->el_refresh.r_newcv));
335 for (i = 0; i <= el->el_refresh.r_newcv; i++) {
337 re_update_line(el, (wchar_t *)el->el_display[i],
338 (wchar_t *)el->el_vdisplay[i], i);
347 re__copy_and_pad((wchar_t *)el->el_display[i],
348 (wchar_t *)el->el_vdisplay[i],
349 (size_t) el->el_terminal.t_size.h);
352 "\r\nel->el_refresh.r_cursor.v=%d,el->el_refresh.r_oldcv=%d i=%d\r\n",
353 el->el_refresh.r_cursor.v, el->el_refresh.r_oldcv, i));
355 if (el->el_refresh.r_oldcv > el->el_refresh.r_newcv)
356 for (; i <= el->el_refresh.r_oldcv; i++) {
357 terminal_move_to_line(el, i);
358 terminal_move_to_char(el, 0);
360 terminal_clear_EOL(el,
361 (int) wcslen((const wchar_t *)el->el_display[i]));
363 terminal_overwrite(el, L"C\b", 2);
365 el->el_display[i][0] = '\0';
368 el->el_refresh.r_oldcv = el->el_refresh.r_newcv; /* set for next time */
371 el->el_refresh.r_cursor.h, el->el_refresh.r_cursor.v,
373 terminal_move_to_line(el, cur.v); /* go to where the cursor is */
374 terminal_move_to_char(el, cur.h);
382 re_goto_bottom(EditLine *el)
385 terminal_move_to_line(el, el->el_refresh.r_oldcv);
386 terminal__putc(el, '\n');
387 re_clear_display(el);
388 terminal__flush(el);
398 re_insert(EditLine *el __attribute__((__unused__)),
410 num, dat, dlen, ct_encode_string(d, &el->el_scratch)));
412 &el->el_scratch)));
425 num, dat, dlen, ct_encode_string(d, &el->el_scratch)));
427 &el->el_scratch)));
449 re_delete(EditLine *el __attribute__((__unused__)),
462 num, dat, dlen, ct_encode_string(d, &el->el_scratch)));
474 num, dat, dlen, ct_encode_string(d, &el->el_scratch)));
497 re_clear_eol(EditLine *el, int fx, int sx, int diff)
513 terminal_clear_EOL(el, diff);
541 re_update_line(EditLine *el, wchar_t *old, wchar_t *new, int i)
741 re_printstr(el, "old- oe", old, oe);
742 re_printstr(el, "new- ne", new, ne);
743 re_printstr(el, "old-ofd", old, ofd);
744 re_printstr(el, "new-nfd", new, nfd);
745 re_printstr(el, "ofd-osb", ofd, osb);
746 re_printstr(el, "nfd-nsb", nfd, nsb);
747 re_printstr(el, "osb-ose", osb, ose);
748 re_printstr(el, "nsb-nse", nsb, nse);
749 re_printstr(el, "ose-ols", ose, ols);
750 re_printstr(el, "nse-nls", nse, nls);
751 re_printstr(el, "ols- oe", ols, oe);
752 re_printstr(el, "nls- ne", nls, ne);
760 terminal_move_to_line(el, i);
784 * of the screen (el->el_terminal.t_size.h) else we do the deletes first
806 ((p - old) + fx <= el->el_terminal.t_size.h)) {
812 terminal_move_to_char(el, (int)(nfd - new));
824 terminal_insertwrite(el, nfd, fx);
825 re_insert(el, old, (int)(ofd - old),
826 el->el_terminal.t_size.h, nfd, fx);
833 terminal_overwrite(el, (nfd + fx), len);
838 terminal_overwrite(el, nfd, len);
851 terminal_move_to_char(el, (int)(ofd - old));
864 terminal_deletechars(el, -fx);
865 re_delete(el, old, (int)(ofd - old),
866 el->el_terminal.t_size.h, -fx);
872 terminal_overwrite(el, nfd, len);
881 terminal_overwrite(el, nfd, (size_t)(nsb - nfd));
882 re_clear_eol(el, fx, sx,
892 if (sx < 0 && (ose - old) + fx < el->el_terminal.t_size.h) {
902 terminal_move_to_char(el, (int)((ose - old) + fx));
914 terminal_deletechars(el, -sx);
919 terminal_overwrite(el, nse, (size_t)(nls - nse));
923 terminal_overwrite(el, nse, (size_t)(nls - nse));
924 re_clear_eol(el, fx, sx,
935 terminal_move_to_char(el, (int)(nfd - new));
953 terminal_insertwrite(el, nfd, fx);
954 re_insert(el, old, (int)(ofd - old),
955 el->el_terminal.t_size.h, nfd, fx);
962 terminal_overwrite(el, (nfd + fx), len);
967 terminal_overwrite(el, nfd, len);
977 terminal_move_to_char(el, (int)(nse - new));
984 terminal_insertwrite(el, nse, sx);
990 terminal_overwrite(el, (nse + sx),
994 terminal_overwrite(el, nse, (size_t)(nls - nse));
1032 re_refresh_cursor(EditLine *el)
1037 if (el->el_line.cursor >= el->el_line.lastchar) {
1038 if (el->el_map.current == el->el_map.alt
1039 && el->el_line.lastchar != el->el_line.buffer)
1040 el->el_line.cursor = el->el_line.lastchar - 1;
1042 el->el_line.cursor = el->el_line.lastchar;
1046 h = el->el_prompt.p_pos.h;
1047 v = el->el_prompt.p_pos.v;
1048 th = el->el_terminal.t_size.h; /* optimize for speed */
1050 /* do input buffer to el->el_line.cursor */
1051 for (cp = el->el_line.buffer; cp < el->el_line.cursor; cp++) {
1078 if (cp < el->el_line.lastchar && (w = wcwidth(*cp)) > 1)
1085 terminal_move_to_line(el, v);
1086 terminal_move_to_char(el, h);
1087 terminal__flush(el);
1095 re_fastputc(EditLine *el, wint_t c)
1101 while (w > 1 && el->el_cursor.h + w > el->el_terminal.t_size.h)
1102 re_fastputc(el, ' ');
1104 terminal__putc(el, c);
1105 el->el_display[el->el_cursor.v][el->el_cursor.h++] = c;
1107 el->el_display[el->el_cursor.v][el->el_cursor.h++]
1110 if (el->el_cursor.h >= el->el_terminal.t_size.h) {
1112 el->el_cursor.h = 0;
1120 if (el->el_cursor.v + 1 >= el->el_terminal.t_size.v) {
1121 int i, lins = el->el_terminal.t_size.v;
1123 lastline = el->el_display[0];
1125 el->el_display[i - 1] = el->el_display[i];
1127 el->el_display[i - 1] = lastline;
1129 el->el_cursor.v++;
1130 lastline = el->el_display[++el->el_refresh.r_oldcv];
1133 (size_t)el->el_terminal.t_size.h);
1137 terminal__putc(el, ' ');
1138 terminal__putc(el, '\b');
1141 terminal__putc(el, '\r');
1142 terminal__putc(el, '\n');
1153 re_fastaddc(EditLine *el)
1158 if (el->el_line.cursor == el->el_line.buffer) {
1159 re_refresh(el);
1162 c = el->el_line.cursor[-1];
1164 if (c == '\t' || el->el_line.cursor != el->el_line.lastchar) {
1165 re_refresh(el); /* too hard to handle */
1168 rhdiff = el->el_terminal.t_size.h - el->el_cursor.h -
1169 el->el_rprompt.p_pos.h;
1170 if (el->el_rprompt.p_pos.h && rhdiff < 3) {
1171 re_refresh(el); /* clear out rprompt if less than 1 char gap */
1179 re_fastputc(el, c);
1187 re_fastputc(el, visbuf[i]);
1191 terminal__flush(el);
1199 re_clear_display(EditLine *el)
1203 el->el_cursor.v = 0;
1204 el->el_cursor.h = 0;
1205 for (i = 0; i < el->el_terminal.t_size.v; i++)
1206 el->el_display[i][0] = '\0';
1207 el->el_refresh.r_oldcv = 0;
1215 re_clear_lines(EditLine *el)
1220 for (i = el->el_refresh.r_oldcv; i >= 0; i--) {
1222 terminal_move_to_line(el, i);
1223 terminal_move_to_char(el, 0);
1224 terminal_clear_EOL(el, el->el_terminal.t_size.h);
1227 terminal_move_to_line(el, el->el_refresh.r_oldcv);
1229 terminal__putc(el, '\r'); /* go to BOL */
1230 terminal__putc(el, '\n'); /* go to new line */