code / bb

Lines2.7K C1.8K Shell331 YAML273 Markdown197 make44
(32 lines)
1 #!/bin/sh
2 # A simple user-input asker. Result is output to stdout.
3 # Usage: ask [-1] [prompt [initial query]]
4 if [ "$1" = '-1' ]; then
5 # Get one character of input
6 tput civis >/dev/tty;
7 printf '\033[1m%s\033[0m' "$2" >/dev/tty;
8 stty -icanon -echo >/dev/tty 2>/dev/tty;
9 if [ "$(uname)" = "Darwin" ]; then
10 read -n 1 REPLY </dev/tty >/dev/tty;
11 echo $REPLY
12 else
13 dd bs=1 count=1 2>/dev/null </dev/tty
14 fi
15 stty icanon echo >/dev/tty 2>/dev/tty
16 tput cvvis >/dev/tty
17 true
18 else
19 # Get a line of input
20 if command -v ask >/dev/null; then
21 ask --history=bb.hist --prompt="$(printf '%s\033[?25h' "$1")" --query="$2"
22 else
23 printf "\033[1m%s\033[0m" "$1" >/dev/tty
24 tput cvvis >/dev/tty
25 if [ "$(uname)" = "Darwin" ]; then
26 read -e REPLY </dev/tty >/dev/tty
27 else
28 read -r REPLY </dev/tty >/dev/tty
29 fi
30 echo $REPLY
31 fi
32 fi