diff options
-rw-r--r-- | Makefile | 25 | ||||
-rw-r--r-- | dmenu.1 | 12 | ||||
-rwxr-xr-x | dmenu_path | 9 | ||||
-rwxr-xr-x | dmenu_run | 9 | ||||
-rw-r--r-- | lsx.1 | 11 | ||||
-rw-r--r-- | lsx.c | 38 |
6 files changed, 77 insertions, 27 deletions
@@ -3,10 +3,10 @@ | |||
3 | 3 | ||
4 | include config.mk | 4 | include config.mk |
5 | 5 | ||
6 | SRC = dmenu.c draw.c | 6 | SRC = dmenu.c draw.c lsx.c |
7 | OBJ = ${SRC:.c=.o} | 7 | OBJ = ${SRC:.c=.o} |
8 | 8 | ||
9 | all: options dmenu | 9 | all: options dmenu lsx |
10 | 10 | ||
11 | options: | 11 | options: |
12 | @echo dmenu build options: | 12 | @echo dmenu build options: |
@@ -20,9 +20,13 @@ options: | |||
20 | 20 | ||
21 | ${OBJ}: config.mk | 21 | ${OBJ}: config.mk |
22 | 22 | ||
23 | dmenu: ${OBJ} | 23 | dmenu: dmenu.o draw.o |
24 | @echo CC -o $@ | 24 | @echo CC -o $@ |
25 | @${CC} -o $@ ${OBJ} ${LDFLAGS} | 25 | @${CC} -o $@ dmenu.o draw.o ${LDFLAGS} |
26 | |||
27 | lsx: lsx.o | ||
28 | @echo CC -o $@ | ||
29 | @${CC} -o $@ lsx.o ${LDFLAGS} | ||
26 | 30 | ||
27 | clean: | 31 | clean: |
28 | @echo cleaning | 32 | @echo cleaning |
@@ -31,7 +35,7 @@ clean: | |||
31 | dist: clean | 35 | dist: clean |
32 | @echo creating dist tarball | 36 | @echo creating dist tarball |
33 | @mkdir -p dmenu-${VERSION} | 37 | @mkdir -p dmenu-${VERSION} |
34 | @cp LICENSE Makefile README config.mk dmenu.1 draw.h dmenu_path dmenu_run ${SRC} dmenu-${VERSION} | 38 | @cp LICENSE Makefile README config.mk dmenu.1 draw.h dmenu_run ${SRC} dmenu-${VERSION} |
35 | @tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} | 39 | @tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} |
36 | @gzip dmenu-${VERSION}.tar | 40 | @gzip dmenu-${VERSION}.tar |
37 | @rm -rf dmenu-${VERSION} | 41 | @rm -rf dmenu-${VERSION} |
@@ -39,21 +43,24 @@ dist: clean | |||
39 | install: all | 43 | install: all |
40 | @echo installing executables to ${DESTDIR}${PREFIX}/bin | 44 | @echo installing executables to ${DESTDIR}${PREFIX}/bin |
41 | @mkdir -p ${DESTDIR}${PREFIX}/bin | 45 | @mkdir -p ${DESTDIR}${PREFIX}/bin |
42 | @cp -f dmenu dmenu_path dmenu_run ${DESTDIR}${PREFIX}/bin | 46 | @cp -f dmenu dmenu_run lsx ${DESTDIR}${PREFIX}/bin |
43 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu | 47 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu |
44 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path | ||
45 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run | 48 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run |
46 | @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1 | 49 | @chmod 755 ${DESTDIR}${PREFIX}/bin/lsx |
50 | @echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1 | ||
47 | @mkdir -p ${DESTDIR}${MANPREFIX}/man1 | 51 | @mkdir -p ${DESTDIR}${MANPREFIX}/man1 |
48 | @sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | 52 | @sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
53 | @sed "s/VERSION/${VERSION}/g" < lsx.1 > ${DESTDIR}${MANPREFIX}/man1/lsx.1 | ||
49 | @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | 54 | @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
55 | @chmod 644 ${DESTDIR}${MANPREFIX}/man1/lsx.1 | ||
50 | 56 | ||
51 | uninstall: | 57 | uninstall: |
52 | @echo removing executables from ${DESTDIR}${PREFIX}/bin | 58 | @echo removing executables from ${DESTDIR}${PREFIX}/bin |
53 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu | 59 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu |
54 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_path | ||
55 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run | 60 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run |
61 | @rm -f ${DESTDIR}${PREFIX}/bin/lsx | ||
56 | @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 | 62 | @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 |
57 | @rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | 63 | @rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
64 | @rm -f ${DESTDIR}${MANPREFIX}/man1/lsx.1 | ||
58 | 65 | ||
59 | .PHONY: all options clean dist install uninstall | 66 | .PHONY: all options clean dist install uninstall |
@@ -23,12 +23,10 @@ dmenu \- dynamic menu | |||
23 | .RB [ \-v ] | 23 | .RB [ \-v ] |
24 | .P | 24 | .P |
25 | .BR dmenu_run " ..." | 25 | .BR dmenu_run " ..." |
26 | .P | ||
27 | .B dmenu_path | ||
28 | .SH DESCRIPTION | 26 | .SH DESCRIPTION |
29 | .B dmenu | 27 | .B dmenu |
30 | is a dynamic menu for X, originally designed for | 28 | is a dynamic menu for X, originally designed for |
31 | .BR dwm (1). | 29 | .IR dwm (1). |
32 | It manages huge numbers of user\-defined menu items efficiently. | 30 | It manages huge numbers of user\-defined menu items efficiently. |
33 | .P | 31 | .P |
34 | dmenu reads a list of newline\-separated items from stdin and creates a menu. | 32 | dmenu reads a list of newline\-separated items from stdin and creates a menu. |
@@ -36,11 +34,8 @@ When the user selects an item or enters any text and presses Return, their | |||
36 | choice is printed to stdout and dmenu terminates. | 34 | choice is printed to stdout and dmenu terminates. |
37 | .P | 35 | .P |
38 | .B dmenu_run | 36 | .B dmenu_run |
39 | is a dmenu script used by dwm which lists programs in the user's PATH and | 37 | is a dmenu script used by dwm which lists programs in the user's $PATH and |
40 | executes the selected item. | 38 | executes the selected item. |
41 | .P | ||
42 | .B dmenu_path | ||
43 | is a script used by dmenu_run to find and cache a list of executables. | ||
44 | .SH OPTIONS | 39 | .SH OPTIONS |
45 | .TP | 40 | .TP |
46 | .B \-b | 41 | .B \-b |
@@ -100,4 +95,5 @@ Exit without selecting an item, returning failure. | |||
100 | .B Ctrl\-y | 95 | .B Ctrl\-y |
101 | Paste the current X selection into the input field. | 96 | Paste the current X selection into the input field. |
102 | .SH SEE ALSO | 97 | .SH SEE ALSO |
103 | .BR dwm (1) | 98 | .IR dwm (1), |
99 | .IR lsx (1) | ||
diff --git a/dmenu_path b/dmenu_path deleted file mode 100755 index 1b1b241..0000000 --- a/dmenu_path +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #!/bin/sh | ||
2 | CACHE=$HOME/.dmenu_cache | ||
3 | IFS=: | ||
4 | |||
5 | if ! test -f "$CACHE" || find $PATH -type d -newer "$CACHE" | grep -q .; then | ||
6 | find $PATH ! -type d \( -perm -1 -o -perm -10 -o -perm -100 \) | sed 's/.*\///' | sort -u > "$CACHE" | ||
7 | fi | ||
8 | |||
9 | cat "$CACHE" | ||
@@ -1,2 +1,9 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | exe=`dmenu_path | dmenu ${1+"$@"}` && exec $exe | 2 | CACHE=${XDG_CACHE_HOME:-"$HOME/.cache"}/dmenu_run |
3 | ( | ||
4 | IFS=: | ||
5 | if test "`ls -dt $PATH "$CACHE" 2> /dev/null | sed 1q`" != "$CACHE"; then | ||
6 | mkdir -p "`dirname "$CACHE"`" && lsx $PATH | sort -u > "$CACHE" | ||
7 | fi | ||
8 | ) | ||
9 | cmd=`dmenu "$@" < "$CACHE"` && exec $cmd | ||
@@ -0,0 +1,11 @@ | |||
1 | .TH LSX 1 dmenu\-VERSION | ||
2 | .SH NAME | ||
3 | lsx \- list executables | ||
4 | .SH SYNOPSIS | ||
5 | .B lsx | ||
6 | .RI [ directory ...] | ||
7 | .SH DESCRIPTION | ||
8 | .B lsx | ||
9 | lists the executables in each | ||
10 | .IR directory . | ||
11 | If none are given the current working directory is used. | ||
@@ -0,0 +1,38 @@ | |||
1 | /* See LICENSE file for copyright and license details. */ | ||
2 | #include <dirent.h> | ||
3 | #include <stdio.h> | ||
4 | #include <stdlib.h> | ||
5 | #include <string.h> | ||
6 | #include <unistd.h> | ||
7 | #include <sys/stat.h> | ||
8 | |||
9 | static void lsx(const char *dir); | ||
10 | |||
11 | int | ||
12 | main(int argc, char *argv[]) { | ||
13 | int i; | ||
14 | |||
15 | if(argc < 2) | ||
16 | lsx("."); | ||
17 | else for(i = 1; i < argc; i++) | ||
18 | lsx(argv[i]); | ||
19 | return EXIT_SUCCESS; | ||
20 | } | ||
21 | |||
22 | void | ||
23 | lsx(const char *dir) { | ||
24 | char buf[PATH_MAX]; | ||
25 | struct dirent *d; | ||
26 | struct stat st; | ||
27 | DIR *dp; | ||
28 | |||
29 | if(!(dp = opendir(dir))) { | ||
30 | perror(dir); | ||
31 | return; | ||
32 | } | ||
33 | while((d = readdir(dp))) | ||
34 | if(snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name) < sizeof buf | ||
35 | && !stat(buf, &st) && S_ISREG(st.st_mode) && access(buf, X_OK) == 0) | ||
36 | puts(d->d_name); | ||
37 | closedir(dp); | ||
38 | } | ||