Blob


1 # MyMenu
3 > A replacement for dmenu, 'cause I was bored
5 ![MyMenu works!](screen.png)
7 ![MyMenu alternate layout](screen-alt.png)
9 ---
11 ## What?
13 This is a replacement for `dmenu(1)`.
15 ## Why?
17 This was the perfect excuse to learn how to make window with Xlib.
19 ## How?
21 Check out the [manpage](mymenu.1) for further documentation. Check out
22 also the [template](Xexample) for the resources.
24 ---
26 ## Dependencies
28 - Xlib
29 - Xinerama (optional)
30 For multi-monitor support
31 - Xft (optional)
32 For TrueType (r) font support
33 - pkg-config (optional)
34 used in the makefile to generate `LIBS` and `CFLAGS` correctly
36 ## Build
38 As simple as `make` (or `make gnu` if you're using GNU libc). Keep in
39 mind that, by default, both Xft and Xinerama are enabled. So, you may
40 want to run:
42 - `make no_xft` to build without xft support;
43 - `make no_xinerama` to build without xinerama support;
44 - `make no_xft_xinerama` to build without xinerama *and* no xft support.
46 #### ignore case completion / don't have `strcasestr(3)`
48 If you want to build without the ignore case completion or on your
49 platform `strcasestr(3)` isn't available, you have to update the
50 `Makefile` and remove `-DUSE_STRCASESTR`. A simple
51 ``` shell
52 sed -i.orig 's/-DUSE_STRCASESTR//g' Makefile
53 ```
54 should be enough.
57 ## FAQ
59 - Does not run / Hangs
61 At the startup mymenu will read `stdin` for a list of item, only
62 then it'll display a window. Are you sure that you're passing
63 something on standard input?
65 - Will feature $X be added?
67 No. Or maybe Yes. In fact, it depends. Open an issue and let's
68 discuss. If it's something that's trivial to achieve in combo with
69 other tool maybe is not the case to add it here.
71 - Is feature $Y present? What $Z do? How to achieve $W?
73 Everything is documented in the man page. To read it, simply execute
74 `man -l mymenu.1` or `mandoc mymenu.1 | less` (depending on your
75 system the `-l` option may not be present).
77 ---
79 ## TODO
81 - Improve UTF8 support
83 The whole UTF8 support is still kinda naïve and should definitely
84 be improved.
86 - Opacity support
88 - Command line flags
90 At the moment the X Resource Database is the only way to interact
91 with the graphic appearance of MyMenu.
93 ## Scripts
95 I'm using this script to launch MyMenu with custom item
97 ``` shell
98 #!/bin/sh
100 cat <<EOF | /bin/sh -c "$(mymenu "$@")"
101 sct 4500
102 lock
103 connect ethernet
104 connect home
105 connect phone
106 ZZZ
107 zzz
108 ...
109 EOF
110 ```
112 You can generate a menu from the `.desktop` file with something like
113 this:
115 ``` shell
116 #!/bin/sh
118 getname() {
119 cat $1 | grep '^Name=' | sed 's/^.*=//'
122 getexec() {
123 cat $1 | grep '^Exec=' | sed 's/^.*=//'
126 desktop_files=`ls /usr/local/share/applications/*.desktop`
129 for i in $desktop_files; do
130 getname $i
131 done
132 } | mymenu "$@" | {
133 read prgname
134 for i in $desktop_files; do
135 name=`getname $i`
136 if [ "x$prgname" = "x$name" ]; then
137 exec `getexec $i`
138 fi
139 done
141 ```
143 or generate a list of executables from `$PATH` like this:
145 ``` shell
146 #!/bin/sh
148 path=`echo $PATH | sed 's/:/ /g'`
151 for i in $path; do
152 ls -F $i | grep '.*\*$' | sed 's/\*//'
153 done
154 } | sort -f | /bin/sh -c "$(mymenu "$@")"
155 ```
157 Of course you can as well use the `dmenu_path` and `dmenu_run` scripts
158 that (usually) comes with `dmenu`.