merge lsx -> default 49672e9d
Connor Lane Smith · 2011-06-23 20:27 6 file(s) · +77 −27
Makefile +16 −9
3 3
4 4
include config.mk
5 5
6 -
SRC = dmenu.c draw.c
6 +
SRC = dmenu.c draw.c lsx.c
7 7
OBJ = ${SRC:.c=.o}
8 8
9 -
all: options dmenu
9 +
all: options dmenu lsx
10 10
11 11
options:
12 12
	@echo dmenu build options:
20 20
21 21
${OBJ}: config.mk
22 22
23 -
dmenu: ${OBJ}
23 +
dmenu: dmenu.o draw.o
24 +
	@echo CC -o $@
25 +
	@${CC} -o $@ dmenu.o draw.o ${LDFLAGS}
26 +
27 +
lsx: lsx.o
24 28
	@echo CC -o $@
25 -
	@${CC} -o $@ ${OBJ} ${LDFLAGS}
29 +
	@${CC} -o $@ lsx.o ${LDFLAGS}
26 30
27 31
clean:
28 32
	@echo cleaning
31 35
dist: clean
32 36
	@echo creating dist tarball
33 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 39
	@tar -cf dmenu-${VERSION}.tar dmenu-${VERSION}
36 40
	@gzip dmenu-${VERSION}.tar
37 41
	@rm -rf dmenu-${VERSION}
39 43
install: all
40 44
	@echo installing executables to ${DESTDIR}${PREFIX}/bin
41 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 47
	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu
44 -
	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path
45 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 51
	@mkdir -p ${DESTDIR}${MANPREFIX}/man1
48 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 54
	@chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1
55 +
	@chmod 644 ${DESTDIR}${MANPREFIX}/man1/lsx.1
50 56
51 57
uninstall:
52 58
	@echo removing executables from ${DESTDIR}${PREFIX}/bin
53 59
	@rm -f ${DESTDIR}${PREFIX}/bin/dmenu
54 -
	@rm -f ${DESTDIR}${PREFIX}/bin/dmenu_path
55 60
	@rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run
61 +
	@rm -f ${DESTDIR}${PREFIX}/bin/lsx
56 62
	@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
57 63
	@rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1
64 +
	@rm -f ${DESTDIR}${MANPREFIX}/man1/lsx.1
58 65
59 66
.PHONY: all options clean dist install uninstall
dmenu.1 +4 −8
23 23
.RB [ \-v ]
24 24
.P
25 25
.BR dmenu_run " ..."
26 -
.P
27 -
.B dmenu_path
28 26
.SH DESCRIPTION
29 27
.B dmenu
30 28
is a dynamic menu for X, originally designed for
31 -
.BR dwm (1).
29 +
.IR dwm (1).
32 30
It manages huge numbers of user\-defined menu items efficiently.
33 31
.P
34 32
dmenu reads a list of newline\-separated items from stdin and creates a menu.
36 34
choice is printed to stdout and dmenu terminates.
37 35
.P
38 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 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 39
.SH OPTIONS
45 40
.TP
46 41
.B \-b
100 95
.B Ctrl\-y
101 96
Paste the current X selection into the input field.
102 97
.SH SEE ALSO
103 -
.BR dwm (1)
98 +
.IR dwm (1),
99 +
.IR lsx (1)
dmenu_path (deleted) +0 −9
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"
dmenu_run +8 −1
1 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
lsx.1 (added) +11 −0
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.
lsx.c (added) +38 −0
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 +
}