diff options
| author | sinanmohd <pcmsinan@gmail.com> | 2021-02-24 17:51:04 +0530 | 
|---|---|---|
| committer | sinanmohd <pcmsinan@gmail.com> | 2021-02-24 17:51:04 +0530 | 
| commit | a7196ea39babd165213c18131b7a8924139b05fd (patch) | |
| tree | 539635d3d2f92c5acb2d747bad2f1a3af2bf7b70 | |
| parent | 4ef0cbd8b9371f37f7d02ef37b5378b879e6b8bf (diff) | |
anysize
| -rw-r--r-- | README.md | 7 | ||||
| -rw-r--r-- | x.c | 56 | 
2 files changed, 37 insertions, 26 deletions
| diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1d8855 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# st: Simple Terminal  + +st is a simple terminal implementation for X + +## Patches + +- [anysize](https://st.suckless.org/patches/anysize/st-anysize-0.8.1.diff). @@ -81,6 +81,7 @@ typedef XftGlyphFontSpec GlyphFontSpec;  typedef struct {  	int tw, th; /* tty width and height */  	int w, h; /* window width and height */ +	int hborderpx, vborderpx;  	int ch; /* char height */  	int cw; /* char width  */  	int mode; /* window state/mode flags */ @@ -331,7 +332,7 @@ ttysend(const Arg *arg)  int  evcol(XEvent *e)  { -	int x = e->xbutton.x - borderpx; +	int x = e->xbutton.x - win.hborderpx;  	LIMIT(x, 0, win.tw - 1);  	return x / win.cw;  } @@ -339,7 +340,7 @@ evcol(XEvent *e)  int  evrow(XEvent *e)  { -	int y = e->xbutton.y - borderpx; +	int y = e->xbutton.y - win.vborderpx;  	LIMIT(y, 0, win.th - 1);  	return y / win.ch;  } @@ -721,6 +722,9 @@ cresize(int width, int height)  	col = MAX(1, col);  	row = MAX(1, row); +	win.hborderpx = (win.w - col * win.cw) / 2; +	win.vborderpx = (win.h - row * win.ch) / 2; +  	tresize(col, row);  	xresize(col, row);  	ttyresize(win.tw, win.th); @@ -838,8 +842,8 @@ xhints(void)  	sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize;  	sizeh->height = win.h;  	sizeh->width = win.w; -	sizeh->height_inc = win.ch; -	sizeh->width_inc = win.cw; +	sizeh->height_inc = 1; +	sizeh->width_inc = 1;  	sizeh->base_height = 2 * borderpx;  	sizeh->base_width = 2 * borderpx;  	sizeh->min_height = win.ch + 2 * borderpx; @@ -1121,8 +1125,8 @@ xinit(int cols, int rows)  	xloadcols();  	/* adjust fixed window geometry */ -	win.w = 2 * borderpx + cols * win.cw; -	win.h = 2 * borderpx + rows * win.ch; +	win.w = 2 * win.hborderpx + cols * win.cw; +	win.h = 2 * win.vborderpx + rows * win.ch;  	if (xw.gm & XNegative)  		xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2;  	if (xw.gm & YNegative) @@ -1211,7 +1215,7 @@ xinit(int cols, int rows)  int  xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y)  { -	float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp; +	float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp;  	ushort mode, prevmode = USHRT_MAX;  	Font *font = &dc.font;  	int frcflags = FRC_NORMAL; @@ -1344,7 +1348,7 @@ void  xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)  {  	int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1); -	int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, +	int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch,  	    width = charlen * win.cw;  	Color *fg, *bg, *temp, revfg, revbg, truefg, truebg;  	XRenderColor colfg, colbg; @@ -1434,17 +1438,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i  	/* Intelligent cleaning up of the borders. */  	if (x == 0) { -		xclear(0, (y == 0)? 0 : winy, borderpx, +		xclear(0, (y == 0)? 0 : winy, win.vborderpx,  			winy + win.ch + -			((winy + win.ch >= borderpx + win.th)? win.h : 0)); +			((winy + win.ch >= win.vborderpx + win.th)? win.h : 0));  	} -	if (winx + width >= borderpx + win.tw) { +	if (winx + width >= win.hborderpx + win.tw) {  		xclear(winx + width, (y == 0)? 0 : winy, win.w, -			((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch))); +			((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch)));  	}  	if (y == 0) -		xclear(winx, 0, winx + width, borderpx); -	if (winy + win.ch >= borderpx + win.th) +		xclear(winx, 0, winx + width, win.hborderpx); +	if (winy + win.ch >= win.vborderpx + win.th)  		xclear(winx, winy + win.ch, winx + width, win.h);  	/* Clean up the region we want to draw to. */ @@ -1538,35 +1542,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)  		case 3: /* Blinking Underline */  		case 4: /* Steady Underline */  			XftDrawRect(xw.draw, &drawcol, -					borderpx + cx * win.cw, -					borderpx + (cy + 1) * win.ch - \ +					win.hborderpx + cx * win.cw, +					win.vborderpx + (cy + 1) * win.ch - \  						cursorthickness,  					win.cw, cursorthickness);  			break;  		case 5: /* Blinking bar */  		case 6: /* Steady bar */  			XftDrawRect(xw.draw, &drawcol, -					borderpx + cx * win.cw, -					borderpx + cy * win.ch, +					win.hborderpx + cx * win.cw, +					win.vborderpx + cy * win.ch,  					cursorthickness, win.ch);  			break;  		}  	} else {  		XftDrawRect(xw.draw, &drawcol, -				borderpx + cx * win.cw, -				borderpx + cy * win.ch, +				win.hborderpx + cx * win.cw, +				win.vborderpx + cy * win.ch,  				win.cw - 1, 1);  		XftDrawRect(xw.draw, &drawcol, -				borderpx + cx * win.cw, -				borderpx + cy * win.ch, +				win.hborderpx + cx * win.cw, +				win.vborderpx + cy * win.ch,  				1, win.ch - 1);  		XftDrawRect(xw.draw, &drawcol, -				borderpx + (cx + 1) * win.cw - 1, -				borderpx + cy * win.ch, +				win.hborderpx + (cx + 1) * win.cw - 1, +				win.vborderpx + cy * win.ch,  				1, win.ch - 1);  		XftDrawRect(xw.draw, &drawcol, -				borderpx + cx * win.cw, -				borderpx + (cy + 1) * win.ch - 1, +				win.hborderpx + cx * win.cw, +				win.vborderpx + (cy + 1) * win.ch - 1,  				win.cw, 1);  	}  } | 
