merge lsx -> default
This commit is contained in:
		
						commit
						49672e9d05
					
				
					 6 changed files with 77 additions and 27 deletions
				
			
		
							
								
								
									
										25
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										25
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -3,10 +3,10 @@ | ||||||
| 
 | 
 | ||||||
| include config.mk | include config.mk | ||||||
| 
 | 
 | ||||||
| SRC = dmenu.c draw.c | SRC = dmenu.c draw.c lsx.c | ||||||
| OBJ = ${SRC:.c=.o} | OBJ = ${SRC:.c=.o} | ||||||
| 
 | 
 | ||||||
| all: options dmenu | all: options dmenu lsx | ||||||
| 
 | 
 | ||||||
| options: | options: | ||||||
| 	@echo dmenu build options: | 	@echo dmenu build options: | ||||||
|  | @ -20,9 +20,13 @@ options: | ||||||
| 
 | 
 | ||||||
| ${OBJ}: config.mk | ${OBJ}: config.mk | ||||||
| 
 | 
 | ||||||
| dmenu: ${OBJ} | dmenu: dmenu.o draw.o | ||||||
| 	@echo CC -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: | clean: | ||||||
| 	@echo cleaning | 	@echo cleaning | ||||||
|  | @ -31,7 +35,7 @@ clean: | ||||||
| dist: clean | dist: clean | ||||||
| 	@echo creating dist tarball | 	@echo creating dist tarball | ||||||
| 	@mkdir -p dmenu-${VERSION} | 	@mkdir -p dmenu-${VERSION} | ||||||
| 	@cp LICENSE Makefile README config.mk dmenu.1 draw.h dmenu_path dmenu_run ${SRC} dmenu-${VERSION} | 	@cp LICENSE Makefile README config.mk dmenu.1 draw.h dmenu_run ${SRC} dmenu-${VERSION} | ||||||
| 	@tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} | 	@tar -cf dmenu-${VERSION}.tar dmenu-${VERSION} | ||||||
| 	@gzip dmenu-${VERSION}.tar | 	@gzip dmenu-${VERSION}.tar | ||||||
| 	@rm -rf dmenu-${VERSION} | 	@rm -rf dmenu-${VERSION} | ||||||
|  | @ -39,21 +43,24 @@ dist: clean | ||||||
| install: all | install: all | ||||||
| 	@echo installing executables to ${DESTDIR}${PREFIX}/bin | 	@echo installing executables to ${DESTDIR}${PREFIX}/bin | ||||||
| 	@mkdir -p ${DESTDIR}${PREFIX}/bin | 	@mkdir -p ${DESTDIR}${PREFIX}/bin | ||||||
| 	@cp -f dmenu dmenu_path dmenu_run ${DESTDIR}${PREFIX}/bin | 	@cp -f dmenu dmenu_run lsx ${DESTDIR}${PREFIX}/bin | ||||||
| 	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu | 	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu | ||||||
| 	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_path |  | ||||||
| 	@chmod 755 ${DESTDIR}${PREFIX}/bin/dmenu_run | 	@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 | 	@mkdir -p ${DESTDIR}${MANPREFIX}/man1 | ||||||
| 	@sed "s/VERSION/${VERSION}/g" < dmenu.1 > ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | 	@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/dmenu.1 | ||||||
|  | 	@chmod 644 ${DESTDIR}${MANPREFIX}/man1/lsx.1 | ||||||
| 
 | 
 | ||||||
| uninstall: | uninstall: | ||||||
| 	@echo removing executables from ${DESTDIR}${PREFIX}/bin | 	@echo removing executables from ${DESTDIR}${PREFIX}/bin | ||||||
| 	@rm -f ${DESTDIR}${PREFIX}/bin/dmenu | 	@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/dmenu_run | ||||||
|  | 	@rm -f ${DESTDIR}${PREFIX}/bin/lsx | ||||||
| 	@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 | 	@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 | ||||||
| 	@rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | 	@rm -f ${DESTDIR}${MANPREFIX}/man1/dmenu.1 | ||||||
|  | 	@rm -f ${DESTDIR}${MANPREFIX}/man1/lsx.1 | ||||||
| 
 | 
 | ||||||
| .PHONY: all options clean dist install uninstall | .PHONY: all options clean dist install uninstall | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								dmenu.1
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								dmenu.1
									
										
									
									
									
								
							|  | @ -23,12 +23,10 @@ dmenu \- dynamic menu | ||||||
| .RB [ \-v ] | .RB [ \-v ] | ||||||
| .P | .P | ||||||
| .BR dmenu_run " ..." | .BR dmenu_run " ..." | ||||||
| .P |  | ||||||
| .B dmenu_path |  | ||||||
| .SH DESCRIPTION | .SH DESCRIPTION | ||||||
| .B dmenu | .B dmenu | ||||||
| is a dynamic menu for X, originally designed for | is a dynamic menu for X, originally designed for | ||||||
| .BR dwm (1). | .IR dwm (1). | ||||||
| It manages huge numbers of user\-defined menu items efficiently. | It manages huge numbers of user\-defined menu items efficiently. | ||||||
| .P | .P | ||||||
| dmenu reads a list of newline\-separated items from stdin and creates a menu. | 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 | ||||||
| choice is printed to stdout and dmenu terminates. | choice is printed to stdout and dmenu terminates. | ||||||
| .P | .P | ||||||
| .B dmenu_run | .B dmenu_run | ||||||
| is a dmenu script used by dwm which lists programs in the user's PATH and | is a dmenu script used by dwm which lists programs in the user's $PATH and | ||||||
| executes the selected item. | executes the selected item. | ||||||
| .P |  | ||||||
| .B dmenu_path |  | ||||||
| is a script used by dmenu_run to find and cache a list of executables. |  | ||||||
| .SH OPTIONS | .SH OPTIONS | ||||||
| .TP | .TP | ||||||
| .B \-b | .B \-b | ||||||
|  | @ -100,4 +95,5 @@ Exit without selecting an item, returning failure. | ||||||
| .B Ctrl\-y | .B Ctrl\-y | ||||||
| Paste the current X selection into the input field. | Paste the current X selection into the input field. | ||||||
| .SH SEE ALSO | .SH SEE ALSO | ||||||
| .BR dwm (1) | .IR dwm (1), | ||||||
|  | .IR lsx (1) | ||||||
|  |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| #!/bin/sh |  | ||||||
| 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" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| cat "$CACHE" |  | ||||||
|  | @ -1,2 +1,9 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| exe=`dmenu_path | dmenu ${1+"$@"}` && exec $exe | CACHE=${XDG_CACHE_HOME:-"$HOME/.cache"}/dmenu_run | ||||||
|  | ( | ||||||
|  | 	IFS=: | ||||||
|  | 	if test "`ls -dt $PATH "$CACHE" 2> /dev/null | sed 1q`" != "$CACHE"; then | ||||||
|  | 		mkdir -p "`dirname "$CACHE"`" && lsx $PATH | sort -u > "$CACHE" | ||||||
|  | 	fi | ||||||
|  | ) | ||||||
|  | cmd=`dmenu "$@" < "$CACHE"` && exec $cmd | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								lsx.1
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lsx.1
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | .TH LSX 1 dmenu\-VERSION | ||||||
|  | .SH NAME | ||||||
|  | lsx \- list executables | ||||||
|  | .SH SYNOPSIS | ||||||
|  | .B lsx | ||||||
|  | .RI [ directory ...] | ||||||
|  | .SH DESCRIPTION | ||||||
|  | .B lsx | ||||||
|  | lists the executables in each | ||||||
|  | .IR directory . | ||||||
|  | If none are given the current working directory is used. | ||||||
							
								
								
									
										38
									
								
								lsx.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lsx.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | /* 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 *dir); | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | main(int argc, char *argv[]) { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	if(argc < 2) | ||||||
|  | 		lsx("."); | ||||||
|  | 	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))) | ||||||
|  | 		if(snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name) < sizeof buf | ||||||
|  | 		&& !stat(buf, &st) && S_ISREG(st.st_mode) && access(buf, X_OK) == 0) | ||||||
|  | 			puts(d->d_name); | ||||||
|  | 	closedir(dp); | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue