Run on macOS: bash 3.2, arrow keys, and honest session reporting
macOS ships bash 3.2, and the port used three things it does not have: mapfile, fractional `read -t`, and GNU `stat -c`. The first two took the interactive menu down - `mapfile: command not found` in the preset picker, and an arrow key that parsed as a bare Escape, leaving `[C` in the tty for zsh to report as a bad pattern. read_key now reads the escape tail through the terminal itself: icanon off with min 0 / time 1, so a plain read returns the moment a byte arrives and gives up after ~0.1s. bash 3.2's `read -t 0` cannot be used to poll for this - it reports nothing even with bytes buffered (checked against 3.2.57). CSI sequences are consumed whole, so modified keys like Ctrl+Right no longer leak their tail either. Verified interactively under bash 3.2.57 in a pty: arrows, pgup/pgdn, home/end, enter, backspace, and a bare Escape all parse, with no stray bytes in the tty. Session listing reads /proc, which macOS does not have; it now says so rather than silently reporting no running sessions - the answer that gets people to switch out from under a live session. install.sh swaps GNU `find -print -quit` for a glob, and the README notes both. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+6
-3
@@ -37,9 +37,12 @@ if [ ! -f "$SRC/claude-mode" ] || [ ! -f "$SRC/cm-json.py" ]; then
|
||||
TMP="$(mktemp -d "${TMPDIR:-/tmp}/claude-mode-src.XXXXXX")"
|
||||
printf 'no local checkout found - fetching source from %s\n' "$REPO_URL"
|
||||
curl -fsSL "$REPO_URL/archive/master.tar.gz" | tar -xz -C "$TMP"
|
||||
EXTRACTED="$(find "$TMP" -type f -name claude-mode -print -quit)"
|
||||
[ -n "$EXTRACTED" ] || { fail 'archive did not contain linux/claude-mode - repo layout changed?'; exit 1; }
|
||||
SRC="$(dirname "$EXTRACTED")"
|
||||
# a plain glob rather than find -print -quit: BSD find (macOS) has no -quit
|
||||
SRC=''
|
||||
for _c in "$TMP"/*/linux/claude-mode "$TMP"/linux/claude-mode; do
|
||||
[ -f "$_c" ] && { SRC="$(dirname "$_c")"; break; }
|
||||
done
|
||||
[ -n "$SRC" ] || { fail 'archive did not contain linux/claude-mode - repo layout changed?'; exit 1; }
|
||||
fi
|
||||
|
||||
printf '\ninstalling claude-mode -> %s\n' "$ROOT"
|
||||
|
||||
Reference in New Issue
Block a user