1 be5b89f6 2018-05-18 omar.polo # MyMenu
3 68145755 2018-07-01 omar.polo > A menu for Xorg, 'cause I was bored
5 be5b89f6 2018-05-18 omar.polo ![MyMenu works!](screen.png)
7 36a15a9f 2018-05-19 omar.polo ![MyMenu alternate layout](screen-alt.png)
11 be5b89f6 2018-05-18 omar.polo ## What?
13 68145755 2018-07-01 omar.polo This is a simple menu for Xorg, like `dmenu(1)`.
15 be5b89f6 2018-05-18 omar.polo ## Why?
17 c1be85dd 2018-06-14 omar.polo This was the perfect excuse to learn how to use Xlib.
19 be5b89f6 2018-05-18 omar.polo ## How?
21 c1be85dd 2018-06-14 omar.polo Check out the [manpage](mymenu.1.md) for further documentation. Check
22 c1be85dd 2018-06-14 omar.polo out also the [template](Xexample) for the resources.
26 630eb368 2018-09-19 omar.polo ## Features
28 630eb368 2018-09-19 omar.polo - two layout: `horizontal` (a là dmenu) and `vertical` (a là rofi);
29 630eb368 2018-09-19 omar.polo - highly customizable (width, height, position on the screen, colors, borders, ...);
30 630eb368 2018-09-19 omar.polo - transparency support
31 630eb368 2018-09-19 omar.polo - support for both Xft and bitmap font
33 be5b89f6 2018-05-18 omar.polo ## Dependencies
36 e9107672 2018-07-01 omar.polo - Xinerama *(optional)* for multi-monitor support
37 e9107672 2018-07-01 omar.polo - Xft *(optional)* for TrueType font support
38 e9107672 2018-07-01 omar.polo - pkg-config *(optional)* to generate `LIBS` and `CFLAGS`
39 e9107672 2018-07-01 omar.polo - mandoc *(optional)* to generate the
40 e9107672 2018-07-01 omar.polo [markdown version of the manpage](mymenu.1.md)
42 be5b89f6 2018-05-18 omar.polo ## Build
44 75faf30e 2018-05-22 omar.polo As simple as `make` (or `make gnu` if you're using GNU libc). Keep in
45 75faf30e 2018-05-22 omar.polo mind that, by default, both Xft and Xinerama are enabled. So, you may
46 75faf30e 2018-05-22 omar.polo want to run:
48 75faf30e 2018-05-22 omar.polo - `make no_xft` to build without xft support;
49 75faf30e 2018-05-22 omar.polo - `make no_xinerama` to build without xinerama support;
50 75faf30e 2018-05-22 omar.polo - `make no_xft_xinerama` to build without xinerama *and* no xft support.
52 e9107672 2018-07-01 omar.polo Or you can update the first lines of the `Makefile` customizing
53 e9107672 2018-07-01 omar.polo `OPTIONAL` and `CDEFS` to your needs.
55 75faf30e 2018-05-22 omar.polo #### ignore case completion / don't have `strcasestr(3)`
57 75faf30e 2018-05-22 omar.polo If you want to build without the ignore case completion or on your
58 75faf30e 2018-05-22 omar.polo platform `strcasestr(3)` isn't available, you have to update the
59 75faf30e 2018-05-22 omar.polo `Makefile` and remove `-DUSE_STRCASESTR`. A simple
60 75faf30e 2018-05-22 omar.polo ``` shell
61 75faf30e 2018-05-22 omar.polo sed -i.orig 's/-DUSE_STRCASESTR//g' Makefile
63 75faf30e 2018-05-22 omar.polo should be enough.
68 9c241438 2018-05-20 omar.polo - Does not run / Hangs
70 9c241438 2018-05-20 omar.polo At the startup mymenu will read `stdin` for a list of item, only
71 9c241438 2018-05-20 omar.polo then it'll display a window. Are you sure that you're passing
72 9c241438 2018-05-20 omar.polo something on standard input?
74 9c241438 2018-05-20 omar.polo - Will feature $X be added?
76 c1be85dd 2018-06-14 omar.polo No. Or maybe yes. In fact, it depends. Open an issue and let's
77 9c241438 2018-05-20 omar.polo discuss. If it's something that's trivial to achieve in combo with
78 9c241438 2018-05-20 omar.polo other tool maybe is not the case to add it here.
80 9c241438 2018-05-20 omar.polo - Is feature $Y present? What $Z do? How to achieve $W?
82 c1be85dd 2018-06-14 omar.polo Everything is documented in the [man page](mymenu.1.md). To read
83 c1be85dd 2018-06-14 omar.polo it, simply execute `man -l mymenu.1` or `mandoc mymenu.1 | less`
84 c1be85dd 2018-06-14 omar.polo (depending on your system the `-l` option may not be present).
88 b836b1ec 2018-05-18 omar.polo ## Scripts
90 8880d5e3 2018-05-19 omar.polo I'm using this script to launch MyMenu with custom item
92 b836b1ec 2018-05-18 omar.polo ``` shell
93 b836b1ec 2018-05-18 omar.polo #!/bin/sh
95 b836b1ec 2018-05-18 omar.polo cat <<EOF | /bin/sh -c "$(mymenu "$@")"
96 b836b1ec 2018-05-18 omar.polo sct 4500
98 b836b1ec 2018-05-18 omar.polo connect ethernet
99 b836b1ec 2018-05-18 omar.polo connect home
100 b836b1ec 2018-05-18 omar.polo connect phone
107 630eb368 2018-09-19 omar.polo You can generate a list of executables from `$PATH` like this:
109 8880d5e3 2018-05-19 omar.polo ``` shell
110 8880d5e3 2018-05-19 omar.polo #!/bin/sh
112 8880d5e3 2018-05-19 omar.polo path=`echo $PATH | sed 's/:/ /g'`
115 8880d5e3 2018-05-19 omar.polo for i in $path; do
116 242fb700 2019-10-18 omar.polo ls -F $i | sed -n 's/\*$//p'
118 75faf30e 2018-05-22 omar.polo } | sort -f | /bin/sh -c "$(mymenu "$@")"
121 630eb368 2018-09-19 omar.polo You can, for example, select a song to play from the current queue (in mpd), with
123 630eb368 2018-09-19 omar.polo ```shell
124 630eb368 2018-09-19 omar.polo fmt="%position% %artist% - %title%"
125 630eb368 2018-09-19 omar.polo if song=$(mpc playlist -f "$fmt" | mymenu -p "Song: " -A -d " "); then
126 630eb368 2018-09-19 omar.polo mpc play $(echo $song | sed "s/ .*$//")
130 b836b1ec 2018-05-18 omar.polo Of course you can as well use the `dmenu_path` and `dmenu_run` scripts
131 b836b1ec 2018-05-18 omar.polo that (usually) comes with `dmenu`.