You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
675 B
40 lines
675 B
emulate -L zsh |
|
|
|
zmodload zsh/curses |
|
|
|
test_fd0() { |
|
true <&0 |
|
} |
|
|
|
local restore=0 FD |
|
|
|
# Reattach to terminal |
|
if [ ! -t 0 ]; then |
|
# Check if can reattach to terminal in any way |
|
if [[ ! -c /dev/tty && ! -t 2 ]]; then |
|
echo "No terminal available (no /dev/tty and no terminal at stderr)" |
|
return 1 |
|
fi |
|
|
|
if test_fd0 2>/dev/null; then |
|
exec {FD}<&0 |
|
restore=2 |
|
else |
|
restore=1 |
|
fi |
|
|
|
if [[ ! -c /dev/tty ]]; then |
|
exec <&2 |
|
else |
|
exec </dev/tty |
|
fi |
|
fi |
|
|
|
# Run the command |
|
"$@" |
|
|
|
# Restore FD state |
|
(( restore == 1 )) && exec <&- |
|
(( restore == 2 )) && exec <&$FD && exec {FD}<&- |
|
|
|
# vim: set filetype=zsh:
|
|
|