#!/bin/sh # A dmenu-based file picker (prints selected file to stdout) # Requires: dmenu (or similar) # Usage: dmenu-filepicker [path] menu=dmenu menuopts="-i -l 15" fullpath=$(realpath ${@:-$(pwd)}) while true; do if [ "$sel" = "." ]; then echo "$fullpath" | sed 's|/\.||' break elif [ -d "$fullpath" ] || [ -z "$fullpath" ]; then if [ -z "$fullpath" ]; then fp="/"; else fp="$fullpath"; fi sel=$(ls -a "$fp" | sed 's|.*/||' | $menu $menuopts) if [ "$sel" = ".." ]; then fullpath=$(echo "$fullpath" | sed "s|/[^/]*$||") else fullpath=$(echo "$sel" | sed "s|^|$fullpath/|") fi else echo "$fullpath" break fi [ -z "$sel" ] && break done