Introduction
Introduction Statistics Contact Development Disclaimer Help
tImplementing line drawing right. - st - [fork] customized build of st, the sim…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 3a095984b053ebb159956368eb3258f51f50e352
parent c3b0e2202b908834d3c08e3eaf70e0ac282cf319
Author: Christoph Lohmann <[email protected]>
Date: Wed, 26 Sep 2012 20:21:08 +0200
Implementing line drawing right.
Diffstat:
M config.def.h | 8 --------
M st.c | 52 +++++++++++++++++++++--------…
2 files changed, 36 insertions(+), 24 deletions(-)
---
diff --git a/config.def.h b/config.def.h
t@@ -79,14 +79,6 @@ static Key key[] = {
/* Set TERM to this */
#define TNAME "st-256color"
-/* Line drawing characters (sometime specific to each font...) */
-static char gfx[] = {
- ['f'] = 'o',
- ['g'] = '+',
- ['i'] = '#',
- [255] = 0,
-};
-
/* double-click timeout (in milliseconds) between clicks for selection */
#define DOUBLECLICK_TIMEOUT 300
#define TRIPLECLICK_TIMEOUT (2*DOUBLECLICK_TIMEOUT)
diff --git a/st.c b/st.c
t@@ -1094,6 +1094,27 @@ tmoveto(int x, int y) {
void
tsetchar(char *c) {
+ /*
+ * The table is proudly stolen from rxvt.
+ */
+ if(term.c.attr.mode & ATTR_GFX) {
+ char *vt100_0[62] = { /* 0x41 - 0x7e */
+ "↑", "↓", "→", "←", "█", "▚", "☃", /* A …
+ 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* P - W */
+ 0, 0, 0, 0, 0, 0, 0, " ", /* X - _ */
+ "◆", "▒", "␉", "␌", "␍", "␊", "°", "±", …
+ "␤", "␋", "┘", "┐", "┌", "└", "┼", "⎺"…
+ "⎻", "─", "⎼", "⎽", "├", "┤", "┴", "┬"…
+ "│", "≤", "≥", "π", "≠", "£", "·", /* x - ~…
+ };
+
+ if(c[0] >= 0x41 && c[0] <= 0x7e
+ && vt100_0[c[0] - 0x41]) {
+ c = vt100_0[c[0] - 0x41];
+ }
+ }
+
term.dirty[term.c.y] = 1;
term.line[term.c.y][term.c.x] = term.c.attr;
memcpy(term.line[term.c.y][term.c.x].c, c, UTF_SIZ);
t@@ -1177,7 +1198,7 @@ tsetattr(int *attr, int l) {
switch(attr[i]) {
case 0:
term.c.attr.mode &= ~(ATTR_REVERSE | ATTR_UNDERLINE | …
- | ATTR_ITALIC | ATTR_BLINK | ATTR_GFX);
+ | ATTR_ITALIC | ATTR_BLINK);
term.c.attr.fg = DefaultFG;
term.c.attr.bg = DefaultBG;
break;
t@@ -1676,12 +1697,18 @@ tputc(char *c, int len) {
strhandle();
} else if(term.esc & ESC_ALTCHARSET) {
switch(ascii) {
- case '0': /* Line drawing crap */
+ case '0': /* Line drawing set */
term.c.attr.mode |= ATTR_GFX;
break;
- case 'B': /* Back to regular text */
+ case 'B': /* USASCII */
term.c.attr.mode &= ~ATTR_GFX;
break;
+ case 'A': /* UK (IGNORED) */
+ case '<': /* multinational charset (IGNORED) */
+ case '5': /* Finnish (IGNORED) */
+ case 'C': /* Finnish (IGNORED) */
+ case 'K': /* German (IGNORED) */
+ break;
default:
fprintf(stderr, "esc unhandled charset: ESC ( …
}
t@@ -1700,10 +1727,14 @@ tputc(char *c, int len) {
strescseq.type = ascii;
term.esc |= ESC_STR;
break;
- case ')':
- case '(':
+ case '(': /* set primary charset G0 */
term.esc |= ESC_ALTCHARSET;
break;
+ case ')': /* set secondary charset G1 (IGNORED) */
+ case '*': /* set tertiary charset G2 (IGNORED) */
+ case '+': /* set quaternary charset G3 (IGNORED) */
+ term.esc = 0;
+ break;
case 'D': /* IND -- Linefeed */
if(term.c.y == term.bot)
tscrollup(term.top, 1);
t@@ -2067,7 +2098,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, i…
int winx = BORDER+x*xw.cw, winy = BORDER+y*xw.ch + dc.font.ascent, wid…
Font *font = &dc.font;
XGlyphInfo extents;
- int i;
/* only switch default fg/bg if term is in RV mode */
if(IS_SET(MODE_REVERSE)) {
t@@ -2093,16 +2123,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, …
XSetBackground(xw.dpy, dc.gc, dc.col[bg]);
XSetForeground(xw.dpy, dc.gc, dc.col[fg]);
- if(base.mode & ATTR_GFX) {
- for(i = 0; i < bytelen; i++) {
- char c = gfx[(uint)s[i] % 256];
- if(c)
- s[i] = c;
- else if(s[i] > 0x5f)
- s[i] -= 0x5f;
- }
- }
-
XftTextExtentsUtf8(xw.dpy, font->xft_set, (FcChar8 *)s, bytelen, &exte…
width = extents.xOff;
XftDrawRect(xw.xft_draw, &dc.xft_col[bg], winx, winy - font->ascent, w…
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.