Sync OpenBSD patchset 992:

Add \033[s and \033[u to save and restore cursor position.
This commit is contained in:
Tiago Cunha 2011-12-30 14:19:21 +00:00
parent e210abf335
commit 2ca1849350

13
input.c
View File

@ -135,8 +135,10 @@ enum input_csi_type {
INPUT_CSI_HPA, INPUT_CSI_HPA,
INPUT_CSI_ICH, INPUT_CSI_ICH,
INPUT_CSI_IL, INPUT_CSI_IL,
INPUT_CSI_RCP,
INPUT_CSI_RM, INPUT_CSI_RM,
INPUT_CSI_RM_PRIVATE, INPUT_CSI_RM_PRIVATE,
INPUT_CSI_SCP,
INPUT_CSI_SGR, INPUT_CSI_SGR,
INPUT_CSI_SM, INPUT_CSI_SM,
INPUT_CSI_SM_PRIVATE, INPUT_CSI_SM_PRIVATE,
@ -171,6 +173,8 @@ const struct input_table_entry input_csi_table[] = {
{ 'n', "", INPUT_CSI_DSR }, { 'n', "", INPUT_CSI_DSR },
{ 'q', " ", INPUT_CSI_DECSCUSR }, { 'q', " ", INPUT_CSI_DECSCUSR },
{ 'r', "", INPUT_CSI_DECSTBM }, { 'r', "", INPUT_CSI_DECSTBM },
{ 's', "", INPUT_CSI_SCP },
{ 'u', "", INPUT_CSI_RCP },
}; };
/* Input transition. */ /* Input transition. */
@ -1168,6 +1172,10 @@ input_csi_dispatch(struct input_ctx *ictx)
case INPUT_CSI_IL: case INPUT_CSI_IL:
screen_write_insertline(sctx, input_get(ictx, 0, 1, 1)); screen_write_insertline(sctx, input_get(ictx, 0, 1, 1));
break; break;
case INPUT_CSI_RCP:
memcpy(&ictx->cell, &ictx->old_cell, sizeof ictx->cell);
screen_write_cursormove(sctx, ictx->old_cx, ictx->old_cy);
break;
case INPUT_CSI_RM: case INPUT_CSI_RM:
switch (input_get(ictx, 0, 0, -1)) { switch (input_get(ictx, 0, 0, -1)) {
case 4: /* IRM */ case 4: /* IRM */
@ -1207,6 +1215,11 @@ input_csi_dispatch(struct input_ctx *ictx)
break; break;
} }
break; break;
case INPUT_CSI_SCP:
memcpy(&ictx->old_cell, &ictx->cell, sizeof ictx->old_cell);
ictx->old_cx = s->cx;
ictx->old_cy = s->cy;
break;
case INPUT_CSI_SGR: case INPUT_CSI_SGR:
input_csi_dispatch_sgr(ictx); input_csi_dispatch_sgr(ictx);
break; break;