Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

reverse-video prompts in xterm on SunOS

Posted on 1997-06-13
6
849 Views
Last Modified: 2013-12-27
How does one get a reverse-video prompt in [t]csh on an xterm on a SunOS 4.1.4 system?  The code I have that works on most other system fails here.  Instead of getting reverse video, I get the ^[[7m style interpretation, which isn't pretty.  Something on the Sun is intercepting the ESC characters and replacing them with ^[ so the xterm doesn't see the escape sequence.

Does someone have a .cshrc code fragment that successfully produces a reverse-video prompt on a SunOS xterm?

Here are the definitions that work elsewhere but not here:

#   setprompt   'set prompt="^[[7m$USER@$HOSTNAME":"$wd3":"^[[m "'
#   setprompt   'set prompt="`tput smso`$USER@$HOSTNAME":"$wd3":"`tput rmso` "'


You should replace the ^[ pairs with an ESC char, of course.
0
Comment
Question by:JohnChambers
6 Comments
 
LVL 2

Expert Comment

by:mlev
ID: 2006413
I have one that works on SunOS 5.5, but it's only for tcsh.
set prompt="%S%n@%m:%~%s%#"
0
 
LVL 1

Expert Comment

by:henrys
ID: 2006414
This works for me (SunOS 4.1.3):
pau# echo $shell
/bin/csh
pau# echo $TERM
xterm
pau# alias setprompt
set prompt="^[[7m$USER@$HOSTNAME":"$wd3":"^[[m "
pau# setprompt
root@pau:/:  <-- this comes out in reverse video

The "Enable Reverse Video" item under the "VT Options" menu is _NOT_ checked.

Try seeing what the shell thinks your $TERM is

0
 

Author Comment

by:JohnChambers
ID: 2006415
Didn't work at all for me.  Here's the result of one of several
tests:

honk-jmc-3% set prompt="^[[7m$USER@$HOSTNAME"^[[m"
Unmatched ".
honk-jmc-4% set prompt="^[[7m$USER@$HOSTNAME":"^[[m"
^[[7mjmc@honk:^[[m

The prompt came out with the "^[[7m" string; this should have been interpreted as "switch to reverse video" but it wasn't.

Part of the evidence of what may be wrong is that when I type
a command, and include an ESC char, the screen flashes.  This
presumably means that some routine (maybe in the device driver,
maybe in the shell) is noticing the ESC and acting on it rather
than passing it in as a data char.  Thus, when I include an
escape sequence in the prompt string, the ESC doesn't make it
into the string, or maybe is there but in garbled "^[" form.
0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:JohnChambers
ID: 2006416
The %S...%s worked.  And, after I knew what it was, I even found
it in the tcsh man page.  Of course, they called it by a name
that I'd never heard before ("standout mode"), so even if I'd
thought to grep through `man tcsh`, I still probably wouldn't
have ever found it.  Anyway, I now have yet another strange way
to do this useful thing.  Thanks.
0
 
LVL 3

Accepted Solution

by:
braveheart earned 50 total points
ID: 2006417
Both examples worked fine for me and I am using an xterm on Solaris right now so it is probably something wrong in your terminal setup.

Although your prompt setup should normally be established in the
.cshrc (so that you can look to see if it is set to distinguish between terminal sessions and script driven shells) it is more usual for the terminal setup to be in the .login file (so you only perform it once and not for every shell). However, don't forget that in your login shell, .cshrc is sourced before .login. This means that if you are using the tput method then it may not know what terminal type you are using until after you have set the prompt.

In .login add the following lines:

set noglob
eval `tset -s xterm`
unset noglob

Check that TERM is set to xterm when you have logged in.

For more info, check the man pages on tset and stty.


0
 
LVL 3

Expert Comment

by:braveheart
ID: 2006418
For a terminal independent way of inserting control sequences
into prompts, etc., use the tput command. So to switch to reverse
video execute "tput smso" or "tput rev" and to switch back use
"tput rmso" or "tput sgr0".

tput can also be used for ringing the bell, moving the cursor
and so on, all in a reasonably portable manner.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
AIX Server 10 87
Invalid password trying to cannect to Unix server 2 85
Unix/bash: scripted arithmetic 13 101
UNIX Script. Send email if failure 8 30
A metadevice consists of one or more devices (slices). It can be expanded by adding slices. Then, it can be grown to fill a larger space while the file system is in use. However, not all UNIX file systems (UFS) can be expanded this way. The conca…
Introduction Regular patching is part of a system administrator's tasks. However, many patches require that the system be in single-user mode before they can be installed. A cluster patch in particular can take quite a while to apply if the machine…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question