diff --git a/demo/bin/ssh b/demo/bin/ssh index d8fea773..f1f9c934 100755 --- a/demo/bin/ssh +++ b/demo/bin/ssh @@ -8,16 +8,20 @@ # leaking the local machine. Do NOT install this on your PATH outside demos. # ssh's argv: options (some take a value), the destination, then an optional -# remote command. Broadcast passes one; a session does not. +# remote command. Broadcast passes one; a session does not. `-E ` is +# where ssh writes its log; sshub passes a FIFO there. dest="" +log="" cmd=() while [ $# -gt 0 ]; do if [ -n "$dest" ]; then - cmd+=("$1") + # Broadcast sends `dest -- command`; like ssh, the `--` is not part of it. + [ ${#cmd[@]} -eq 0 ] && [ "$1" = "--" ] || cmd+=("$1") else case "$1" in --) shift; dest="${1:-}" ;; - -[BbcDEeFIiJLlmOopQRSWw]) shift ;; + -E) shift; log="${1:-}" ;; + -[BbcDeFIiJLlmOopQRSWw]) shift ;; -*) ;; *) dest="$1" ;; esac @@ -29,10 +33,10 @@ host="${dest##*@}" # strip any user@ prefix for display here="$(cd "$(dirname "$0")" && pwd)" -# sshub siphons the child's stderr (fd 2) into a side channel to hide ssh's -# `-v` handshake, and keys its "connecting → connected" header off it. Emit a -# believable handshake there, including the "Authenticated to" marker sshub -# looks for, so the session reads as genuinely connected. +# sshub reads ssh's `-E` log to show the handshake on the connect screen, and +# only an "Authenticated to" line there marks the session connected: until +# then the session takes no keystrokes. Emit a believable handshake into that +# log (stderr when there is none), marker included. if [ ${#cmd[@]} -eq 0 ]; then { printf 'OpenSSH_9.6p1 Ubuntu-3ubuntu13, OpenSSL 3.0.13\n' @@ -42,7 +46,7 @@ if [ ${#cmd[@]} -eq 0 ]; then printf 'debug1: Host '\''%s'\'' is known and matches the ED25519 host key.\n' "$host" printf 'debug1: Authenticated to %s ([%s]:22) using "publickey".\n' "$host" "$host" printf 'debug1: channel 0: new session\n' -} >&2 +} >"${log:-/dev/stderr}" sleep 0.4 printf '\n' diff --git a/demo/gifs/add-host.gif b/demo/gifs/add-host.gif index d11b613f..8c6c4d26 100644 Binary files a/demo/gifs/add-host.gif and b/demo/gifs/add-host.gif differ diff --git a/demo/gifs/broadcast.gif b/demo/gifs/broadcast.gif index 650c9801..8726b897 100644 Binary files a/demo/gifs/broadcast.gif and b/demo/gifs/broadcast.gif differ diff --git a/demo/gifs/connect.gif b/demo/gifs/connect.gif index 727357af..7fb36643 100644 Binary files a/demo/gifs/connect.gif and b/demo/gifs/connect.gif differ diff --git a/demo/gifs/hero.gif b/demo/gifs/hero.gif index caad1bd6..55308cfd 100644 Binary files a/demo/gifs/hero.gif and b/demo/gifs/hero.gif differ diff --git a/demo/gifs/navigate.gif b/demo/gifs/navigate.gif index 72cf233f..86ea58b9 100644 Binary files a/demo/gifs/navigate.gif and b/demo/gifs/navigate.gif differ diff --git a/demo/gifs/sftp.gif b/demo/gifs/sftp.gif index cd818f56..3ca04242 100644 Binary files a/demo/gifs/sftp.gif and b/demo/gifs/sftp.gif differ diff --git a/demo/gifs/snippets.gif b/demo/gifs/snippets.gif index 88b009f5..4ed7a6c1 100644 Binary files a/demo/gifs/snippets.gif and b/demo/gifs/snippets.gif differ diff --git a/demo/gifs/themes.gif b/demo/gifs/themes.gif index 5c5eb4f7..11b77a6a 100644 Binary files a/demo/gifs/themes.gif and b/demo/gifs/themes.gif differ diff --git a/demo/record.py b/demo/record.py old mode 100644 new mode 100755 index 72063f58..178d9af0 --- a/demo/record.py +++ b/demo/record.py @@ -323,10 +323,12 @@ def navigate() -> Tape: t.type("/").sleep(1.2).type("quad").sleep(1.6).key("esc").sleep(1.2) # Group manager overlay (nested groups). t.type("G").sleep(1.6).key("down").sleep(0.8).key("down").sleep(0.8).key("esc").sleep(1.2) - # Multi-tag filter: # opens the picker, Space toggles, Enter applies. + # Multi-tag filter: # opens the picker, Space toggles, Enter applies. The + # picker lists (all) then the tags alphabetically; #db AND #prod matches + # the two Cloudflare hosts, where the neighbours #ci and #db share none. t.type("#").sleep(1.2) - t.key("down").sleep(0.7).key("space").sleep(0.8) - t.key("down").sleep(0.7).key("space").sleep(1.0).key("enter") + t.key("down", times=2, gap=0.7).sleep(0.7).key("space").sleep(0.8) + t.key("down", times=3, gap=0.7).sleep(0.7).key("space").sleep(1.0).key("enter") t.sleep(3.5) return t diff --git a/demo/screenshots/add-host.png b/demo/screenshots/add-host.png index 5141a1c8..09371527 100644 Binary files a/demo/screenshots/add-host.png and b/demo/screenshots/add-host.png differ diff --git a/demo/screenshots/help.png b/demo/screenshots/help.png index 61e9bac7..45006272 100644 Binary files a/demo/screenshots/help.png and b/demo/screenshots/help.png differ diff --git a/demo/screenshots/hosts.png b/demo/screenshots/hosts.png index a81db0a9..428860f0 100644 Binary files a/demo/screenshots/hosts.png and b/demo/screenshots/hosts.png differ diff --git a/demo/screenshots/keybindings.png b/demo/screenshots/keybindings.png index 8ab27f71..21440757 100644 Binary files a/demo/screenshots/keybindings.png and b/demo/screenshots/keybindings.png differ diff --git a/demo/screenshots/known-hosts.png b/demo/screenshots/known-hosts.png index 25af13ba..9100caf9 100644 Binary files a/demo/screenshots/known-hosts.png and b/demo/screenshots/known-hosts.png differ diff --git a/demo/screenshots/palette.png b/demo/screenshots/palette.png index 4df69b7c..c367f830 100644 Binary files a/demo/screenshots/palette.png and b/demo/screenshots/palette.png differ diff --git a/demo/screenshots/settings.png b/demo/screenshots/settings.png index e7c2e967..22266177 100644 Binary files a/demo/screenshots/settings.png and b/demo/screenshots/settings.png differ diff --git a/demo/screenshots/sftp.png b/demo/screenshots/sftp.png index 27d26084..5b93df75 100644 Binary files a/demo/screenshots/sftp.png and b/demo/screenshots/sftp.png differ diff --git a/demo/screenshots/tags.png b/demo/screenshots/tags.png index 11a46300..008a6f7c 100644 Binary files a/demo/screenshots/tags.png and b/demo/screenshots/tags.png differ diff --git a/demo/screenshots/theme-picker.png b/demo/screenshots/theme-picker.png index 5569cb96..54d4a06d 100644 Binary files a/demo/screenshots/theme-picker.png and b/demo/screenshots/theme-picker.png differ