Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
support REP (repeat) escape sequence
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
0d35613
..
54af098
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-129,6
+129,7
@@
typedef struct {
int charset; /* current charset */
int icharset; /* selected charset for sequence */
int *tabs;
int charset; /* current charset */
int icharset; /* selected charset for sequence */
int *tabs;
+ Rune lastc; /* last printed char outside of sequence, 0 if control */
} Term;
/* CSI Escape sequence structs */
} Term;
/* CSI Escape sequence structs */
@@
-1648,6
+1649,12
@@
csihandle(void)
if (csiescseq.arg[0] == 0)
ttywrite(vtiden, strlen(vtiden), 0);
break;
if (csiescseq.arg[0] == 0)
ttywrite(vtiden, strlen(vtiden), 0);
break;
+ case 'b': /* REP -- if last char is printable print it <n> more times */
+ DEFAULT(csiescseq.arg[0], 1);
+ if (term.lastc)
+ while (csiescseq.arg[0]-- > 0)
+ tputc(term.lastc);
+ break;
case 'C': /* CUF -- Cursor <n> Forward */
case 'a': /* HPR -- Cursor <n> Forward */
DEFAULT(csiescseq.arg[0], 1);
case 'C': /* CUF -- Cursor <n> Forward */
case 'a': /* HPR -- Cursor <n> Forward */
DEFAULT(csiescseq.arg[0], 1);
@@
-2373,6
+2380,8
@@
check_control_code:
/*
* control codes are not shown ever
*/
/*
* control codes are not shown ever
*/
+ if (!term.esc)
+ term.lastc = 0;
return;
} else if (term.esc & ESC_START) {
if (term.esc & ESC_CSI) {
return;
} else if (term.esc & ESC_START) {
if (term.esc & ESC_CSI) {
@@
-2422,6
+2431,7
@@
check_control_code:
}
tsetchar(u, &term.c.attr, term.c.x, term.c.y);
}
tsetchar(u, &term.c.attr, term.c.x, term.c.y);
+ term.lastc = u;
if (width == 2) {
gp->mode |= ATTR_WIDE;
if (width == 2) {
gp->mode |= ATTR_WIDE;