termptyesc: handle deccara in its rectangular form + tests
This commit is contained in:
parent
9cb340e29f
commit
63911989fc
|
@ -1550,6 +1550,117 @@ _handle_esc_csi_decfra(Termpty *ty, Eina_Unicode **b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_handle_esc_csi_deccara(Termpty *ty, Eina_Unicode **ptr,
|
||||||
|
const Eina_Unicode * const end)
|
||||||
|
{
|
||||||
|
Eina_Unicode *b = *ptr;
|
||||||
|
int top;
|
||||||
|
int left;
|
||||||
|
int bottom;
|
||||||
|
int right;
|
||||||
|
int i, len;
|
||||||
|
Eina_Bool set_bold = EINA_FALSE, reset_bold = EINA_FALSE;
|
||||||
|
Eina_Bool set_underline = EINA_FALSE, reset_underline = EINA_FALSE;
|
||||||
|
Eina_Bool set_blink = EINA_FALSE, reset_blink = EINA_FALSE;
|
||||||
|
Eina_Bool set_reverse = EINA_FALSE, reset_reverse = EINA_FALSE;
|
||||||
|
|
||||||
|
top = _csi_arg_get(ty, &b);
|
||||||
|
left = _csi_arg_get(ty, &b);
|
||||||
|
bottom = _csi_arg_get(ty, &b);
|
||||||
|
right = _csi_arg_get(ty, &b);
|
||||||
|
|
||||||
|
DBG("DECCARA (%d;%d;%d;%d) Change Attributes in Rectangular Area",
|
||||||
|
top, left, bottom, right);
|
||||||
|
if ((top == -CSI_ARG_ERROR) ||
|
||||||
|
(left == -CSI_ARG_ERROR) ||
|
||||||
|
(bottom == -CSI_ARG_ERROR) ||
|
||||||
|
(right == -CSI_ARG_ERROR))
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (b && b < end)
|
||||||
|
{
|
||||||
|
int arg = _csi_arg_get(ty, &b);
|
||||||
|
switch (arg)
|
||||||
|
{
|
||||||
|
case -CSI_ARG_ERROR:
|
||||||
|
return;
|
||||||
|
case -CSI_ARG_NO_VALUE:
|
||||||
|
EINA_FALLTHROUGH;
|
||||||
|
case 0:
|
||||||
|
set_bold = set_underline = set_blink = set_reverse = EINA_FALSE;
|
||||||
|
reset_bold = reset_underline = reset_blink = reset_reverse = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
set_bold = EINA_TRUE;
|
||||||
|
reset_bold = EINA_FALSE;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
set_underline = EINA_TRUE;
|
||||||
|
reset_underline = EINA_FALSE;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
set_blink = EINA_TRUE;
|
||||||
|
reset_blink = EINA_FALSE;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
set_reverse = EINA_TRUE;
|
||||||
|
reset_reverse = EINA_FALSE;
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
set_bold = EINA_FALSE;
|
||||||
|
reset_bold = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
set_underline = EINA_FALSE;
|
||||||
|
reset_underline = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
set_blink = EINA_FALSE;
|
||||||
|
reset_blink = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
set_reverse = EINA_FALSE;
|
||||||
|
reset_reverse = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
WRN("Invalid change attribute [%i]", arg);
|
||||||
|
ty->decoding_error = EINA_TRUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_clean_up_rect_coordinates(ty, &top, &left, &bottom, &right) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
len = right - left;
|
||||||
|
|
||||||
|
for (; top <= bottom; top++)
|
||||||
|
{
|
||||||
|
Termcell *cells = &(TERMPTY_SCREEN(ty, left, top));
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
Termatt * att = &cells[i].att;
|
||||||
|
if (set_bold)
|
||||||
|
att->bold = 1;
|
||||||
|
if (set_underline)
|
||||||
|
att->underline = 1;
|
||||||
|
if (set_blink)
|
||||||
|
att->blink = 1;
|
||||||
|
if (set_reverse)
|
||||||
|
att->inverse = 1;
|
||||||
|
if (reset_bold)
|
||||||
|
att->bold = 0;
|
||||||
|
if (reset_underline)
|
||||||
|
att->underline = 0;
|
||||||
|
if (reset_blink)
|
||||||
|
att->blink = 0;
|
||||||
|
if (reset_reverse)
|
||||||
|
att->inverse = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_handle_esc_csi_decera(Termpty *ty, Eina_Unicode **b)
|
_handle_esc_csi_decera(Termpty *ty, Eina_Unicode **b)
|
||||||
{
|
{
|
||||||
|
@ -2111,7 +2222,10 @@ HVP:
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
_handle_esc_csi_decstbm(ty, &b);
|
if (*(cc-1) == '$')
|
||||||
|
_handle_esc_csi_deccara(ty, &b, be-1);
|
||||||
|
else
|
||||||
|
_handle_esc_csi_decstbm(ty, &b);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
if (ty->termstate.lr_margins)
|
if (ty->termstate.lr_margins)
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# move to 0; 0
|
||||||
|
printf '\033[H'
|
||||||
|
# fill space
|
||||||
|
PL=0
|
||||||
|
for _ in $(seq 0 23); do
|
||||||
|
PL=$((PL+1))
|
||||||
|
if [ $PL -ge 9 ] ; then
|
||||||
|
PL=0
|
||||||
|
fi
|
||||||
|
for _ in $(seq 1 $PL); do
|
||||||
|
printf '#'
|
||||||
|
done
|
||||||
|
PR=$((10 - PL))
|
||||||
|
for _ in $(seq 0 6); do
|
||||||
|
printf '\033[0;1m\-'
|
||||||
|
printf '\033[0;46;1;4m/'
|
||||||
|
printf '\033[0;46;1;4;5m|'
|
||||||
|
printf '\033[0;1;4;5;7m\\'
|
||||||
|
printf '\033[0m~'
|
||||||
|
printf '\033[0;1;5m_'
|
||||||
|
printf '\033[0;31;5;7m>'
|
||||||
|
printf '\033[0;31;4;7m^'
|
||||||
|
printf '\033[0;1;7m<'
|
||||||
|
done
|
||||||
|
printf '\033[0m'
|
||||||
|
for _ in $(seq 1 $PR); do
|
||||||
|
printf '#'
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# move to 0; 0
|
||||||
|
printf '\033[H'
|
||||||
|
|
||||||
|
# set top/bottom margins:
|
||||||
|
printf '\033[5;20r'
|
||||||
|
|
||||||
|
# force rectangular modifications
|
||||||
|
printf '\033[2*x'
|
||||||
|
|
||||||
|
# column reset
|
||||||
|
printf '\033[1;10;80;15;0\044r'
|
||||||
|
|
||||||
|
# column reset
|
||||||
|
printf '\033[1;20;80;25;22;24;25;27\044r'
|
||||||
|
|
||||||
|
# reset bold/blink
|
||||||
|
printf '\033[1;30;80;35;22;25\044r'
|
||||||
|
|
||||||
|
# set bold/underline, remove blink/reverse
|
||||||
|
printf '\033[1;40;80;45;1;4;25;27\044r'
|
||||||
|
|
||||||
|
# set blink/reverse, remove bold/underline
|
||||||
|
printf '\033[1;50;80;55;5;7;22;24\044r'
|
||||||
|
|
||||||
|
# set all, remove all
|
||||||
|
printf '\033[1;60;80;65;1;4;5;7;0\044r'
|
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# move to 0; 0
|
||||||
|
printf '\033[H'
|
||||||
|
# fill space
|
||||||
|
PL=0
|
||||||
|
for _ in $(seq 0 23); do
|
||||||
|
PL=$((PL+1))
|
||||||
|
if [ $PL -ge 9 ] ; then
|
||||||
|
PL=0
|
||||||
|
fi
|
||||||
|
for _ in $(seq 1 $PL); do
|
||||||
|
printf '#'
|
||||||
|
done
|
||||||
|
PR=$((10 - PL))
|
||||||
|
for _ in $(seq 0 6); do
|
||||||
|
printf '\033[0;1m\-'
|
||||||
|
printf '\033[0;46;1;4m/'
|
||||||
|
printf '\033[0;46;1;4;5m|'
|
||||||
|
printf '\033[0;1;4;5;7m\\'
|
||||||
|
printf '\033[0m~'
|
||||||
|
printf '\033[0;1;5m_'
|
||||||
|
printf '\033[0;31;5;7m>'
|
||||||
|
printf '\033[0;31;4;7m^'
|
||||||
|
printf '\033[0;1;7m<'
|
||||||
|
done
|
||||||
|
printf '\033[0m'
|
||||||
|
for _ in $(seq 1 $PR); do
|
||||||
|
printf '#'
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# move to 0; 0
|
||||||
|
printf '\033[H'
|
||||||
|
|
||||||
|
# set top/bottom margins:
|
||||||
|
printf '\033[5;20r'
|
||||||
|
|
||||||
|
# restrict cursor
|
||||||
|
printf '\033[?6h'
|
||||||
|
|
||||||
|
# force rectangular modifications
|
||||||
|
printf '\033[2*x'
|
||||||
|
|
||||||
|
# column reset
|
||||||
|
printf '\033[1;10;80;15;0\044r'
|
||||||
|
|
||||||
|
# column reset
|
||||||
|
printf '\033[1;20;80;25;22;24;25;27\044r'
|
||||||
|
|
||||||
|
# reset bold/blink
|
||||||
|
printf '\033[1;30;80;35;22;25\044r'
|
||||||
|
|
||||||
|
# set bold/underline, remove blink/reverse
|
||||||
|
printf '\033[1;40;80;45;1;4;25;27\044r'
|
||||||
|
|
||||||
|
# set blink/reverse, remove bold/underline
|
||||||
|
printf '\033[1;50;80;55;5;7;22;24\044r'
|
||||||
|
|
||||||
|
# set all, remove all
|
||||||
|
printf '\033[1;60;80;65;1;4;5;7;0\044r'
|
|
@ -41,3 +41,5 @@ decaln.sh 9c0cf4de336193bcdaed6ba6c0d6f590
|
||||||
decawm.sh 84321e76f07b40cf9462238ec0919dc0
|
decawm.sh 84321e76f07b40cf9462238ec0919dc0
|
||||||
decbi.sh 8153bff12a0d529cb8ba0dbff036a1ee
|
decbi.sh 8153bff12a0d529cb8ba0dbff036a1ee
|
||||||
decfi.sh e93690447902b923d3d9d2ae72a31de4
|
decfi.sh e93690447902b923d3d9d2ae72a31de4
|
||||||
|
deccara-rectangular-no-restrict-cursor.sh 5f85e9992055397f951af7b5713fabde
|
||||||
|
deccara-rectangular-restrict-cursor.sh c1d571a6c60a4fb06fdd81fee7c85e1c
|
||||||
|
|
Loading…
Reference in New Issue