summary refs log tree commit diff
path: root/Test/D01prompt.ztst
blob: 84f9c7cbefbd92a542767152dd203a0dadf49f53 (plain) (blame)
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
%prep

  mkdir prompt.tmp
  cd prompt.tmp
  mydir=$PWD
  SHLVL=2
  setopt extendedglob

%test

  hash -d mydir=$mydir
  print -P '  %%%):  %)
  %%~:  %~
  %%d:  %d
  %%1/: %1/
  %%h:  %h
  %%L:  %L
  %%M:  %M
  %%m:  %m
  %%n:  %n
  %%N:  %N
  %%i:  %i
  a%%{...%%}b:  a%{%}b
  '
0q:Basic prompt escapes as shown.
>  %):  )
>  %~:  ~mydir
>  %d:  $mydir
>  %1/: ${mydir:t}
>  %h:  0
>  %L:  2
>  %M:  $HOST
>  %m:  ${HOST%%.*}
>  %n:  $USERNAME
>  %N:  (eval)
>  %i:  2
>  a%{...%}b:  ab
>  

  true
  print -P '%?'
  false
  print -P '%?'
0:`%?' prompt escape
>0
>1

  PS4="%_> "
  setopt xtrace
  if true; then true; else false; fi
  unsetopt xtrace
0:`%_' prompt escape
?if> true
?then> true
?> unsetopt xtrace

  diff =(print -P '%#') =(print -P '%(!.#.%%)')
0:`%#' prompt escape and its equivalent

  psvar=(caesar adsum jam forte)
  print -P '%v' '%4v'
0:`%v' prompt escape
>caesar forte

  true
  print -P '%(?.true.false)'
  false
  print -P '%(?.true.false)'
0:ternary prompt escapes
>true
>false

  print -P 'start %10<...<truncated at 10%<< Not truncated%3< ...<Not shown'
  print -P 'start %10>...>truncated at 10%>> Not truncated%3> ...>Not shown'
0:prompt truncation
>start ...d at 10 Not truncated ...
>start truncat... Not truncated ...

# It's hard to check the time and date as they are moving targets.
# We therefore just check that various forms of the date are consistent.
# In fact, if you perform this at midnight it can still fail.
# We could test for that, but we can't be bothered.
# I hope LC_ALL is enough to make the format what's expected.

  LC_ALL=C
  date1=$(print -P %w)
  date2=$(print -P %W)
  date3=$(print -P %D)
  if [[ $date1 != [A-Z][a-z][a-z][[:blank:]]##[0-9]## ]]; then
    print "Date \`$date1' is not in the form \`Day DD' (e.g. \`Mon 1'"
  fi
  if [[ $date2 != [0-9][0-9]/[0-9][0-9]/[0-9][0-9] ]]; then
    print "Date \`$date2' is not in the form \`DD/MM/YYYY'"
  fi
  if [[ $date3 != [0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then
    print "Date \`$date3' is not in the form \`YY-MM-DD'"
  fi
  if (( $date1[5,-1] != $date2[4,5] )) || (( $date2[4,5] != $date3[7,8] ))
  then
    print "Days of month do not agree in $date1, $date2, $date3"
  fi
  if (( $date2[1,2] != $date3[4,5] )); then
    print "Months do not agree in $date2, $date3"
  fi
  if (( $date2[7,8] != $date3[1,2] )); then
    print "Years do not agree in $date2, $date3"
  fi
0:Dates produced by prompt escapes

  mkdir foo
  mkdir foo/bar
  mkdir foo/bar/rod
  (zsh_directory_name() {
    emulate -L zsh
    setopt extendedglob
    local -a match mbegin mend
    if [[ $1 = d ]]; then
      if [[ $2 = (#b)(*bar)/rod ]]; then
        reply=(barmy ${#match[1]})
      else
        return 1
      fi
    else
      if [[ $2 = barmy ]]; then
        reply=($mydir/foo/bar)
      else
        return 1
      fi
    fi
  }
  # success
  print ~[barmy]/anything
  cd foo/bar/rod
  print -P %~
  # failure
  setopt nonomatch
  print ~[scuzzy]/rubbish
  cd ../..
  print -P %~
  # catastrophic failure
  unsetopt nonomatch
  print ~[scuzzy]/rubbish
  )
1q:Dynamic named directories
>$mydir/foo/bar/anything
>~[barmy]/rod
>~[scuzzy]/rubbish
>~mydir/foo
?(eval):33: no directory expansion: ~[scuzzy]