diff options
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/upgrade.sh | 101 | 
1 files changed, 93 insertions, 8 deletions
diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 1424d1433..7642858fe 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -15,11 +15,98 @@ cd "$ZSH"  # Use colors, but only if connected to a terminal  # and that terminal supports them. +# The [ -t 1 ] check only works when the function is not called from +# a subshell (like in `$(...)` or `(...)`, so this hack redefines the +# function at the top level to always return false when stdout is not +# a tty. +if [ -t 1 ]; then +  is_tty() { +    true +  } +else +  is_tty() { +    false +  } +fi + +# This function uses the logic from supports-hyperlinks[1][2], which is +# made by Kat Marchán (@zkat) and licensed under the Apache License 2.0. +# [1] https://github.com/zkat/supports-hyperlinks +# [2] https://crates.io/crates/supports-hyperlinks +# +# Copyright (c) 2021 Kat Marchán +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#     http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +supports_hyperlinks() { +  # $FORCE_HYPERLINK must be set and be non-zero (this acts as a logic bypass) +  if [ -n "$FORCE_HYPERLINK" ]; then +    [ "$FORCE_HYPERLINK" != 0 ] +    return $? +  fi + +  # If stdout is not a tty, it doesn't support hyperlinks +  is_tty || return 1 + +  # DomTerm terminal emulator (domterm.org) +  if [ -n "$DOMTERM" ]; then +    return 0 +  fi + +  # VTE-based terminals above v0.50 (Gnome Terminal, Guake, ROXTerm, etc) +  if [ -n "$VTE_VERSION" ]; then +    [ $VTE_VERSION -ge 5000 ] +    return $? +  fi + +  # If $TERM_PROGRAM is set, these terminals support hyperlinks +  case "$TERM_PROGRAM" in +  Hyper|iTerm.app|terminology|WezTerm) return 0 ;; +  esac + +  # kitty supports hyperlinks +  if [ "$TERM" = xterm-kitty ]; then +    return 0 +  fi + +  # Windows Terminal or Konsole also support hyperlinks +  if [ -n "$WT_SESSION" ] || [ -n "$KONSOLE_VERSION" ]; then +    return 0 +  fi + +  return 1 +} + +fmt_link() { +  # $1: text, $2: url, $3: fallback mode +  if supports_hyperlinks; then +    printf '\033]8;;%s\a%s\033]8;;\a\n' "$2" "$1" +    return +  fi + +  case "$3" in +  --text) printf '%s\n' "$1" ;; +  --url|*) fmt_underline "$2" ;; +  esac +} + +fmt_underline() { +  is_tty && printf '\033[4m%s\033[24m\n' "$*" || printf '%s\n' "$*" +} +  setopt typeset_silent  typeset -a RAINBOW -typeset RED GREEN YELLOW BLUE BOLD DIM UNDER RESET -if [ -t 1 ]; then +if is_tty; then    RAINBOW=(      "$(printf '\033[38;5;196m')"      "$(printf '\033[38;5;202m')" @@ -35,8 +122,6 @@ if [ -t 1 ]; then    YELLOW=$(printf '\033[33m')    BLUE=$(printf '\033[34m')    BOLD=$(printf '\033[1m') -  DIM=$(printf '\033[2m') -  UNDER=$(printf '\033[4m')    RESET=$(printf '\033[0m')  fi @@ -104,10 +189,10 @@ if git pull --rebase --stat $remote $branch; then    printf '%s\____/%s_/ /_/ %s /_/ /_/ /_/%s\__, / %s   /___/%s____/%s_/ /_/  %s\n' $RAINBOW $RESET    printf '%s    %s        %s           %s /____/ %s       %s     %s          %s\n' $RAINBOW $RESET    printf '\n' -  printf "${BLUE}%s${RESET}\n" "$message" -  printf "${BLUE}${BOLD}%s ${UNDER}%s${RESET}\n" "To keep up with the latest news and updates, follow us on Twitter:" "https://twitter.com/ohmyzsh" -  printf "${BLUE}${BOLD}%s ${UNDER}%s${RESET}\n" "Want to get involved in the community? Join our Discord:" "https://discord.gg/ohmyzsh" -  printf "${BLUE}${BOLD}%s ${UNDER}%s${RESET}\n" "Get your Oh My Zsh swag at:" "https://shop.planetargon.com/collections/oh-my-zsh" +  printf "${BLUE}%s${RESET}\n\n" "$message" +  printf "${BLUE}${BOLD}%s %s${RESET}\n" "To keep up with the latest news and updates, follow us on Twitter:" "$(fmt_link @ohmyzsh https://twitter.com/ohmyzsh)" +  printf "${BLUE}${BOLD}%s %s${RESET}\n" "Want to get involved in the community? Join our Discord:" "$(fmt_link "Discord server" https://discord.gg/ohmyzsh)" +  printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)"  else    ret=$?    printf "${RED}%s${RESET}\n" 'There was an error updating. Try again later?'  | 
