tRemove x.c dependency on term - st - [fork] customized build of st, the simple… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a3beb626d2dae9d4d0883c7c8cb6ba58b0609105 | |
parent a5dc1b46976b2252f9d7bb68f126c4b0f351dd1a | |
Author: Devin J. Pohly <[email protected]> | |
Date: Sat, 24 Feb 2018 15:32:48 -0600 | |
Remove x.c dependency on term | |
The xinit function only needs to the rows/cols, so pass those in rather | |
tthan accessing term directly. With a bit of arithmetic, we are able to | |
avoid the need for term.row and term.col in x2col, y2row, and | |
xdrawglyphfontspecs as well, completing the removal. | |
Term is now fully internal to st.c. | |
Signed-off-by: Devin J. Pohly <[email protected]> | |
Diffstat: | |
M st.c | 22 +++++++++++++++++++++- | |
M st.h | 21 --------------------- | |
M x.c | 35 ++++++++++++++++-------------… | |
3 files changed, 39 insertions(+), 39 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -95,6 +95,26 @@ enum escape_state { | |
ESC_DCS =128, | |
}; | |
+/* Internal representation of the screen */ | |
+typedef struct { | |
+ int row; /* nb row */ | |
+ int col; /* nb col */ | |
+ Line *line; /* screen */ | |
+ Line *alt; /* alternate screen */ | |
+ int *dirty; /* dirtyness of lines */ | |
+ TCursor c; /* cursor */ | |
+ int ocx; /* old cursor col */ | |
+ int ocy; /* old cursor row */ | |
+ int top; /* top scroll limit */ | |
+ int bot; /* bottom scroll limit */ | |
+ int mode; /* terminal mode flags */ | |
+ int esc; /* escape state flags */ | |
+ char trantbl[4]; /* charset table translation */ | |
+ int charset; /* current charset */ | |
+ int icharset; /* selected charset for sequence */ | |
+ int *tabs; | |
+} Term; | |
+ | |
/* CSI Escape sequence structs */ | |
/* ESC '[' [[ [<priv>] <arg> [;]] <mode> [<mode>]] */ | |
typedef struct { | |
t@@ -181,11 +201,11 @@ static char *base64dec(const char *); | |
static ssize_t xwrite(int, const char *, size_t); | |
/* Globals */ | |
-Term term; | |
int cmdfd; | |
pid_t pid; | |
int oldbutton = 3; /* button event on startup: 3 = release */ | |
+static Term term; | |
static Selection sel; | |
static CSIEscape csiescseq; | |
static STREscape strescseq; | |
diff --git a/st.h b/st.h | |
t@@ -76,26 +76,6 @@ typedef struct { | |
char state; | |
} TCursor; | |
-/* Internal representation of the screen */ | |
-typedef struct { | |
- int row; /* nb row */ | |
- int col; /* nb col */ | |
- Line *line; /* screen */ | |
- Line *alt; /* alternate screen */ | |
- int *dirty; /* dirtyness of lines */ | |
- TCursor c; /* cursor */ | |
- int ocx; /* old cursor col */ | |
- int ocy; /* old cursor row */ | |
- int top; /* top scroll limit */ | |
- int bot; /* bottom scroll limit */ | |
- int mode; /* terminal mode flags */ | |
- int esc; /* escape state flags */ | |
- char trantbl[4]; /* charset table translation */ | |
- int charset; /* current charset */ | |
- int icharset; /* selected charset for sequence */ | |
- int *tabs; | |
-} Term; | |
- | |
/* Purely graphic info */ | |
typedef struct { | |
int tw, th; /* tty width and height */ | |
t@@ -168,7 +148,6 @@ void *xrealloc(void *, size_t); | |
char *xstrdup(char *); | |
/* Globals */ | |
-extern Term term; | |
extern int cmdfd; | |
extern pid_t pid; | |
extern int oldbutton; | |
diff --git a/x.c b/x.c | |
t@@ -130,7 +130,7 @@ static void xdrawglyphfontspecs(const XftGlyphFontSpec *, … | |
static void xdrawglyph(Glyph, int, int); | |
static void xclear(int, int, int, int); | |
static int xgeommasktogravity(int); | |
-static void xinit(void); | |
+static void xinit(int, int); | |
static void cresize(int, int); | |
static void xresize(int, int); | |
static int xloadfont(Font *, FcPattern *); | |
t@@ -299,18 +299,16 @@ int | |
x2col(int x) | |
{ | |
x -= borderpx; | |
- x /= win.cw; | |
- | |
- return LIMIT(x, 0, term.col-1); | |
+ LIMIT(x, 0, win.tw - 1); | |
+ return x / win.cw; | |
} | |
int | |
y2row(int y) | |
{ | |
y -= borderpx; | |
- y /= win.ch; | |
- | |
- return LIMIT(y, 0, term.row-1); | |
+ LIMIT(y, 0, win.th - 1); | |
+ return y / win.ch; | |
} | |
void | |
t@@ -984,7 +982,7 @@ xunloadfonts(void) | |
} | |
void | |
-xinit(void) | |
+xinit(int cols, int rows) | |
{ | |
XGCValues gcvalues; | |
Cursor cursor; | |
t@@ -1009,8 +1007,8 @@ xinit(void) | |
xloadcols(); | |
/* adjust fixed window geometry */ | |
- win.w = 2 * borderpx + term.col * win.cw; | |
- win.h = 2 * borderpx + term.row * win.ch; | |
+ win.w = 2 * borderpx + cols * win.cw; | |
+ win.h = 2 * borderpx + rows * win.ch; | |
if (xw.gm & XNegative) | |
xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; | |
if (xw.gm & YNegative) | |
t@@ -1042,7 +1040,7 @@ xinit(void) | |
XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); | |
/* font spec buffer */ | |
- xw.specbuf = xmalloc(term.col * sizeof(GlyphFontSpec)); | |
+ xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec)); | |
/* Xft rendering context */ | |
xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); | |
t@@ -1337,15 +1335,16 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Gly… | |
/* Intelligent cleaning up of the borders. */ | |
if (x == 0) { | |
xclear(0, (y == 0)? 0 : winy, borderpx, | |
- winy + win.ch + ((y >= term.row-1)? win.h : 0)); | |
+ winy + win.ch + | |
+ ((winy + win.ch >= borderpx + win.th)? win.h : 0)); | |
} | |
- if (x + charlen >= term.col) { | |
+ if (winx + width >= borderpx + win.tw) { | |
xclear(winx + width, (y == 0)? 0 : winy, win.w, | |
- ((y >= term.row-1)? win.h : (winy + win.ch))); | |
+ ((winy + win.ch >= borderpx + win.th)? win.h : (winy +… | |
} | |
if (y == 0) | |
xclear(winx, 0, winx + width, borderpx); | |
- if (y == term.row-1) | |
+ if (winy + win.ch >= borderpx + win.th) | |
xclear(winx, winy + win.ch, winx + width, win.h); | |
/* Clean up the region we want to draw to. */ | |
t@@ -1930,8 +1929,10 @@ run: | |
} | |
setlocale(LC_CTYPE, ""); | |
XSetLocaleModifiers(""); | |
- tnew(MAX(cols, 1), MAX(rows, 1)); | |
- xinit(); | |
+ cols = MAX(cols, 1); | |
+ rows = MAX(rows, 1); | |
+ tnew(cols, rows); | |
+ xinit(cols, rows); | |
xsetenv(); | |
selinit(); | |
run(); |