re_fastaddc(): * we added just one char, handle it fast. * Assumes that screen cursor == real cursor */
| 1105 | * Assumes that screen cursor == real cursor |
| 1106 | */ |
| 1107 | protected void |
| 1108 | re_fastaddc(EditLine *el) |
| 1109 | { |
| 1110 | Char c; |
| 1111 | int rhdiff; |
| 1112 | |
| 1113 | c = el->el_line.cursor[-1]; |
| 1114 | |
| 1115 | if (c == '\t' || el->el_line.cursor != el->el_line.lastchar) { |
| 1116 | re_refresh(el); /* too hard to handle */ |
| 1117 | return; |
| 1118 | } |
| 1119 | rhdiff = el->el_terminal.t_size.h - el->el_cursor.h - |
| 1120 | el->el_rprompt.p_pos.h; |
| 1121 | if (el->el_rprompt.p_pos.h && rhdiff < 3) { |
| 1122 | re_refresh(el); /* clear out rprompt if less than 1 char gap */ |
| 1123 | return; |
| 1124 | } /* else (only do at end of line, no TAB) */ |
| 1125 | switch (ct_chr_class(c)) { |
| 1126 | case CHTYPE_TAB: /* already handled, should never happen here */ |
| 1127 | break; |
| 1128 | case CHTYPE_NL: |
| 1129 | case CHTYPE_PRINT: |
| 1130 | re_fastputc(el, c); |
| 1131 | break; |
| 1132 | case CHTYPE_ASCIICTL: |
| 1133 | case CHTYPE_NONPRINT: { |
| 1134 | Char visbuf[VISUAL_WIDTH_MAX]; |
| 1135 | ssize_t i, n = |
| 1136 | ct_visual_char(visbuf, VISUAL_WIDTH_MAX, (Char)c); |
| 1137 | for (i = 0; n-- > 0; ++i) |
| 1138 | re_fastputc(el, visbuf[i]); |
| 1139 | break; |
| 1140 | } |
| 1141 | } |
| 1142 | terminal__flush(el); |
| 1143 | } |
| 1144 | |
| 1145 | |
| 1146 | /* re_clear_display(): |
no test coverage detected