zsh-workers
 help / color / mirror / code / Atom feed
a4167a8c8d458f6a25fdef5cfc7e5bbc21f7edc0 blob 5321 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
 
autoload -Uz add-zle-hook-widget add-zsh-hook vcs_info
readonly -gHA _prompt_newuser_formats=(
    start:chpwd     $'\n%B%F{blue}%~%b%f/\n'
    start:left      $'%(?,%F{green},%F{red}%v%k\n%B%S)%#%b%f%s '
    start:right     '%B%F{blue}%n%b%f%k@%F{magenta}%m%f'
    start:staged    '%B%F{green}+%b%f'
    start:unstaged  '%B%F{red}*%b%f'
    start:action    '%B%F{red}%a%%b%f'
    start:branch    '%B%F{cyan}%b%%b%f'
    start:repo      '|%B%F{blue}%r%%b%f'
    cont:indent     '  '
    cont:left       ''
    cont:right      '%F{red}%^%f'
)
readonly -ga sysexits=(
    USAGE
    DATAERR
    NOINPUT
    NOUSER
    NOHOST
    UNAVAILABLE
    SOFTWARE
    OSERR
    OSFILE
    CANTCREAT
    IOERR
    TEMPFAIL
    PROTOCOL
    NOPERM
    CONFIG
)

prompt_newuser_help() {
  print -r -- \
"To customize your prompt, copy-paste any of the following to your .zshrc file
and edit it in there:

  # Start prompt:
  zstyle ':prompt:*:start' left     ${(q+)_prompt_newuser_formats[start:left]}
  zstyle ':prompt:*:start' right    ${(q+)_prompt_newuser_formats[start:right]}

  # Prepended to left side of start prompt if we changed dirs:
  zstyle ':prompt:*:start' chpwd    ${(q+)_prompt_newuser_formats[start:chpwd]}

  # Replaces right side of start prompt when in a repo:
  zstyle ':prompt:*:start' unstaged ${(q+)_prompt_newuser_formats[start:unstaged]}
  zstyle ':prompt:*:start' staged   ${(q+)_prompt_newuser_formats[start:staged]}
  zstyle ':prompt:*:start' branch   ${(q+)_prompt_newuser_formats[start:branch]}
  zstyle ':prompt:*:start' action   ${(q+)_prompt_newuser_formats[start:action]}
  zstyle ':prompt:*:start' repo     ${(q+)_prompt_newuser_formats[start:repo]}

  # Continuation prompt:
  zstyle ':prompt:*:cont' left    ${(q+)_prompt_newuser_formats[cont:left]}
  zstyle ':prompt:*:cont' right   ${(q+)_prompt_newuser_formats[cont:right]}

  # Used to indent left side of continuation prompt:
  zstyle ':prompt:*:cont' indent  ${(q+)_prompt_newuser_formats[cont:indent]}

For an explanation of the % codes, see
http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html and the end of
http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#vcs_005finfo-Configuration"
}

prompt_newuser_format() {
  local ctx=$1 arg fmt out
  shift
  for arg; do
    zstyle -s :prompt:newuser:$ctx $arg fmt ||
        fmt="$_prompt_newuser_formats[${ctx}:$arg]"
    out+="$fmt"
  done
  print -r -- "$out"
}

prompt_newuser_chpwd() {
  emulate -L zsh
  unset vcs_info_msg_0_
  PS1="$( prompt_newuser_format start chpwd left )"
}

prompt_newuser_precmd() {
  local exitstatus=$?
  emulate -L zsh

  psvar[1]=
  case $exitstatus in
    <128-> )
      psvar[1]="SIG$signals[exitstatus-127] "
      ;|
    <64-78> )
      psvar[1]="EX_$sysexits[exitstatus-63] "
      ;|
    <1-> )
      psvar[1]+="($exitstatus)"
  esac

  if ! [[ -v vcs_info_msg_0_ ]]; then
    zstyle ':vcs_info:*' check-for-staged-changes yes
    vcs_info
    if [[ -n $vcs_info_msg_0_ ]]; then
      RPS1="$vcs_info_msg_0_"
    else
      RPS1="$( prompt_newuser_format start right )"
    fi
  fi
}

prompt_newuser_line-init() {
  emulate -L zsh

  case $CONTEXT in
    start )
      local -i fd=-1
      exec {fd}< <(
        zstyle ':vcs_info:*' check-for-changes yes
        vcs_info
        print -rNC1 -- "$PWD" "${vcs_info_msg_0_}"
      )
      zle -Fw "$fd" prompt_newuser_async
      ;;
    cont )
      local fmt="$( prompt_newuser_format cont indent )"
      local -a indent=( '%('{1..$(( COLUMNS / ${(m)#fmt} ))}"_,$fmt,)" )
      PS2="${(j::)indent}$( prompt_newuser_format cont left )"
      RPS2="$( prompt_newuser_format cont right )"
      ;;
  esac
}

prompt_newuser_async() {
  emulate -L zsh
  {
    zle -F "$1"

    [[ $2 != (|hup) ]] &&
        return

    () {
      local pwd null
      IFS=$'\0' read -ru "$1" pwd vcs_info_msg_0_ null

      [[ $pwd == $PWD ]]
    } "$@" || return

    if [[ -n $vcs_info_msg_0_ ]]; then
      RPS1="$vcs_info_msg_0_"
    else
      RPS1="$( prompt_newuser_format start right )"
    fi
    zle .reset-prompt

  } always {
    exec {1}<&-
  }
}

prompt_newuser_line-finish() {
  emulate -L zsh
  PS1="$( prompt_newuser_format start left )"
}

prompt_newuser_setup() {
  prompt_opts=( cr percent sp )

  zstyle -e ':vcs_info:*' formats '
    reply=( "%u%c$( prompt_newuser_format start branch repo )" )
  '
  zstyle -e ':vcs_info:*' actionformats '
    reply=( "%u%c$( prompt_newuser_format start action repo )" )
  '
  zstyle -e ':vcs_info:*' stagedstr '
    reply=( "$( prompt_newuser_format start staged )" )
  '
  zstyle -e ':vcs_info:*' unstagedstr '
    reply=( "$( prompt_newuser_format start unstaged )" )
  '
  PS4=$'# ?=%(?,%F{green},%B%F{red}%S)%?%b%f%s e=%e %F{green}%1N%f:%I %(1_,%F{yellow}%K{black}%_%f%k ,)'
  SPROMPT='Correct %B%F{red}%U%R%b%f%u to %B%F{green}%r%b%f? [%Sy%ses|%Sn%so|%Se%sdit|%Sa%sbort] '
  PROMPT_EOL_MARK='%S%F{cyan}%#%s%f'
  zle_highlight=(
      isearch:fg=black,bg=yellow
      special:fg=cyan,bold
      region:bg=blue
      suffix:bg=blue
      paste:none
  )
  zle -N prompt_newuser_async

  add-zsh-hook chpwd  prompt_newuser_chpwd
  add-zsh-hook precmd prompt_newuser_precmd
  add-zle-hook-widget line-init   prompt_newuser_line-init
  add-zle-hook-widget line-finish prompt_newuser_line-finish

  prompt_newuser_chpwd
}

prompt_newuser_setup "$@"
debug log:

solving a4167a8c8 ...
found a4167a8c8 in https://inbox.vuxu.org/zsh-workers/873D08A9-F321-474A-8440-CCE7DCCBA529@gmail.com/ ||
	https://inbox.vuxu.org/zsh-workers/DC506079-16AE-4C67-AB6D-D62BA433F98C@gmail.com/

applying [1/2] https://inbox.vuxu.org/zsh-workers/873D08A9-F321-474A-8440-CCE7DCCBA529@gmail.com/
diff --git a/Functions/Prompts/prompt_newuser_setup b/Functions/Prompts/prompt_newuser_setup
new file mode 100644
index 000000000..a4167a8c8

Checking patch Functions/Prompts/prompt_newuser_setup...
Applied patch Functions/Prompts/prompt_newuser_setup cleanly.

skipping https://inbox.vuxu.org/zsh-workers/DC506079-16AE-4C67-AB6D-D62BA433F98C@gmail.com/ for a4167a8c8
index at:
100644 a4167a8c8d458f6a25fdef5cfc7e5bbc21f7edc0	Functions/Prompts/prompt_newuser_setup

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).