Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Render struck-out attribute
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
2b6b717
..
3aa8539
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-89,15
+89,19
@@
char *argv0;
#define VT102ID "\033[?6c"
enum glyph_attribute {
#define VT102ID "\033[?6c"
enum glyph_attribute {
- ATTR_NULL = 0,
- ATTR_
REVERSE
= 1,
- ATTR_
UNDERLINE
= 2,
- ATTR_
BOLD
= 4,
- ATTR_
ITALIC
= 8,
+
ATTR_NULL = 0,
+ ATTR_
BOLD
= 1,
+ ATTR_
FAINT
= 2,
+ ATTR_
ITALIC
= 4,
+ ATTR_
UNDERLINE
= 8,
ATTR_BLINK = 16,
ATTR_BLINK = 16,
- ATTR_WRAP = 32,
- ATTR_WIDE = 64,
- ATTR_WDUMMY = 128,
+ ATTR_FASTBLINK = 32,
+ ATTR_REVERSE = 64,
+ ATTR_INVISIBLE = 128,
+ ATTR_STRUCK = 256,
+ ATTR_WRAP = 512,
+ ATTR_WIDE = 1024,
+ ATTR_WDUMMY = 2048,
};
enum cursor_movement {
};
enum cursor_movement {
@@
-1681,15
+1685,25
@@
tsetattr(int *attr, int l) {
for(i = 0; i < l; i++) {
switch(attr[i]) {
case 0:
for(i = 0; i < l; i++) {
switch(attr[i]) {
case 0:
- term.c.attr.mode &= ~(ATTR_REVERSE | ATTR_UNDERLINE \
- | ATTR_BOLD | ATTR_ITALIC \
- | ATTR_BLINK);
+ term.c.attr.mode &= ~(
+ ATTR_BOLD |
+ ATTR_FAINT |
+ ATTR_ITALIC |
+ ATTR_UNDERLINE |
+ ATTR_BLINK |
+ ATTR_FASTBLINK |
+ ATTR_REVERSE |
+ ATTR_INVISIBLE |
+ ATTR_STRUCK );
term.c.attr.fg = defaultfg;
term.c.attr.bg = defaultbg;
break;
case 1:
term.c.attr.mode |= ATTR_BOLD;
break;
term.c.attr.fg = defaultfg;
term.c.attr.bg = defaultbg;
break;
case 1:
term.c.attr.mode |= ATTR_BOLD;
break;
+ case 2:
+ term.c.attr.mode |= ATTR_FAINT;
+ break;
case 3:
term.c.attr.mode |= ATTR_ITALIC;
break;
case 3:
term.c.attr.mode |= ATTR_ITALIC;
break;
@@
-1697,16
+1711,26
@@
tsetattr(int *attr, int l) {
term.c.attr.mode |= ATTR_UNDERLINE;
break;
case 5: /* slow blink */
term.c.attr.mode |= ATTR_UNDERLINE;
break;
case 5: /* slow blink */
- case 6: /* rapid blink */
term.c.attr.mode |= ATTR_BLINK;
break;
term.c.attr.mode |= ATTR_BLINK;
break;
+ case 6: /* rapid blink */
+ term.c.attr.mode |= ATTR_FASTBLINK;
+ break;
case 7:
term.c.attr.mode |= ATTR_REVERSE;
break;
case 7:
term.c.attr.mode |= ATTR_REVERSE;
break;
+ case 8:
+ term.c.attr.mode |= ATTR_INVISIBLE;
+ break;
+ case 9:
+ term.c.attr.mode |= ATTR_STRUCK;
+ break;
case 21:
case 21:
- case 22:
term.c.attr.mode &= ~ATTR_BOLD;
break;
term.c.attr.mode &= ~ATTR_BOLD;
break;
+ case 22:
+ term.c.attr.mode &= ~ATTR_FAINT;
+ break;
case 23:
term.c.attr.mode &= ~ATTR_ITALIC;
break;
case 23:
term.c.attr.mode &= ~ATTR_ITALIC;
break;
@@
-1714,12
+1738,20
@@
tsetattr(int *attr, int l) {
term.c.attr.mode &= ~ATTR_UNDERLINE;
break;
case 25:
term.c.attr.mode &= ~ATTR_UNDERLINE;
break;
case 25:
- case 26:
term.c.attr.mode &= ~ATTR_BLINK;
break;
term.c.attr.mode &= ~ATTR_BLINK;
break;
+ case 26:
+ term.c.attr.mode &= ~ATTR_FASTBLINK;
+ break;
case 27:
term.c.attr.mode &= ~ATTR_REVERSE;
break;
case 27:
term.c.attr.mode &= ~ATTR_REVERSE;
break;
+ case 28:
+ term.c.attr.mode &= ~ATTR_INVISIBLE;
+ break;
+ case 29:
+ term.c.attr.mode &= ~ATTR_STRUCK;
+ break;
case 38:
if ((idx = tdefcolor(attr, &i, l)) >= 0)
term.c.attr.fg = idx;
case 38:
if ((idx = tdefcolor(attr, &i, l)) >= 0)
term.c.attr.fg = idx;
@@
-3204,6
+3236,9
@@
xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
if(base.mode & ATTR_BLINK && term.mode & MODE_BLINK)
fg = bg;
if(base.mode & ATTR_BLINK && term.mode & MODE_BLINK)
fg = bg;
+ if(base.mode & ATTR_INVISIBLE)
+ fg = bg;
+
/* Intelligent cleaning up of the borders. */
if(x == 0) {
xclear(0, (y == 0)? 0 : winy, borderpx,
/* Intelligent cleaning up of the borders. */
if(x == 0) {
xclear(0, (y == 0)? 0 : winy, borderpx,
@@
-3348,6
+3383,11
@@
xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
width, 1);
}
width, 1);
}
+ if(base.mode & ATTR_STRUCK) {
+ XftDrawRect(xw.draw, fg, winx, winy + 2 * font->ascent / 3,
+ width, 1);
+ }
+
/* Reset clip to none. */
XftDrawSetClip(xw.draw, 0);
}
/* Reset clip to none. */
XftDrawSetClip(xw.draw, 0);
}