1*b30d1939SAndy Fiddaman########################################################################
2*b30d1939SAndy Fiddaman#                                                                      #
3*b30d1939SAndy Fiddaman#               This software is part of the ast package               #
4*b30d1939SAndy Fiddaman#          Copyright (c) 1982-2012 AT&T Intellectual Property          #
5*b30d1939SAndy Fiddaman#                      and is licensed under the                       #
6*b30d1939SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
7*b30d1939SAndy Fiddaman#                    by AT&T Intellectual Property                     #
8*b30d1939SAndy Fiddaman#                                                                      #
9*b30d1939SAndy Fiddaman#                A copy of the License is available at                 #
10*b30d1939SAndy Fiddaman#          http://www.eclipse.org/org/documents/epl-v10.html           #
11*b30d1939SAndy Fiddaman#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
12*b30d1939SAndy Fiddaman#                                                                      #
13*b30d1939SAndy Fiddaman#              Information and Software Systems Research               #
14*b30d1939SAndy Fiddaman#                            AT&T Research                             #
15*b30d1939SAndy Fiddaman#                           Florham Park NJ                            #
16*b30d1939SAndy Fiddaman#                                                                      #
17*b30d1939SAndy Fiddaman#                  David Korn <dgk@research.att.com>                   #
18*b30d1939SAndy Fiddaman#                                                                      #
19*b30d1939SAndy Fiddaman########################################################################
20*b30d1939SAndy Fiddaman: : generated by mkptytests from "posix-sh-*-c.pty" : :
21*b30d1939SAndy Fiddaman
22*b30d1939SAndy Fiddaman# the trickiest part of the tests is avoiding typeahead
23*b30d1939SAndy Fiddaman# in the pty dialogue
24*b30d1939SAndy Fiddaman
25*b30d1939SAndy Fiddamanfunction err_exit
26*b30d1939SAndy Fiddaman{
27*b30d1939SAndy Fiddaman	print -u2 -n "\t"
28*b30d1939SAndy Fiddaman	print -u2 -r ${Command}[$1]: "${@:2}"
29*b30d1939SAndy Fiddaman	(( Errors++ ))
30*b30d1939SAndy Fiddaman}
31*b30d1939SAndy Fiddaman
32*b30d1939SAndy Fiddamanalias err_exit='err_exit $lineno'
33*b30d1939SAndy Fiddaman
34*b30d1939SAndy FiddamanCommand=${0##*/}
35*b30d1939SAndy Fiddamaninteger Errors=0 lineno=1
36*b30d1939SAndy Fiddaman
37*b30d1939SAndy Fiddamanwhence -q pty || { lineno=$LINENO; err_exit "pty command not found -- tests skipped"; exit 0; }
38*b30d1939SAndy Fiddaman
39*b30d1939SAndy Fiddamanbintrue=$(whence -p true)
40*b30d1939SAndy Fiddaman
41*b30d1939SAndy Fiddamanx=$( $SHELL <<- \EOF
42*b30d1939SAndy Fiddaman		trap 'exit 0' EXIT
43*b30d1939SAndy Fiddaman		bintrue=$(whence -p true)
44*b30d1939SAndy Fiddaman		set -o monitor
45*b30d1939SAndy Fiddaman		{
46*b30d1939SAndy Fiddaman			eval $'set -o vi\npty $bintrue'
47*b30d1939SAndy Fiddaman		} < /dev/null & pid=$!
48*b30d1939SAndy Fiddaman		#sleep 1
49*b30d1939SAndy Fiddaman		jobs
50*b30d1939SAndy Fiddaman		kill $$
51*b30d1939SAndy Fiddaman	EOF
52*b30d1939SAndy Fiddaman)
53*b30d1939SAndy Fiddaman[[ $x == *Stop* ]] && err_exit 'monitor mode enabled incorrectly causes job to stop'
54*b30d1939SAndy Fiddaman
55*b30d1939SAndy Fiddamanif	[[ -o xtrace ]]
56*b30d1939SAndy Fiddamanthen	debug=--debug=1
57*b30d1939SAndy Fiddamanelse	debug=
58*b30d1939SAndy Fiddamanfi
59*b30d1939SAndy Fiddaman
60*b30d1939SAndy Fiddamanfunction tst
61*b30d1939SAndy Fiddaman{
62*b30d1939SAndy Fiddaman	integer lineno=$1 offset
63*b30d1939SAndy Fiddaman	typeset text
64*b30d1939SAndy Fiddaman
65*b30d1939SAndy Fiddaman	pty $debug --dialogue --messages='/dev/fd/1' $SHELL |
66*b30d1939SAndy Fiddaman	while	read -r text
67*b30d1939SAndy Fiddaman	do	if	[[ $text == *debug* ]]
68*b30d1939SAndy Fiddaman		then	print -u2 -r -- "$text"
69*b30d1939SAndy Fiddaman		else	offset=${text/*: line +([[:digit:]]):*/\1}
70*b30d1939SAndy Fiddaman			err_exit "${text/: line $offset:/: line $(( lineno + offset)):}"
71*b30d1939SAndy Fiddaman		fi
72*b30d1939SAndy Fiddaman	done
73*b30d1939SAndy Fiddaman}
74*b30d1939SAndy Fiddaman
75*b30d1939SAndy Fiddamanexport PS1=':test-!: ' PS2='> ' PS4=': ' ENV= EXINIT= HISTFILE= TERM=dumb VISUAL=vi LC_ALL=C
76*b30d1939SAndy Fiddaman
77*b30d1939SAndy Fiddamanif	! pty $bintrue < /dev/null
78*b30d1939SAndy Fiddamanthen	err_exit pty command hangs on $bintrue -- tests skipped
79*b30d1939SAndy Fiddaman	exit 0
80*b30d1939SAndy Fiddamanfi
81*b30d1939SAndy Fiddaman
82*b30d1939SAndy Fiddaman# err_exit #
83*b30d1939SAndy Fiddamantst $LINENO <<"!"
84*b30d1939SAndy FiddamanL POSIX sh 026(C)
85*b30d1939SAndy Fiddaman
86*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported:  When the
87*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a
88*b30d1939SAndy Fiddaman# SIGTSTP signal then the <state> field in the output message is set to
89*b30d1939SAndy Fiddaman# Stopped, Suspended, Stopped(SIGTSTP) or Suspended(SIGTSTP).
90*b30d1939SAndy Fiddaman
91*b30d1939SAndy FiddamanI ^\r?\n$
92*b30d1939SAndy Fiddamanp :test-1:
93*b30d1939SAndy Fiddamanw sleep 60 &
94*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$
95*b30d1939SAndy Fiddamans 100
96*b30d1939SAndy Fiddamanp :test-2:
97*b30d1939SAndy Fiddamanw kill -TSTP $!
98*b30d1939SAndy Fiddamanu (Stopped|Suspended)
99*b30d1939SAndy Fiddamanp :test-3:
100*b30d1939SAndy Fiddamanw kill -KILL $!
101*b30d1939SAndy Fiddamanw wait
102*b30d1939SAndy Fiddamanu (Killed|Done)
103*b30d1939SAndy Fiddaman!
104*b30d1939SAndy Fiddaman
105*b30d1939SAndy Fiddaman# err_exit #
106*b30d1939SAndy Fiddamantst $LINENO <<"!"
107*b30d1939SAndy FiddamanL POSIX sh 028(C)
108*b30d1939SAndy Fiddaman
109*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported:  When the
110*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a
111*b30d1939SAndy Fiddaman# SIGTTIN signal then the <state> field in the output message is set to
112*b30d1939SAndy Fiddaman# Stopped(SIGTTIN) or Suspended(SIGTTIN).
113*b30d1939SAndy Fiddaman
114*b30d1939SAndy FiddamanI ^\r?\n$
115*b30d1939SAndy Fiddamanp :test-1:
116*b30d1939SAndy Fiddamanw sleep 60 &
117*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$
118*b30d1939SAndy Fiddamans 100
119*b30d1939SAndy Fiddamanp :test-2:
120*b30d1939SAndy Fiddamanw kill -TTIN $!
121*b30d1939SAndy Fiddamanu (Stopped|Suspended) \(SIGTTIN\)
122*b30d1939SAndy Fiddamanp :test-3:
123*b30d1939SAndy Fiddamanw kill -KILL $!
124*b30d1939SAndy Fiddamanw wait
125*b30d1939SAndy Fiddamanu (Killed|Done)
126*b30d1939SAndy Fiddaman!
127*b30d1939SAndy Fiddaman
128*b30d1939SAndy Fiddaman# err_exit #
129*b30d1939SAndy Fiddamantst $LINENO <<"!"
130*b30d1939SAndy FiddamanL POSIX sh 029(C)
131*b30d1939SAndy Fiddaman
132*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported:  When the
133*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a
134*b30d1939SAndy Fiddaman# SIGTTOU signal then the <state> field in the output message is set to
135*b30d1939SAndy Fiddaman# Stopped(SIGTTOU) or Suspended(SIGTTOU).
136*b30d1939SAndy Fiddaman
137*b30d1939SAndy FiddamanI ^\r?\n$
138*b30d1939SAndy Fiddamanp :test-1:
139*b30d1939SAndy Fiddamanw sleep 60 &
140*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$
141*b30d1939SAndy Fiddamans 100
142*b30d1939SAndy Fiddamanp :test-2:
143*b30d1939SAndy Fiddamanw kill -TTOU $!
144*b30d1939SAndy Fiddamanu (Stopped|Suspended) \(SIGTTOU\)
145*b30d1939SAndy Fiddamanp :test-3:
146*b30d1939SAndy Fiddamanw kill -KILL $!
147*b30d1939SAndy Fiddamanw wait
148*b30d1939SAndy Fiddamanu (Killed|Done)
149*b30d1939SAndy Fiddaman!
150*b30d1939SAndy Fiddaman
151*b30d1939SAndy Fiddaman# err_exit #
152*b30d1939SAndy Fiddamantst $LINENO <<"!"
153*b30d1939SAndy FiddamanL POSIX sh 091(C)
154*b30d1939SAndy Fiddaman
155*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
156*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode an entered
157*b30d1939SAndy Fiddaman# character other than <newline>, erase, interrupt, kill, control-V,
158*b30d1939SAndy Fiddaman# control-W, backslash \ (followed by erase or kill), end-of-file and
159*b30d1939SAndy Fiddaman# <ESC> is inserted in the current command line.
160*b30d1939SAndy Fiddaman
161*b30d1939SAndy Fiddamanc echo h
162*b30d1939SAndy Fiddamanc ell
163*b30d1939SAndy Fiddamanw o
164*b30d1939SAndy Fiddamanu ^hello\r?\n$
165*b30d1939SAndy Fiddaman!
166*b30d1939SAndy Fiddaman
167*b30d1939SAndy Fiddaman# err_exit #
168*b30d1939SAndy Fiddamantst $LINENO <<"!"
169*b30d1939SAndy FiddamanL POSIX sh 093(C)
170*b30d1939SAndy Fiddaman
171*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
172*b30d1939SAndy Fiddaman# command line editing is supported:  After termination of a previous
173*b30d1939SAndy Fiddaman# command, sh is entered in insert mode.
174*b30d1939SAndy Fiddaman
175*b30d1939SAndy Fiddamanw echo hello
176*b30d1939SAndy Fiddamanu ^hello\r?\n$
177*b30d1939SAndy Fiddamanc echo goo
178*b30d1939SAndy Fiddamanc dby
179*b30d1939SAndy Fiddamanw e
180*b30d1939SAndy Fiddamanu ^goodbye\r?\n$
181*b30d1939SAndy Fiddaman!
182*b30d1939SAndy Fiddaman
183*b30d1939SAndy Fiddaman# err_exit #
184*b30d1939SAndy Fiddamantst $LINENO <<"!"
185*b30d1939SAndy FiddamanL POSIX sh 094(C)
186*b30d1939SAndy Fiddaman
187*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
188*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode an <ESC>
189*b30d1939SAndy Fiddaman# switches sh into command mode.
190*b30d1939SAndy Fiddaman
191*b30d1939SAndy Fiddamanc echo he\E
192*b30d1939SAndy Fiddamans 400
193*b30d1939SAndy Fiddamanw allo
194*b30d1939SAndy Fiddamanu ^hello\r?\n$
195*b30d1939SAndy Fiddaman!
196*b30d1939SAndy Fiddaman
197*b30d1939SAndy Fiddaman# err_exit #
198*b30d1939SAndy Fiddamantst $LINENO <<"!"
199*b30d1939SAndy FiddamanL POSIX sh 096(C)
200*b30d1939SAndy Fiddaman
201*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
202*b30d1939SAndy Fiddaman# command line editing is supported:  When in command mode the
203*b30d1939SAndy Fiddaman# interrupt character causes sh to terminate command line editing on
204*b30d1939SAndy Fiddaman# the current command line, re-issue the prompt on the next line of the
205*b30d1939SAndy Fiddaman# terminal and to reset the command history so that the command that
206*b30d1939SAndy Fiddaman# was interrupted is not entered in the history.
207*b30d1939SAndy Fiddaman
208*b30d1939SAndy FiddamanI ^\r?\n$
209*b30d1939SAndy Fiddamanp :test-1:
210*b30d1939SAndy Fiddamanw echo first
211*b30d1939SAndy Fiddamanp :test-2:
212*b30d1939SAndy Fiddamanw stty intr ^C
213*b30d1939SAndy Fiddamanp :test-3:
214*b30d1939SAndy Fiddamanc echo bad\E
215*b30d1939SAndy Fiddamans 400
216*b30d1939SAndy Fiddamanc \cC
217*b30d1939SAndy Fiddamanw echo scrambled
218*b30d1939SAndy Fiddamanp :test-4:
219*b30d1939SAndy Fiddamanw history
220*b30d1939SAndy Fiddamanu echo first
221*b30d1939SAndy Fiddamanr stty intr \^C
222*b30d1939SAndy Fiddamanr echo
223*b30d1939SAndy Fiddamanr history
224*b30d1939SAndy Fiddaman!
225*b30d1939SAndy Fiddaman
226*b30d1939SAndy Fiddaman# err_exit #
227*b30d1939SAndy Fiddamantst $LINENO <<"!"
228*b30d1939SAndy FiddamanL POSIX sh 097(C)
229*b30d1939SAndy Fiddaman
230*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
231*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode a <newline>
232*b30d1939SAndy Fiddaman# causes the current command line to be executed.
233*b30d1939SAndy Fiddaman
234*b30d1939SAndy Fiddamanc echo ok\n
235*b30d1939SAndy Fiddamanu ^ok\r?\n$
236*b30d1939SAndy Fiddaman!
237*b30d1939SAndy Fiddaman
238*b30d1939SAndy Fiddaman# err_exit #
239*b30d1939SAndy Fiddamantst $LINENO <<"!"
240*b30d1939SAndy FiddamanL POSIX sh 099(C)
241*b30d1939SAndy Fiddaman
242*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
243*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode the interrupt
244*b30d1939SAndy Fiddaman# character causes sh to terminate command line editing on the current
245*b30d1939SAndy Fiddaman# command line, re-issue the prompt on the next line of the terminal
246*b30d1939SAndy Fiddaman# and to reset the command history so that the command that was
247*b30d1939SAndy Fiddaman# interrupted is not entered in the history.
248*b30d1939SAndy Fiddaman
249*b30d1939SAndy FiddamanI ^\r?\n$
250*b30d1939SAndy Fiddamanp :test-1:
251*b30d1939SAndy Fiddamanw echo first
252*b30d1939SAndy Fiddamanu ^first
253*b30d1939SAndy Fiddamanp :test-2:
254*b30d1939SAndy Fiddamanw stty intr ^C
255*b30d1939SAndy Fiddamanr
256*b30d1939SAndy Fiddamanp :test-3:
257*b30d1939SAndy Fiddamanc echo bad\cC
258*b30d1939SAndy Fiddamanw echo last
259*b30d1939SAndy Fiddamanp :test-4:
260*b30d1939SAndy Fiddamanw history
261*b30d1939SAndy Fiddamanu echo first
262*b30d1939SAndy Fiddamanr stty intr \^C
263*b30d1939SAndy Fiddamanr echo last
264*b30d1939SAndy Fiddamanr history
265*b30d1939SAndy Fiddaman!
266*b30d1939SAndy Fiddaman
267*b30d1939SAndy Fiddaman# err_exit #
268*b30d1939SAndy Fiddamantst $LINENO <<"!"
269*b30d1939SAndy FiddamanL POSIX sh 100(C)
270*b30d1939SAndy Fiddaman
271*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
272*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode the kill
273*b30d1939SAndy Fiddaman# character clears all the characters from the input line.
274*b30d1939SAndy Fiddaman
275*b30d1939SAndy Fiddamanp :test-1:
276*b30d1939SAndy Fiddamanw stty kill ^X
277*b30d1939SAndy Fiddamanp :test-2:
278*b30d1939SAndy Fiddamanc echo bad\cX
279*b30d1939SAndy Fiddamanw echo ok
280*b30d1939SAndy Fiddamanu ^ok\r?\n$
281*b30d1939SAndy Fiddaman!
282*b30d1939SAndy Fiddaman
283*b30d1939SAndy Fiddaman# err_exit #
284*b30d1939SAndy Fiddamantst $LINENO <<"!"
285*b30d1939SAndy FiddamanL POSIX sh 101(C)
286*b30d1939SAndy Fiddaman
287*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
288*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode a control-V
289*b30d1939SAndy Fiddaman# causes the next character to be inserted even in the case that the
290*b30d1939SAndy Fiddaman# character is a special insert mode character.
291*b30d1939SAndy Fiddaman# Testing Requirements: The assertion must be tested with at least the
292*b30d1939SAndy Fiddaman# following set of characters: <newline>, erase, interrupt, kill,
293*b30d1939SAndy Fiddaman# control-V, control-W, end-of-file, backslash \ (followed by erase or
294*b30d1939SAndy Fiddaman# kill) and <ESC>.
295*b30d1939SAndy Fiddaman
296*b30d1939SAndy Fiddamand 10
297*b30d1939SAndy Fiddamanp :test-1:
298*b30d1939SAndy Fiddamanw stty erase ^H intr ^C kill ^X
299*b30d1939SAndy Fiddamanp :test-2:
300*b30d1939SAndy Fiddamanw echo erase=:\cV\cH:
301*b30d1939SAndy Fiddamanu ^erase=:\r?\n$
302*b30d1939SAndy Fiddamanp :test-3:
303*b30d1939SAndy Fiddamanw echo kill=:\cV\cX:
304*b30d1939SAndy Fiddamanu ^kill=:\cX:\r?\n$
305*b30d1939SAndy Fiddamanp :test-4:
306*b30d1939SAndy Fiddamanw echo control-V=:\cV\cV:
307*b30d1939SAndy Fiddamanu ^control-V=:\cV:\r?\n$
308*b30d1939SAndy Fiddamanp :test-5:
309*b30d1939SAndy Fiddamanw echo control-W:\cV\cW:
310*b30d1939SAndy Fiddamanu ^control-W:\cW:\r?\n$
311*b30d1939SAndy Fiddamanp :test-6:
312*b30d1939SAndy Fiddamanw echo EOF=:\cV\cD:
313*b30d1939SAndy Fiddamanu ^EOF=:\004:\r?\n$
314*b30d1939SAndy Fiddamanp :test-7:
315*b30d1939SAndy Fiddamanw echo backslash-erase=:\\\cH:
316*b30d1939SAndy Fiddamanu ^backslash-erase=:\r?\n$
317*b30d1939SAndy Fiddamanp :test-8:
318*b30d1939SAndy Fiddamanw echo backslash-kill=:\\\cX:
319*b30d1939SAndy Fiddamanu ^backslash-kill=:\cX:\r?\n$
320*b30d1939SAndy Fiddamanp :test-9:
321*b30d1939SAndy Fiddamanw echo ESC=:\cV\E:
322*b30d1939SAndy Fiddamanu ^ESC=:\E:\r?\n$
323*b30d1939SAndy Fiddamanp :test-10:
324*b30d1939SAndy Fiddamanw echo interrupt=:\cV\cC:
325*b30d1939SAndy Fiddamanu ^interrupt=:\cC:\r?\n$
326*b30d1939SAndy Fiddaman!
327*b30d1939SAndy Fiddaman
328*b30d1939SAndy Fiddaman# err_exit #
329*b30d1939SAndy Fiddamantst $LINENO <<"!"
330*b30d1939SAndy FiddamanL POSIX sh 104(C)
331*b30d1939SAndy Fiddaman
332*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
333*b30d1939SAndy Fiddaman# command line editing is supported:  When in insert mode an
334*b30d1939SAndy Fiddaman# end-of-file at the beginning of an input line is interpreted as the
335*b30d1939SAndy Fiddaman# end of input.
336*b30d1939SAndy Fiddaman
337*b30d1939SAndy Fiddamanp :test-1:
338*b30d1939SAndy Fiddamanw trap 'echo done >&2' EXIT
339*b30d1939SAndy Fiddamanp :test-2:
340*b30d1939SAndy Fiddamans 100
341*b30d1939SAndy Fiddamanc \cD
342*b30d1939SAndy Fiddamanu ^done\r?\n$
343*b30d1939SAndy Fiddaman!
344*b30d1939SAndy Fiddaman
345*b30d1939SAndy Fiddaman# err_exit #
346*b30d1939SAndy Fiddamantst $LINENO <<"!"
347*b30d1939SAndy FiddamanL POSIX sh 111(C)
348*b30d1939SAndy Fiddaman
349*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
350*b30d1939SAndy Fiddaman# command line editing is supported:  When in command mode, # inserts
351*b30d1939SAndy Fiddaman# the character # at the beginning of the command line and causes the
352*b30d1939SAndy Fiddaman# line to be treated as a comment and the line is entered in the
353*b30d1939SAndy Fiddaman# command history.
354*b30d1939SAndy Fiddaman
355*b30d1939SAndy Fiddamanp :test-1:
356*b30d1939SAndy Fiddamanc echo save\E
357*b30d1939SAndy Fiddamans 400
358*b30d1939SAndy Fiddamanc #
359*b30d1939SAndy Fiddamanp :test-2:
360*b30d1939SAndy Fiddamanw history
361*b30d1939SAndy Fiddamanu #echo save
362*b30d1939SAndy Fiddamanr history
363*b30d1939SAndy Fiddaman!
364*b30d1939SAndy Fiddaman
365*b30d1939SAndy Fiddaman# err_exit #
366*b30d1939SAndy Fiddamantst $LINENO <<"!"
367*b30d1939SAndy FiddamanL POSIX sh 137(C)
368*b30d1939SAndy Fiddaman
369*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
370*b30d1939SAndy Fiddaman# command line editing is supported: When in command mode, then v
371*b30d1939SAndy Fiddaman# invokes the vi editor to edit the current command line in a temporary
372*b30d1939SAndy Fiddaman# file. When the editor exits, the commands in the temporary file are
373*b30d1939SAndy Fiddaman# executed.
374*b30d1939SAndy Fiddaman
375*b30d1939SAndy Fiddamanp :test-1:
376*b30d1939SAndy Fiddamanc echo hello\E
377*b30d1939SAndy Fiddamans 400
378*b30d1939SAndy Fiddamanc v
379*b30d1939SAndy Fiddamanu /tmp/
380*b30d1939SAndy Fiddamanc A world\E
381*b30d1939SAndy Fiddamans 400
382*b30d1939SAndy Fiddamanw :wq
383*b30d1939SAndy Fiddamanu ^hello world\r?\n$
384*b30d1939SAndy Fiddaman!
385*b30d1939SAndy Fiddaman
386*b30d1939SAndy Fiddaman# err_exit #
387*b30d1939SAndy Fiddamantst $LINENO <<"!"
388*b30d1939SAndy FiddamanL POSIX sh 251(C)
389*b30d1939SAndy Fiddaman
390*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell
391*b30d1939SAndy Fiddaman# command line editing is supported:  When in command mode, then the
392*b30d1939SAndy Fiddaman# command N repeats the most recent / or ? command, reversing the
393*b30d1939SAndy Fiddaman# direction of the search.
394*b30d1939SAndy Fiddaman
395*b30d1939SAndy Fiddamanp :test-1:
396*b30d1939SAndy Fiddamanw echo repeat-1
397*b30d1939SAndy Fiddamanu ^repeat-1\r?\n$
398*b30d1939SAndy Fiddamanp :test-2:
399*b30d1939SAndy Fiddamanw echo repeat-2
400*b30d1939SAndy Fiddamanu ^repeat-2\r?\n$
401*b30d1939SAndy Fiddamanp :test-3:
402*b30d1939SAndy Fiddamans 100
403*b30d1939SAndy Fiddamanc \E
404*b30d1939SAndy Fiddamans 400
405*b30d1939SAndy Fiddamanw /rep
406*b30d1939SAndy Fiddamanu echo repeat-2
407*b30d1939SAndy Fiddamanc n
408*b30d1939SAndy Fiddamanr echo repeat-1
409*b30d1939SAndy Fiddamanc N
410*b30d1939SAndy Fiddamanr echo repeat-2
411*b30d1939SAndy Fiddamanw dd
412*b30d1939SAndy Fiddamanp :test-3:
413*b30d1939SAndy Fiddamanw echo repeat-3
414*b30d1939SAndy Fiddamanu ^repeat-3\r?\n$
415*b30d1939SAndy Fiddamanp :test-4:
416*b30d1939SAndy Fiddamans 100
417*b30d1939SAndy Fiddamanc \E
418*b30d1939SAndy Fiddamans 400
419*b30d1939SAndy Fiddamanw ?rep
420*b30d1939SAndy Fiddamanr echo repeat-2
421*b30d1939SAndy Fiddamanc N
422*b30d1939SAndy Fiddamanr echo repeat-1
423*b30d1939SAndy Fiddamanc n
424*b30d1939SAndy Fiddamanr echo repeat-2
425*b30d1939SAndy Fiddamanc n
426*b30d1939SAndy Fiddamanr echo repeat-3
427*b30d1939SAndy Fiddaman!
428*b30d1939SAndy Fiddaman
429*b30d1939SAndy Fiddaman# err_exit #
430*b30d1939SAndy Fiddamanwhence -q less &&
431*b30d1939SAndy FiddamanTERM=vt100 tst $LINENO <<"!"
432*b30d1939SAndy FiddamanL process/terminal group exercise
433*b30d1939SAndy Fiddaman
434*b30d1939SAndy Fiddamanw m=yes; while true; do echo $m-$m; done | less
435*b30d1939SAndy Fiddamanu :$|:\E|lines
436*b30d1939SAndy Fiddamanc \cZ
437*b30d1939SAndy Fiddamanr Stopped
438*b30d1939SAndy Fiddamanw fg
439*b30d1939SAndy Fiddamanu yes-yes
440*b30d1939SAndy Fiddaman!
441*b30d1939SAndy Fiddaman
442*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125))
443