new lsx branch - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ab3bcac0bf42c1e63367a0f319a66524d5acdfe3
 (DIR) parent 723cbabc122292cc87474fd203e199e392206640
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Mon, 13 Jun 2011 19:28:30 +0100
       
       new lsx branch
       Diffstat:
         M Makefile                            |      21 +++++++++++++++------
         M dmenu_path                          |       2 +-
         A lsx.c                               |      43 ++++++++++++++++++++++++++++++
       
       3 files changed, 59 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -3,10 +3,10 @@
        
        include config.mk
        
       -SRC = dmenu.c draw.c
       +SRC = dmenu.c draw.c lsx.c
        OBJ = ${SRC:.c=.o}
        
       -all: options dmenu
       +all: options dmenu lsx
        
        options:
                @echo dmenu build options:
       @@ -20,9 +20,13 @@ options:
        
        ${OBJ}: config.mk
        
       -dmenu: ${OBJ}
       +dmenu: dmenu.o draw.o
                @echo CC -o $@
       -        @${CC} -o $@ ${OBJ} ${LDFLAGS}
       +        @${CC} -o $@ dmenu.o draw.o ${LDFLAGS}
       +
       +lsx: lsx.o
       +        @echo CC -o $@
       +        @${CC} -o $@ lsx.o ${LDFLAGS}
        
        clean:
                @echo cleaning
       @@ -39,21 +43,26 @@ dist: clean
        install: all
                @echo installing executables to ${DESTDIR}${PREFIX}/bin
                @mkdir -p ${DESTDIR}${PREFIX}/bin
       -        @cp -f dmenu dmenu_path dmenu_run ${DESTDIR}${PREFIX}/bin
       +        @cp -f dmenu dmenu_path dmenu_run lsx ${DESTDIR}${PREFIX}/bin
                @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu
                @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path
                @chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run
       -        @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
       +        @chmod 755 ${DESTDIR}${PREFIX}/bin/lsx
       +        @echo installing manual pages to ${DESTDIR}${MANPREFIX}/man1
                @mkdir -p ${DESTDIR}${MANPREFIX}/man1
                @sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1
       +        @sed "s/VERSION/${VERSION}/g" < lsx.1 > ${DESTDIR}${MANPREFIX}/man1/lsx.1
                @chmod 644 ${DESTDIR}${MANPREFIX}/man1/dmenu.1
       +        @chmod 644 ${DESTDIR}${MANPREFIX}/man1/lsx.1
        
        uninstall:
                @echo removing executables from ${DESTDIR}${PREFIX}/bin
                @rm -f ${DESTDIR}${PREFIX}/bin/dmenu
                @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_path
                @rm -f ${DESTDIR}${PREFIX}/bin/dmenu_run
       +        @rm -f ${DESTDIR}${PREFIX}/bin/lsx
                @echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
                @rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1
       +        @rm -f ${DESTDIR}${MANPREFIX}/man1/lsx.1
        
        .PHONY: all options clean dist install uninstall
 (DIR) diff --git a/dmenu_path b/dmenu_path
       @@ -3,7 +3,7 @@ CACHE=$HOME/.dmenu_cache
        IFS=:
        
        if ! test -f "$CACHE" || find $PATH -type d -newer "$CACHE" | grep -q .; then
       -        find $PATH ! -type d \( -perm -1 -o -perm -10 -o -perm -100 \) | sed 's/.*\///' | sort -u > "$CACHE"
       +        lsx $PATH | sort -u > "$CACHE"
        fi
        
        cat "$CACHE"
 (DIR) diff --git a/lsx.c b/lsx.c
       @@ -0,0 +1,43 @@
       +/* See LICENSE file for copyright and license details. */
       +#include <dirent.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <string.h>
       +#include <unistd.h>
       +#include <sys/stat.h>
       +
       +static void lsx(const char *s);
       +
       +int
       +main(int argc, char *argv[]) {
       +        int i;
       +
       +        if(argc < 2)
       +                lsx(".");
       +        else if(!strcmp(argv[1], "-v"))
       +                puts("lsx-0.2, © 2006-2011 dmenu engineers, see LICENSE for details");
       +        else for(i = 1; i < argc; i++)
       +                lsx(argv[i]);
       +        return EXIT_SUCCESS;
       +}
       +
       +void
       +lsx(const char *dir) {
       +        char buf[PATH_MAX];
       +        struct dirent *d;
       +        struct stat st;
       +        DIR *dp;
       +
       +        if(!(dp = opendir(dir))) {
       +                perror(dir);
       +                return;
       +        }
       +        while((d = readdir(dp))) {
       +                snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name);
       +                if(stat(buf, &st) == -1)
       +                        perror(buf);
       +                else if(S_ISREG(st.st_mode) && access(buf, X_OK) == 0)
       +                        puts(d->d_name);
       +        }
       +        closedir(dp);
       +}