sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dmenu-xyw-5.2.diff (3157B)


      1 --- a/dmenu.1	2022-10-04 10:36:58.000000000 -0700
      2 +++ b/dmenu.1	2024-03-23 19:40:27.116453289 -0700
      3 @@ -8,6 +8,12 @@
      4  .IR lines ]
      5  .RB [ \-m
      6  .IR monitor ]
      7 +.RB [ \-x
      8 +.IR xoffset ]
      9 +.RB [ \-y
     10 +.IR yoffset ]
     11 +.RB [ \-z
     12 +.IR width ]
     13  .RB [ \-p
     14  .IR prompt ]
     15  .RB [ \-fn
     16 @@ -54,6 +60,24 @@
     17  dmenu is displayed on the monitor number supplied. Monitor numbers are starting
     18  from 0.
     19  .TP
     20 +.BI \-x " xoffset"
     21 +dmenu is placed at this offset measured from the left side of the monitor.
     22 +Can be negative.
     23 +If option
     24 +.B \-m
     25 +is present, the measurement will use the given monitor.
     26 +.TP
     27 +.BI \-y " yoffset"
     28 +dmenu is placed at this offset measured from the top of the monitor.  If the
     29 +.B \-b
     30 +option is used, the offset is measured from the bottom.  Can be negative.
     31 +If option
     32 +.B \-m
     33 +is present, the measurement will use the given monitor.
     34 +.TP
     35 +.BI \-z " width"
     36 +sets the width of the dmenu window.
     37 +.TP
     38  .BI \-p " prompt"
     39  defines the prompt to be displayed to the left of the input field.
     40  .TP
     41 --- a/dmenu.c	2022-10-04 10:36:58.000000000 -0700
     42 +++ b/dmenu.c	2024-03-23 19:39:53.173081139 -0700
     43 @@ -37,6 +37,9 @@
     44  static char text[BUFSIZ] = "";
     45  static char *embed;
     46  static int bh, mw, mh;
     47 +static int dmx = 0; /* put dmenu at this x offset */
     48 +static int dmy = 0; /* put dmenu at this y offset (measured from the bottom if topbar is 0) */
     49 +static unsigned int dmw = 0; /* make dmenu this wide */
     50  static int inputw = 0, promptw;
     51  static int lrpad; /* sum of left and right padding */
     52  static size_t cursor;
     53 @@ -658,9 +661,9 @@
     54  				if (INTERSECT(x, y, 1, 1, info[i]) != 0)
     55  					break;
     56  
     57 -		x = info[i].x_org;
     58 -		y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
     59 -		mw = info[i].width;
     60 +		x = info[i].x_org + dmx;
     61 +		y = info[i].y_org + (topbar ? dmy : info[i].height - mh - dmy);
     62 +		mw = (dmw>0 ? dmw : info[i].width);;
     63  		XFree(info);
     64  	} else
     65  #endif
     66 @@ -668,9 +671,9 @@
     67  		if (!XGetWindowAttributes(dpy, parentwin, &wa))
     68  			die("could not get embedding window attributes: 0x%lx",
     69  			    parentwin);
     70 -		x = 0;
     71 -		y = topbar ? 0 : wa.height - mh;
     72 -		mw = wa.width;
     73 +		x = dmx;
     74 +		y = topbar ? dmy : wa.height - mh - dmy;
     75 +		mw = (dmw>0 ? dmw : wa.width);
     76  	}
     77  	promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
     78  	inputw = mw / 3; /* input width: ~33% of monitor width */
     79 @@ -711,6 +714,7 @@
     80  usage(void)
     81  {
     82  	die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
     83 +	      "             [-x xoffset] [-y yoffset] [-z width]\n"
     84  	    "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]");
     85  }
     86  
     87 @@ -737,6 +741,12 @@
     88  		/* these options take one argument */
     89  		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */
     90  			lines = atoi(argv[++i]);
     91 +		else if (!strcmp(argv[i], "-x"))   /* window x offset */
     92 +			dmx = atoi(argv[++i]);
     93 +		else if (!strcmp(argv[i], "-y"))   /* window y offset (from bottom up if -b) */
     94 +			dmy = atoi(argv[++i]);
     95 +		else if (!strcmp(argv[i], "-z"))   /* make dmenu this wide */
     96 +			dmw = atoi(argv[++i]);
     97  		else if (!strcmp(argv[i], "-m"))
     98  			mon = atoi(argv[++i]);
     99  		else if (!strcmp(argv[i], "-p"))   /* adds prompt to left of input field */