From dbd92a62ce1fc25a6819ae6d0a29dc8b8ec9a7dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <hello@mcornella.com>
Date: Fri, 11 Feb 2022 10:01:48 +0100
Subject: [PATCH] fix(updater): do not swallow 1 character in check for user
 input

Co-authored-by: Philippe Troin <phil@fifi.org>
---
 tools/check_for_upgrade.sh | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index 4484df4fe..33f30c85a 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -89,6 +89,23 @@ function update_ohmyzsh() {
   fi
 }
 
+function has_typed_input() {
+  # Created by Philippe Troin <phil@fifi.org>
+  # https://zsh.org/mla/users/2022/msg00062.html
+  emulate -L zsh
+  zmodload zsh/zselect
+
+  {
+    local termios=$(stty --save)
+    stty -icanon
+
+    zselect -t 0 -r 0
+    return $?
+  } always {
+    stty $termios
+  }
+}
+
 () {
   emulate -L zsh
 
@@ -159,7 +176,7 @@ function update_ohmyzsh() {
   fi
 
   # If user has typed input, show reminder and exit
-  if read -t -k 1; then
+  if has_typed_input; then
     echo
     echo "[oh-my-zsh] It's time to update! You can do that by running \`omz update\`"
     return 0