|
Chapter 42 Problems with Terminals
|
|
I just made a change to my
.exrc
file (4.9
)
.
Then I started vi
and noticed a message in reverse video before the
screen cleared and my file was displayed.
It was probably an error message.
But vi
, like some other programs, shows errors and then
clears (erases) the screen before you can read them.
Great design, eh?
Here are some workarounds:
When my terminal used to run at a slow data rate (1200 baud or less),
I could usually read an error message before the screen cleared.
In these days of 28,800 bps and above, you can still fake that.
Log out.
Then set your terminal or communications
package to a slow data rate and log in again.
Now look fast.
Way back, when
ttys were real teletypes (41.2
)
,
finding errors was easy: there was no screen to clear; the error was
right there on the paper.
So, if your terminal has a printer, turn it on.
(On DOS, try doing [CTRL]
+[PrtSC]
.)
Re-run your program and read the error on the paper.
If your window or communications program has a "capture to file" function,
turn it on.
Make the error happen.
Turn off the capture function (important!).
Then read the file - you'll probably need to use a program like
cat -v
(25.7
)
or
vmore
(25.5
)
to keep the screen-clearing characters stored in the file from erasing
your screen as you read the file!
If you don't have a screen-capture function, but you do have the
script
(51.5
)
program,
use it with the technique in the step above.
If your window has a scroll bar or a "page up" command, try it.
Some screen-clear commands won't clear the scrolling memory.
Use
tee
(13.9
)
to grab the standard output and standard error to a file
while you're viewing:
|&
2>&1
|
% vi foo |& tee saved_stuff
...csh
$ vi foo 2>&1 | tee saved_stuff
...sh
|
Then look at the saved file with a pager program, possibly filtering
it through cat -v
(25.7
)
and/or fold
(43.8
)
first. (The vmore
script (25.5
)
was made for just this kind of job.)
Restart the program and get to the point just before the error will happen.
Try to hit
CTRL-s or
HOLD SCREEN
between the time the error is output and the screen clears.
That can be tough to do
over a network
or on a high-speed connection, though, because of the delay between the
time you press the key and the time when all the output finally stops
coming.
Temporarily switch (6.10
)
to a termcap/terminfo
definition that doesn't
have a clear-screen capability.
Two good settings for TERM are dumb
and unknown
.
That previous trick will leave your program almost useless, if it runs at all.
If you do a lot of troubleshooting of full-screen programs like vi
or writing startup files such as .exrc
,
it's worth your time to find a termcap
or terminfo
definition
that has all the capabilities of the usual definition - except that it
won't clear the screen.
(You'll probably want to check the termcap capabilities cl=
,
is=
, if=
, rs=
, rf=
, r2=
, and maybe ti=
.
Or, for terminfo
, look at clear=
, iprog=
, is2=
,
if=
, rs2=
, rf=
, and maybe smcup=
.)
If you don't know how, read O'Reilly & Associates' termcap & terminfo
-or
lure a UNIX guru from down the hall somewhere.
[1]
|
|