#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: e [FILE] e -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message FILE path to the file Flexibly run a text editor, either directly or in a pipe. The editor used is either $VISUAL or $EDITOR, with a fallback to vi in case any of those variables aren't defined. Examples: Edit "file.txt": $ e file.txt Manipulate the content of a pipe midway: $ seq 10 | e | grep 5 EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done while getopts 'h' flag; do case "$flag" in (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) CMD="${VISUAL:-${EDITOR:-vi}}" if [ "$CMD" = 'e' ]; then CMD='vi' fi if [ ! -t 0 ]; then F="$(mkstemp)" trap 'rm -f "$F"' EXIT cat > "$F" exec 0&1 exec 1>/dev/tty $CMD "$F" cat "$F" >&3 else if [ $# -eq 0 ]; then f="$(fzf --select-1 --exit-0 < "$XDG_DATA_HOME"/euandreh/e.list.txt)" if [ -n "$f" ]; then history -s e "$f" sh -c "$CMD $f" fi else $CMD "$@" fi fi