new lsx branch
ab3bcac0
3 file(s) · +59 −7
| 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 |
|
| 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_path dmenu_run lsx ${DESTDIR}${PREFIX}/bin |
|
| 43 | 47 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu |
|
| 44 | 48 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path |
|
| 45 | 49 | @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run |
|
| 46 | - | @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1 |
|
| 50 | + | @chmod 755 ${DESTDIR}${PREFIX}/bin/lsx |
|
| 51 | + | @echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1 |
|
| 47 | 52 | @mkdir -p ${DESTDIR}${MANPREFIX}/man1 |
|
| 48 | 53 | @sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
|
| 54 | + | @sed "s/VERSION/${VERSION}/g" < lsx.1 > ${DESTDIR}${MANPREFIX}/man1/lsx.1 |
|
| 49 | 55 | @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
|
| 56 | + | @chmod 644 ${DESTDIR}${MANPREFIX}/man1/lsx.1 |
|
| 50 | 57 | ||
| 51 | 58 | uninstall: |
|
| 52 | 59 | @echo removing executables from ${DESTDIR}${PREFIX}/bin |
|
| 53 | 60 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu |
|
| 54 | 61 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_path |
|
| 55 | 62 | @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run |
|
| 63 | + | @rm -f ${DESTDIR}${PREFIX}/bin/lsx |
|
| 56 | 64 | @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 |
|
| 57 | 65 | @rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 |
|
| 66 | + | @rm -f ${DESTDIR}${MANPREFIX}/man1/lsx.1 |
|
| 58 | 67 | ||
| 59 | 68 | .PHONY: all options clean dist install uninstall |
|
| 3 | 3 | IFS=: |
|
| 4 | 4 | ||
| 5 | 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" |
|
| 6 | + | lsx $PATH | sort -u > "$CACHE" |
|
| 7 | 7 | fi |
|
| 8 | 8 | ||
| 9 | 9 | cat "$CACHE" |
| 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 *s); |
|
| 10 | + | ||
| 11 | + | int |
|
| 12 | + | main(int argc, char *argv[]) { |
|
| 13 | + | int i; |
|
| 14 | + | ||
| 15 | + | if(argc < 2) |
|
| 16 | + | lsx("."); |
|
| 17 | + | else if(!strcmp(argv[1], "-v")) |
|
| 18 | + | puts("lsx-0.2, © 2006-2011 dmenu engineers, see LICENSE for details"); |
|
| 19 | + | else for(i = 1; i < argc; i++) |
|
| 20 | + | lsx(argv[i]); |
|
| 21 | + | return EXIT_SUCCESS; |
|
| 22 | + | } |
|
| 23 | + | ||
| 24 | + | void |
|
| 25 | + | lsx(const char *dir) { |
|
| 26 | + | char buf[PATH_MAX]; |
|
| 27 | + | struct dirent *d; |
|
| 28 | + | struct stat st; |
|
| 29 | + | DIR *dp; |
|
| 30 | + | ||
| 31 | + | if(!(dp = opendir(dir))) { |
|
| 32 | + | perror(dir); |
|
| 33 | + | return; |
|
| 34 | + | } |
|
| 35 | + | while((d = readdir(dp))) { |
|
| 36 | + | snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name); |
|
| 37 | + | if(stat(buf, &st) == -1) |
|
| 38 | + | perror(buf); |
|
| 39 | + | else if(S_ISREG(st.st_mode) && access(buf, X_OK) == 0) |
|
| 40 | + | puts(d->d_name); |
|
| 41 | + | } |
|
| 42 | + | closedir(dp); |
|
| 43 | + | } |