Merge remote-tracking branch 'origin/github/pr/104'
authorMichael Prokop <mika@grml.org>
Fri, 22 Jan 2021 11:42:23 +0000 (12:42 +0100)
committerMichael Prokop <mika@grml.org>
Fri, 22 Jan 2021 11:42:23 +0000 (12:42 +0100)
1  2 
etc/zsh/zshrc

diff --combined etc/zsh/zshrc
@@@ -108,70 -108,16 +108,75 @@@ if [[ $ZSH_PROFILE_RC -gt 0 ]] ; the
      zmodload zsh/zprof
  fi
  
 +typeset -A GRML_STATUS_FEATURES
 +
 +function grml_status_feature () {
 +    emulate -L zsh
 +    local f=$1
 +    local -i success=$2
 +    if (( success == 0 )); then
 +        GRML_STATUS_FEATURES[$f]=success
 +    else
 +        GRML_STATUS_FEATURES[$f]=failure
 +    fi
 +    return 0
 +}
 +
 +function grml_status_features () {
 +    emulate -L zsh
 +    local mode=${1:-+-}
 +    local this
 +    if [[ $mode == -h ]] || [[ $mode == --help ]]; then
 +        cat <<EOF
 +grml_status_features [-h|--help|-|+|+-|FEATURE]
 +
 +Prints a summary of features the grml setup is trying to load. The
 +result of loading a feature is recorded. This function lets you query
 +the result.
 +
 +The function takes one argument: "-h" or "--help" to display this help
 +text, "+" to display a list of all successfully loaded features, "-" for
 +a list of all features that failed to load. "+-" to show a list of all
 +features with their statuses.
 +
 +Any other word is considered to by a feature and prints its status.
 +
 +The default mode is "+-".
 +EOF
 +        return 0
 +    fi
 +    if [[ $mode != - ]] && [[ $mode != + ]] && [[ $mode != +- ]]; then
 +        this="${GRML_STATUS_FEATURES[$mode]}"
 +        if [[ -z $this ]]; then
 +            printf 'unknown\n'
 +            return 1
 +        else
 +            printf '%s\n' $this
 +        fi
 +        return 0
 +    fi
 +    for key in ${(ok)GRML_STATUS_FEATURES}; do
 +        this="${GRML_STATUS_FEATURES[$key]}"
 +        if [[ $this == success ]] && [[ $mode == *+* ]]; then
 +            printf '%-16s %s\n' $key $this
 +        fi
 +        if [[ $this == failure ]] && [[ $mode == *-* ]]; then
 +            printf '%-16s %s\n' $key $this
 +        fi
 +    done
 +    return 0
 +}
 +
  # load .zshrc.pre to give the user the chance to overwrite the defaults
  [[ -r ${ZDOTDIR:-${HOME}}/.zshrc.pre ]] && source ${ZDOTDIR:-${HOME}}/.zshrc.pre
  
  # check for version/system
  # check for versions (compatibility reasons)
+ function is51 () {
+     [[ $ZSH_VERSION == 5.<1->* ]] && return 0
+     return 1
+ }
  function is4 () {
      [[ $ZSH_VERSION == <4->* ]] && return 0
      return 1
@@@ -716,8 -662,7 +721,8 @@@ typeset -U path PATH cdpath CDPATH fpat
  # Load a few modules
  is4 && \
  for mod in parameter complist deltochar mathfunc ; do
 -    zmodload -i zsh/${mod} 2>/dev/null || print "Notice: no ${mod} available :("
 +    zmodload -i zsh/${mod} 2>/dev/null
 +    grml_status_feature mod:$mod $?
  done && builtin unset -v mod
  
  # autoload zsh modules when they are referenced
@@@ -732,11 -677,10 +737,11 @@@ COMPDUMPFILE=${COMPDUMPFILE:-${ZDOTDIR:
  if zrcautoload compinit ; then
      typeset -a tmp
      zstyle -a ':grml:completion:compinit' arguments tmp
 -    compinit -d ${COMPDUMPFILE} "${tmp[@]}" || print 'Notice: no compinit available :('
 +    compinit -d ${COMPDUMPFILE} "${tmp[@]}"
 +    grml_status_feature compinit $?
      unset tmp
  else
 -    print 'Notice: no compinit available :('
 +    grml_status_feature compinit 1
      function compdef { }
  fi
  
@@@ -1645,7 -1589,13 +1650,13 @@@ zrcautoload ze
  # else
  #    print 'Notice: no url-quote-magic available :('
  # fi
- alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
+ if is51 ; then
+   # url-quote doesn't work without bracketed-paste-magic since Zsh 5.1
+   alias url-quote='autoload -U bracketed-paste-magic url-quote-magic;
+                    zle -N bracketed-paste bracketed-paste-magic; zle -N self-insert url-quote-magic'
+ else
+   alias url-quote='autoload -U url-quote-magic ; zle -N self-insert url-quote-magic'
+ fi
  
  #m# k ESC-h Call \kbd{run-help} for the 1st word on the command line
  alias run-help >&/dev/null && unalias run-help
@@@ -2494,7 -2444,6 +2505,7 @@@ function grml_prompt_fallback () 
  }
  
  if zrcautoload promptinit && promptinit 2>/dev/null ; then
 +    grml_status_feature promptinit 0
      # Since we define the required functions in here and not in files in
      # $fpath, we need to stick the theme's name into `$prompt_themes'
      # ourselves, since promptinit does not pick them up otherwise.
      # Also, keep the array sorted...
      prompt_themes=( "${(@on)prompt_themes}" )
  else
 -    print 'Notice: no promptinit available :('
 +    grml_status_feature promptinit 1
      grml_prompt_fallback
      function precmd () { (( ${+functions[vcs_info]} )) && vcs_info; }
  fi
@@@ -2540,9 -2489,6 +2551,9 @@@ els
      function precmd () { (( ${+functions[vcs_info]} )) && vcs_info; }
  fi
  
 +# make sure to use right prompt only when not running a command
 +is41 && setopt transient_rprompt
 +
  # Terminal-title wizardry
  
  function ESC_print () {
@@@ -2567,7 -2513,7 +2578,7 @@@ function grml_reset_screen_title () 
      # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
      [[ ${NOTITLE:-} -gt 0 ]] && return 0
      case $TERM in
 -        (xterm*|rxvt*)
 +        (xterm*|rxvt*|alacritty)
              set_title ${(%):-"%n@%m: %~"}
              ;;
      esac
@@@ -2585,7 -2531,13 +2596,7 @@@ function grml_vcs_to_screen_title () 
  
  function grml_maintain_name () {
      local localname
 -    if check_com hostname ; then
 -      localname=$(hostname)
 -    elif check_com hostnamectl ; then
 -      localname=$(hostnamectl --static)
 -    else
 -      localname="$(uname -n)"
 -    fi
 +    localname="$(uname -n)"
  
      # set hostname if not running on local machine
      if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != "${localname}" ]] ; then
@@@ -2604,7 -2556,7 +2615,7 @@@ function grml_cmd_to_screen_title () 
  
  function grml_control_xterm_title () {
      case $TERM in
 -        (xterm*|rxvt*)
 +        (xterm*|rxvt*|alacritty)
              set_title "${(%):-"%n@%m:"}" "$2"
              ;;
      esac
@@@ -2882,17 -2834,6 +2893,17 @@@ graphic chipset.
              return 1
          }
      fi
 +
 +    if check_com -c tmate && check_com -c qrencode ; then
 +        function grml-remote-support() {
 +            tmate -L grml-remote-support new -s grml-remote-support -d
 +            tmate -L grml-remote-support wait tmate-ready
 +            tmate -L grml-remote-support display -p '#{tmate_ssh}' | qrencode -t ANSI
 +            echo "tmate session: $(tmate -L grml-remote-support display -p '#{tmate_ssh}')"
 +            echo
 +            echo "Scan this QR code and send it to your support team."
 +        }
 +    fi
  }
  
  # now run the functions
@@@ -3569,11 -3510,6 +3580,11 @@@ function simple-extract () 
                  USES_STDIN=true
                  USES_STDOUT=false
                  ;;
 +            *tar.lrz)
 +                DECOMP_CMD="lrzuntar"
 +                USES_STDIN=false
 +                USES_STDOUT=false
 +                ;;
              *tar)
                  DECOMP_CMD="tar -xvf -"
                  USES_STDIN=true
                  USES_STDIN=true
                  USES_STDOUT=true
                  ;;
 +            *lrz)
 +                DECOMP_CMD="lrunzip -"
 +                USES_STDIN=true
 +                USES_STDOUT=true
 +                ;;
              *)
                  print "ERROR: '$ARCHIVE' has unrecognized archive type." >&2
                  RC=$((RC+1))
  
  zrclocal
  
 +unfunction grml_status_feature
 +
  ## genrefcard.pl settings
  
  ### doc strings for external functions from files