diff options
author | Christoph Lohmann <20h@r-36.net> | 2012-09-03 23:02:29 +0200 |
---|---|---|
committer | Christoph Lohmann <20h@r-36.net> | 2012-09-03 23:02:29 +0200 |
commit | 579f12d47b38e23abb1073b8e70d67c0c203c42c (patch) | |
tree | e16b4bb81e05bc89332b851925a34569a2a3f06b | |
parent | 466decd53552059bfba9551a924354ae989cb46a (diff) | |
download | st-579f12d47b38e23abb1073b8e70d67c0c203c42c.tar.gz st-579f12d47b38e23abb1073b8e70d67c0c203c42c.zip |
Add -g geometry to st and the manpage.
-rw-r--r-- | st.1 | 4 | ||||
-rw-r--r-- | st.c | 86 |
2 files changed, 72 insertions, 18 deletions
@@ -5,6 +5,8 @@ st \- simple terminal | |||
5 | .B st | 5 | .B st |
6 | .RB [ \-c | 6 | .RB [ \-c |
7 | .IR class ] | 7 | .IR class ] |
8 | .RB [ \-g | ||
9 | .IR geometry ] | ||
8 | .RB [ \-t | 10 | .RB [ \-t |
9 | .IR title ] | 11 | .IR title ] |
10 | .RB [ \-w | 12 | .RB [ \-w |
@@ -29,6 +31,8 @@ defines the window class (default $TERM). | |||
29 | embeds st within the window identified by | 31 | embeds st within the window identified by |
30 | .I windowid | 32 | .I windowid |
31 | .TP | 33 | .TP |
34 | .B \-g " geometry" | ||
35 | defines the X11 geometry string, which will fixate the height and width of st. | ||
32 | .B \-v | 36 | .B \-v |
33 | prints version information to stderr, then exits. | 37 | prints version information to stderr, then exits. |
34 | .TP | 38 | .TP |
@@ -36,7 +36,8 @@ | |||
36 | 36 | ||
37 | #define USAGE \ | 37 | #define USAGE \ |
38 | "st " VERSION " (c) 2010-2012 st engineers\n" \ | 38 | "st " VERSION " (c) 2010-2012 st engineers\n" \ |
39 | "usage: st [-t title] [-c class] [-w windowid] [-v] [-f file] [-e command...]\n" | 39 | "usage: st [-t title] [-c class] [-g geometry]" \ |
40 | " [-w windowid] [-v] [-f file] [-e command...]\n" | ||
40 | 41 | ||
41 | /* XEMBED messages */ | 42 | /* XEMBED messages */ |
42 | #define XEMBED_FOCUS_IN 4 | 43 | #define XEMBED_FOCUS_IN 4 |
@@ -195,6 +196,8 @@ typedef struct { | |||
195 | XIM xim; | 196 | XIM xim; |
196 | XIC xic; | 197 | XIC xic; |
197 | int scr; | 198 | int scr; |
199 | Bool isfixed; /* is fixed geometry? */ | ||
200 | int fx, fy, fw, fh; /* fixed geometry */ | ||
198 | int w; /* window width */ | 201 | int w; /* window width */ |
199 | int h; /* window height */ | 202 | int h; /* window height */ |
200 | int ch; /* char height */ | 203 | int ch; /* char height */ |
@@ -1820,16 +1823,25 @@ void | |||
1820 | xhints(void) { | 1823 | xhints(void) { |
1821 | XClassHint class = {opt_class ? opt_class : TNAME, TNAME}; | 1824 | XClassHint class = {opt_class ? opt_class : TNAME, TNAME}; |
1822 | XWMHints wm = {.flags = InputHint, .input = 1}; | 1825 | XWMHints wm = {.flags = InputHint, .input = 1}; |
1823 | XSizeHints size = { | 1826 | XSizeHints *sizeh = NULL; |
1824 | .flags = PSize | PResizeInc | PBaseSize, | 1827 | |
1825 | .height = xw.h, | 1828 | sizeh = XAllocSizeHints(); |
1826 | .width = xw.w, | 1829 | if(xw.isfixed == False) { |
1827 | .height_inc = xw.ch, | 1830 | sizeh->flags = PSize | PResizeInc | PBaseSize; |
1828 | .width_inc = xw.cw, | 1831 | sizeh->height = xw.h; |
1829 | .base_height = 2*BORDER, | 1832 | sizeh->width = xw.w; |
1830 | .base_width = 2*BORDER, | 1833 | sizeh->height_inc = xw.ch; |
1831 | }; | 1834 | sizeh->width_inc = xw.cw; |
1832 | XSetWMProperties(xw.dpy, xw.win, NULL, NULL, NULL, 0, &size, &wm, &class); | 1835 | sizeh->base_height = 2*BORDER; |
1836 | sizeh->base_width = 2*BORDER; | ||
1837 | } else { | ||
1838 | sizeh->flags = PMaxSize | PMinSize; | ||
1839 | sizeh->min_width = sizeh->max_width = xw.fw; | ||
1840 | sizeh->min_height = sizeh->max_height = xw.fh; | ||
1841 | } | ||
1842 | |||
1843 | XSetWMProperties(xw.dpy, xw.win, NULL, NULL, NULL, 0, sizeh, &wm, &class); | ||
1844 | XFree(sizeh); | ||
1833 | } | 1845 | } |
1834 | 1846 | ||
1835 | XFontSet | 1847 | XFontSet |
@@ -1881,11 +1893,28 @@ xinit(void) { | |||
1881 | XSetWindowAttributes attrs; | 1893 | XSetWindowAttributes attrs; |
1882 | Cursor cursor; | 1894 | Cursor cursor; |
1883 | Window parent; | 1895 | Window parent; |
1896 | int sw, sh; | ||
1884 | 1897 | ||
1885 | if(!(xw.dpy = XOpenDisplay(NULL))) | 1898 | if(!(xw.dpy = XOpenDisplay(NULL))) |
1886 | die("Can't open display\n"); | 1899 | die("Can't open display\n"); |
1887 | xw.scr = XDefaultScreen(xw.dpy); | 1900 | xw.scr = XDefaultScreen(xw.dpy); |
1888 | 1901 | ||
1902 | /* adjust fixed window geometry */ | ||
1903 | if(xw.isfixed) { | ||
1904 | sw = DisplayWidth(xw.dpy, xw.scr); | ||
1905 | sh = DisplayWidth(xw.dpy, xw.scr); | ||
1906 | if(xw.fx < 0) | ||
1907 | xw.fx = sw + xw.fx - xw.fw; | ||
1908 | if(xw.fy < 0) | ||
1909 | xw.fy = sh + xw.fy - xw.fh; | ||
1910 | } else { | ||
1911 | /* window - default size */ | ||
1912 | xw.h = 2*BORDER + term.row * xw.ch; | ||
1913 | xw.w = 2*BORDER + term.col * xw.cw; | ||
1914 | xw.fw = xw.w; | ||
1915 | xw.fh = xw.h; | ||
1916 | } | ||
1917 | |||
1889 | /* font */ | 1918 | /* font */ |
1890 | initfonts(FONT, BOLDFONT); | 1919 | initfonts(FONT, BOLDFONT); |
1891 | 1920 | ||
@@ -1897,10 +1926,6 @@ xinit(void) { | |||
1897 | xw.cmap = XDefaultColormap(xw.dpy, xw.scr); | 1926 | xw.cmap = XDefaultColormap(xw.dpy, xw.scr); |
1898 | xloadcols(); | 1927 | xloadcols(); |
1899 | 1928 | ||
1900 | /* window - default size */ | ||
1901 | xw.h = 2*BORDER + term.row * xw.ch; | ||
1902 | xw.w = 2*BORDER + term.col * xw.cw; | ||
1903 | |||
1904 | attrs.background_pixel = dc.col[DefaultBG]; | 1929 | attrs.background_pixel = dc.col[DefaultBG]; |
1905 | attrs.border_pixel = dc.col[DefaultBG]; | 1930 | attrs.border_pixel = dc.col[DefaultBG]; |
1906 | attrs.bit_gravity = NorthWestGravity; | 1931 | attrs.bit_gravity = NorthWestGravity; |
@@ -1911,8 +1936,8 @@ xinit(void) { | |||
1911 | attrs.colormap = xw.cmap; | 1936 | attrs.colormap = xw.cmap; |
1912 | 1937 | ||
1913 | parent = opt_embed ? strtol(opt_embed, NULL, 0) : XRootWindow(xw.dpy, xw.scr); | 1938 | parent = opt_embed ? strtol(opt_embed, NULL, 0) : XRootWindow(xw.dpy, xw.scr); |
1914 | xw.win = XCreateWindow(xw.dpy, parent, 0, 0, | 1939 | xw.win = XCreateWindow(xw.dpy, parent, xw.fx, xw.fy, |
1915 | xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput, | 1940 | xw.fw, xw.fh, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput, |
1916 | XDefaultVisual(xw.dpy, xw.scr), | 1941 | XDefaultVisual(xw.dpy, xw.scr), |
1917 | CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask | 1942 | CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask |
1918 | | CWColormap, | 1943 | | CWColormap, |
@@ -2275,7 +2300,10 @@ run(void) { | |||
2275 | 2300 | ||
2276 | int | 2301 | int |
2277 | main(int argc, char *argv[]) { | 2302 | main(int argc, char *argv[]) { |
2278 | int i; | 2303 | int i, bitm, xr, yr; |
2304 | unsigned int wr, hr; | ||
2305 | |||
2306 | xw.fw = xw.fh = xw.fx = xw.fy = 0; | ||
2279 | 2307 | ||
2280 | for(i = 1; i < argc; i++) { | 2308 | for(i = 1; i < argc; i++) { |
2281 | switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) { | 2309 | switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) { |
@@ -2295,6 +2323,27 @@ main(int argc, char *argv[]) { | |||
2295 | /* eat every remaining arguments */ | 2323 | /* eat every remaining arguments */ |
2296 | if(++i < argc) opt_cmd = &argv[i]; | 2324 | if(++i < argc) opt_cmd = &argv[i]; |
2297 | goto run; | 2325 | goto run; |
2326 | case 'g': | ||
2327 | if(++i >= argc) | ||
2328 | break; | ||
2329 | |||
2330 | bitm = XParseGeometry(argv[i], &xr, &yr, &wr, &hr); | ||
2331 | if(bitm & XValue) | ||
2332 | xw.fx = xr; | ||
2333 | if(bitm & YValue) | ||
2334 | xw.fy = yr; | ||
2335 | if(bitm & WidthValue) | ||
2336 | xw.fw = (int)wr; | ||
2337 | if(bitm & HeightValue) | ||
2338 | xw.fh = (int)hr; | ||
2339 | if(bitm & XNegative && xw.fx == 0) | ||
2340 | xw.fx = -1; | ||
2341 | if(bitm & XNegative && xw.fy == 0) | ||
2342 | xw.fy = -1; | ||
2343 | |||
2344 | if(xw.fh != 0 && xw.fw != 0) | ||
2345 | xw.isfixed = True; | ||
2346 | break; | ||
2298 | case 'v': | 2347 | case 'v': |
2299 | default: | 2348 | default: |
2300 | die(USAGE); | 2349 | die(USAGE); |
@@ -2310,3 +2359,4 @@ main(int argc, char *argv[]) { | |||
2310 | run(); | 2359 | run(); |
2311 | return 0; | 2360 | return 0; |
2312 | } | 2361 | } |
2362 | |||