Article 3992 of comp.terminals: Path: cs.utk.edu!gatech!howland.reston.ans.net!vixen.cso.uiuc.edu!uwm.edu!msunews!harbinger.cc.monash.edu.au!bunyip.cc.uq.oz.au!newshost.gu.edu.au!news From: Tony Nugent Newsgroups: comp.terminals Subject: (howto) Set up a custom (colour) vt term Date: 30 Apr 1995 06:35:49 GMT Organization: Griffith University Brisbane Queensland Australia Lines: 371 Message-ID: <3nvb45$2kl@griffin.itc.gu.edu.au> Reply-To: T.Nugent@sct.gu.edu.au NNTP-Posting-Host: kraken.itc.gu.edu.au Summary: How to set up a customised term entry Keywords: vt100 vt102 vt220 ansi colour terminfo termcap term G'day all! Here is something that I wrote a little while ago (with some more recent changes) for someone who asked me how to set up a customised TERMINFO and TERMCAP entry. I've never seen this in any FAQ, and I thought that others might be interested in this too, so I've posted it. It took me *ages* and lots of trial and error to figure out how to do this properly, but the process is actually quite simple once you have the man pages figured out :) I would appreciate any comments, corrections or suggestions to this... I'm posting it here into comp.terminals as a "beta" document as I'm sure that this could be refined some more. ========8<----insert-crowbar-here------------------------------ I presume that you understand the basics of ansi and vt-term escape sequences. I use a customised vt220 term to get colours instead of boring black and white text on my pc screen when I'm logged into my account over a modem. My comms program is emulating vt100/220 with my screen in 50 line mode (49 lines + one for my comms program's status line). The system here with my account is a Sparc running Solaris 2.3, SunOS 5.3 - but this also works under SGI IRIX and SunOS 4.3.1 (remote vt-term login). I use tcsh as my default login shell (I'll eventually try out ksh once I have some time :-) Here is my customised termcap entry, produced by the "infocmp -1" command... ========8<-----------cut-here------------>8==================== # Reconstructed via infocmp from file: /home/tnugent/.terminfo/v/vt220 vt220|vt-220|dec colour vt220, xon, cols#80, lines#49, vt#3, bel=^G, blink=\E[5m$<2>, bold=\E[1m\E[32;44m$<2>, clear=\E[;H\E[2J$<50>, cnorm=\E[?7h\E[0;2;1;36m, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub1=\b, cud1=\n, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu1=\E[A$<2>, cvvis=\E[?7l, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=\t, ind=\n, is2=\E[1;49r\E[49;1H, kbs=\b, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\E[29~, kf1=\EOP, kf10=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=\E(B$<4>, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[7m\E[0;1;36m$<2>, rmul=\E[m\E[0;1;36m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E1;36m\E[?8h, sc=\E7, sgr0=\E[m\E[1;36m$<2>, smkx=\E[?1h\E=, smso=\E[m\E[1;33;44m$<2>, smul=\E[4m\E[1;32m$<2>, ========8<-----------cut-here------------>8==================== For the explaination of what all this means, see "man terminfo"; also try "man termcap", but this man page is often not there. It's set for a default of 49 lines, but if you only use 24 then change it in the entry, but I'll explain how to easily reset it manually with some aliases. Otherwise edit this however you like. You'll recognise all the "ansi" escape sequences up there. Customise the colour ones as desired, but after trial and error I've found these to be quite acceptable. Some of the entries might need some more refining, but this works. Bold, underline, reverse and norm are all in colour. I've thought about adding an entry for italic (sitm and ritm), but I haven't got around to this yet. I've called this "vt220", but it really isn't (although compatable). I've found it better to use a "common" name rather than an unusual one, or else I tend to get "unknown term type, using dumb terminal settings" complaints when I rlogin or telnet into other accounts. vt220 is defined in /etc/termcap here as: de|vt220|DEC VT220 in vt100 emulation mode:\ :tc=vt100: so vt220 actually uses vt100 anyway. They are similar, but vt220 defines more of the F (function) keys. Other differences are trivial (and I haven't noticed many from what I've been able to ascertain from a scattering of "non-authoritative" sources). Create a ~/.terminfo/ directory, and save this terminfo entry in a file called ~/.terminfo/terminfo.src Now change to this directory and append the other terminal entries that you might use onto the end of this file (except for vt220): % echo $term % infocmp >> terminfo.src % infocmp vt100 >> terminfo.src % infocmp xterm >> terminfo.src etc. Check it's general format what you find in /etc/termcap to make sure that it's similar. Now do this (in the ~/.terminfo/ directory): % setenv TERMINFO ~/.terminfo % tic After running tic (it uses the terminfo.src file), you should see a new directory called ~/.terminfo/v/ (and perhaps others) which has the termcap entries compiled from the terminfo.src file. Now, do this: % set term=vt220 You *should* immediately see a change in colour of normally white (or grey) text to a light bright blue (see "norm=" above). If you have tcsh as your shell, then try the prompts below to see some nice bold and reverse colour. Man pages should now also demostrate this too (especially if you have setenv PAGER "less -s -I"). Nice change, eh? :-) Ok, now to make this change permanent... Cut this shell script out, save it in ~/.terminfo/maketc and "chmod +x maketc" to make it executable: ========8<-----------cut-here------------>8==================== #!/bin/sh # # Make a TERMCAP entry # # Use: # maketc [termtype] # # setenv TERMCAP `maketc [termtype]` # # There's probably a better way to do this # infocmp -C $1 | \ sed -e '/^#/d' -e '3,$s/[ ]//g' -e 's/:\\$//' | \ awk '{printf("%s",$0)}' echo "" # NB: that's a Tab and a space in between the []'s! # Is there a way to get sed to strip out newlines? ========8<-----------cut-here------------>8==================== Now try this (using this new term setting): % maketc Ugly, yes? :) Create a ~/.terminfo/TERMCAP.vt220 file by redirecting this output: % maketc vt220 > TERMCAP.vt220 (alternatively, use " setenv TERMCAP `cat ~/.terminfo/maketc` " below instead). Put the following lines in your ~/.login file, or into another file (say, ~/.termrc) and source it from ~/.login... ========8<-----------cut-here------------>8==================== # Please customise this! # if ( ! $?term ) then set term=vt102 setenv TERM vt102 endif # switch($term) # case 'vt220': case 'vt102': stty rows 49 stty columns 80 setenv LINES 49 setenv COLUMNS 80 echo Assuming \($term with $LINES rows\) breaksw case 'vt100': stty rows 24 stty columns 80 setenv LINES 24 setenv COLUMNS 80 breaksw case 'xterm': eval `/usr/openwin/bin/resize` stty rows $LINES stty cols $COLUMNS default: breaksw endsw # # Set colour if on a vt100, vt102 or vt220 # if ( $TERM == vt102 || $TERM == vt100 || $TERM == vt220 ) then setenv TERMINFO ~/.terminfo set term=vt220 setenv TERM vt220 setenv TERMCAP `cat ${TERMINFO}/TERMCAP.vt220` # setenv TERMCAP `~/.terminfo/maketc` endif # # Set variables: NORM BOLD OFFBOLD ULINE OFFULINE REV # setenv NORM `tput cnorm` setenv REV `tput rev` setenv BOLD `tput smso` setenv OFFBOLD `tput smso` setenv ULINE `tput smul` setenv OFFUL `tput rmul` # echo "" echo "${BOLD}TERMINFO is now: $NORM$TERMINFO" echo "${BOLD}TERMCAP is now: $NORM" echo "$TERMCAP" echo "" # echo -n "${ULINE}"\$TERM"$NORM is $BOLD $TERM $NORM and " echo "${ULINE}"\$term"$NORM is $BOLD $term ${NORM}" echo -n "$BOLD $LINES $NORM ${ULINE}rows${NORM} " echo "$BOLD $COLUMNS $NORM ${ULINE}columns${NORM}" echo "" # echo -n "${REV}reverse${NORM} " echo -n "${BOLD}bold${NORM} " echo -n "${ULINE}underline${OFFUL} " echo "$NORM" echo -n "${REV}${BOLD} reverse-bold ${NORM} " echo -n "${REV}${ULINE} reverse-underline ${NORM} " echo -n "${BOLD}${ULINE} bold-underline ${NORM} " echo -n "${REV}${BOLD}${ULINE} reverse-bold-underline ${NORM} " echo "" # echo -n tset: /usr/ucb/tset -I -Q - # ========8<-----------cut-here------------>8==================== It's a bit overdone, but it will show you what's going on. Warnings.... on some unix'es, stty does not have "rows" or "columns" options. And if you ever use those global variables for anything, enclose the variables in quotes like I have above. Next time you log in (with csh or tcsh), ~/.login is sourced (after ~/.cshrc) and you will automatically have this customised colour terminal enabled. To make switching term very easy, I use a few aliases. I have the following in a ~/.alias file that I source from ~/.cshrc... ========8<-----------cut-here------------>8==================== # ~/.alias # sourced from ~/.cshrc #... #... # #-------- Terminal setup ------------ # a cls 'clear' a seterm 'setenv TERM \!:1 ; set term=\!:1' a vt102 'unsetenv TERMINFO ; unsetenv TERMCAP ; seterm vt102' a vt220 'colour' a colour 'setenv TERMINFO ~/.terminfo ; \ setenv TERMCAP `cat ${TERMINFO}/TERMCAP` ; seterm vt220' a rows 'stty rows \!:1 ; setenv LINES \!:1 ; cols 80' a cols 'stty columns \!:1 ; setenv COLUMNS \!:1 ' a setsize 'rows \!:1 ; echo $LINES line mode' a 49 'setsize 49' a 50 '49' a 24 'setsize 24' a 25 '24' # a vtn 'echo -n "^[[m^[(B^[)0^O^[[?5l^[7^[[r^[8"' # ^^ ^^ ^^ ^^^^ ^^ ^^ ^^ # Esc Esc Esc Ctrl-O EscEsc Esc # If the vtn alias doesn't work correctly, then try this: # a vtn 'echo "X[mX(BX)0OX[?5lX7X[rX8" | tr '\''XO'\'' '\''\033\017'\''' # # #... other aliases ... ========8<-----------cut-here------------>8==================== The vtn alias has been piped through cat -v to make the control codes look like their two-character representation. Edit the echo'ed string so that the ^[ characters are real escape characters and ^O is a control-O. Or comment out that line and use the one below it that uses the tr command. This alias is very, VERY handy for resetting a vt100 style screen if it gets screwed up with an accidental character set sequence (see any vt100 term escape code reference). If you want to see some interesting colourful prompts and you use tcsh, then try sourcing this: ========8<-----------cut-here------------>8==================== # Primary tcsh command prompt # # simple looking one # set prompt='$S%?%s %B%/-%b%U%h%u-%U%#%u%L' # # set prompt='%S%l%s|%U%?%u[%B%t%b]%S%~%s-%B%h%b-%U%#%u%L' # set prompt='%u%s%b[%U%m%u|%U%~%u][%S%t%s][%B%h%b][%S%?%s]%U-%#%u%L' # set prompt='%B%b[%S%?%s][%S%t%s][%B%h%b][%U%m%u|%U%~%u]%U-%#%u%L' set prompt='%B%b[%S%?%s][%U%t%u][%S%m%s|%S%~%s][%B%h%b]%U-%#%u%L' # # prompt2 # Used wherever normal csh prompts with a question mark. # # set prompt2='%B%R?>%b ' set prompt2='%B%R%b%S?%s%L' # # prompt3 # Used when displaying the corrected command line when automatic # spelling correction is in effect. # # set prompt3='CORRECT>%R (y|n|e)?' # set prompt3='%BCORRECT%b%S>%s%R (%By%b|%Bn%b|%Be%b)%S?%s%L' set prompt3='%{%}CORRECT%S>%s%R (%By%b|%Bn%b|%Be%b)%S?%s%L' ========8<-----------cut-here------------>8==================== Note how the red colour is manually put into prompt3. It's possible to put colour sequences into the prompts of all the common shells (check its man page). For more info check out: 1. The man pages for: terminfo, (termcap), stty, tput, infocmp, captoinfo, tic (and the man pages in the "see also" sections). 2. The file /etc/termcap 3. The comp.terminals ftp archive site: cs.utk.edu :: /pub/shuford/terminal/ You should be able to find at least one file there that explains all the vt100 control sequences. 4. I've got a file with the vt102 and ansi escape sequences in it. If you want a copy, just let me know. 5. I've never seen it, but for a color xterm check this out: X11R5 and X11R6 versions: ftp.x.org /R5contrib/color_xterm.tar.Z ftp.x.org /contrib/utilities/color-xterm-R6-patch.README ftp.x.org /contrib/utilities/color-xterm-R6pl5-patch.gz ftp.x.org /contrib/utilities/colour_xterm.tar.gz Enjoy! Tony T.Nugent@sct.gu.edu.au 04/23/95 ========8<----insert-crowbar-here------------------------------ All comments very much appreciated. Cheers Tony MMM \|/ www __^__ (o o) @ @ (o o) /(o o)\ -.ooO-(_)-Ooo.-+-.oOO-(_)-OOo.-+-.oOO--(_)--OOo.-+-.oOO==(_)==OOo.-----+ | Tony Nugent |-| Griffith University T.Nugent@sct.gu.edu.au |--. | __'!`__ | | Brisbane, Queensland tnugent@gucis.cit.gu.edu.au | | | (o o) | | Australia | | `-ooO---(=)---Ooo-' `--------------------------------------------------' | `------------------' `--------------------------------------------------' Article 3993 of comp.terminals: Path: cs.utk.edu!gatech!swrinde!hookup!news.moneng.mei.com!uwm.edu!msunews!harbinger.cc.monash.edu.au!bunyip.cc.uq.oz.au!newshost.gu.edu.au!news From: Tony Nugent Newsgroups: comp.terminals Subject: Re: (howto) Set up a custom (colour) vt term Date: 30 Apr 1995 07:17:03 GMT Organization: Griffith University Brisbane Queensland Australia Lines: 35 Message-ID: <3nvdhf$36j@griffin.itc.gu.edu.au> References: <3nvb45$2kl@griffin.itc.gu.edu.au> Reply-To: T.Nugent@sct.gu.edu.au NNTP-Posting-Host: kraken.itc.gu.edu.au Keywords: vt100 vt102 vt220 ansi colour terminfo termcap term Tony Nugent writes: Sorry about this: [munch] >To make switching term very easy, I use a few aliases. I have >the following in a ~/.alias file that I source from ~/.cshrc... >========8<-----------cut-here------------>8==================== ># ~/.alias ># sourced from ~/.cshrc >#... alias a 'alias' >#... ># >#-------- Terminal setup ------------ ># >a cls 'clear' >a seterm 'setenv TERM \!:1 ; set term=\!:1' [munch] I forgot to mention that I have the alias command aliased to "a". Cheers Tony /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/~\ | Tony Nugent Griffith University, Brisbane, Queensland, Australia| _ | | Email: T.Nugent@sct.gu.edu.au tnugent@gucis.cit.gu.edu.au | @|| \__________________________________________________________________\_/| / Pull here for the full .sig or use finger on the second address / ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~