Subject: v06i044: Help programs (help), Part2/2 Newsgroups: mod.sources Approved: rs@mirror.UUCP Submitted by: talcott!seismo!wucs!nz (Neal Ziring) Mod.sources: Volume 6, Issue 46 Archive-name: help/Part2 [ This is a sample small help directory, to get you started. Note that any files within the help tree must have world-read permission, and all directories must have world-read/execute. Also, if you put this tree in somewhere other than /usr/help (the shar specifies ./help.dir), you'll have to change the HELPDIR #define in help.h source --r$ ] #!/bin/sh # This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by mirror!rs on Wed Jul 9 13:05:00 EDT 1986 # Contents: help.dir// help.dir/vi/ help.dir/vi/commands/ # help.dir/.HLP help.dir/COMMANDS.HLP help.dir/date.HLP # help.dir/su.HLP help.dir/su.MANUAL help.dir/who.HLP # help.dir/who.MANUAL help.dir/vi/options.HLP # help.dir/vi/starting.HLP help.dir/vi/states.HLP # help.dir/vi/commands/change.HLP help.dir/vi/commands/delete.HLP # help.dir/vi/commands/funky.HLP help.dir/vi/commands/insert.HLP # help.dir/vi/commands/other_commands.HLP echo mkdir - help.dir/ mkdir help.dir/ chmod u=rwx,g=rwx,o=rwx help.dir/ echo x - help.dir/.HLP sed 's/^XX//' > "help.dir/.HLP" <<'@//E*O*F help.dir/.HLP//' XXThis is a dummy top-level help file. A good use of this file is XXto give pointers to the maintainers of the HLP documentation. @//E*O*F help.dir/.HLP// chmod u=rw,g=rw,o=rw help.dir/.HLP echo x - help.dir/COMMANDS.HLP sed 's/^XX//' > "help.dir/COMMANDS.HLP" <<'@//E*O*F help.dir/COMMANDS.HLP//' XX Here is a list of popular commands and software systems XX available on the CEC UNIX systems. To get the manual XX page for a command, try `man command_name'. To get XX the help on that command, if any, try `help topic_name'. XX COMMAND FUNCTION HELP TOPIC XX adb debugger XX apropos locate commands by keyword apropos XX ar archive, library maintainer XX at execute commands at later time XX awk pattern scanning & processing language XX ada Ada language compiler and RTS ada XX apl APL interpreter XX biff be notified if new mail arrives mail XX cal print calendars calendar XX cat catenate data cat,shell XX caesar graphical layout editor cad XX cb C program beautifier C XX cc C compiler C XX cd change working directory cd,shell XX chmod change protection modes chmod XX clear clear terminal screen clear XX col filter formatter output documents XX correct correct spelling mistakes documents XX cp copy files copy XX csh command interpreter with C-like syntax shell XX ctrlc system/matrix analysis program ctrlc XX curses Optimal cursor motion package XX date print the time and date time_of_day XX dbx symbolic debugger dbx XX dd copy and convert data XX deroff remove formatter commands documents XX df list disk usage by partition df XX diction find wordy sentences documents XX diff differential file & directory compare diff XX ditroff troff typesetter for the Imagen documents XX du summarize disk usage of directory du XX echo echo arguments shell XX eqn typeset mathematics XX explain theasaurus for diction documents XX f77 Fortran 77 compiler fortran XX file determine file type file XX find find files XX finger user information lookup finger XX fold fold long text lines fold XX from print sources of new mail mail XX fsplit split up fortran programs XX ftp intersystem File Transfer Program copy XX gemacs (GNU) veratile screen editor emacs XX gpssh GPSS simulation system XX graph plot data on a nice graph graphics XX grep search a file for patterns grep XX groups show group membership groups XX head give first few lines XX hostname print name of current host hostname XX indent indent and format C programs C XX join join database primitive XX kill kick a process kill XX last print recent user logins last XX learn computer-aided instruction on UNIX learn XX leave remind you when you have to leave leave XX lex generator of lexical analyzers lex XX lisp Franz Lisp dialect of lisp lisp XX ln make links ln XX lock reserve your terminal XX lpq Examine line-printer queues printing XX lpr Print stuff at a line printer printing XX lprm remove jobs from print queue printing XX ls list contents of directories ls XX m4 compleat macro pre-processor m4 XX mail electronic (network) mail system mail XX make maintain program groups make XX man on-line UNIX programmers manual man XX mkdir make a directory mkdir XX more file perusal program more XX mt manipulate the magtape drive XX mv move and rename files mv XX passwd change login password password XX pc pascal compiler pascal XX pi pascal interpreter XX plot graphics filters graphics XX postnews submit a news article news XX pr paginate, label, and collate files pr XX print paginate and print file printing XX ps display process status ps XX pwd print current working directory shell XX quota print current quotas quota XX ratfor rational fortran pre-processor XX rcp Remote file copy copy XX reset reset the tty driver to sensible state terminals XX rm remove files or directories rm XX rsh run a command on a remote system rsh XX ruptime show status of all hosts on network ruptime XX rwho show who is logged in on all hosts rwho XX script make a typescript of login session script XX sed stream editor (filter) sed XX sh standard command interpreter XX slam discrete-event simulation language XX sort sort and merge files sort XX spell find spelling errors spell XX spice accurate low-level circuit simulator cad XX spitbol SNOBOL4 language interpreter spitbol XX spline interpolate smooth curve graphics XX split split a file into pieces split XX su substitute user temporarily su XX tail deliver last part of a file tail XX talk talk to another user on the screen talk XX tbl format pretty tables documents XX tee pipe fitting tee XX tr translate characters tr XX tset set up terminal characteristics terminals XX tty print name of current tty terminals XX uniq filter out duplicate lines from stream uniq XX uptime how long has the system been up? w XX vi visual editor vi XX vlsi tools Berkeley VSLI design tools cad XX vnews full-screen news-reading program news XX w who is on the system? What are they up to? w XX whatis describe what a program is whatis XX who who is on the system who XX whoami print current effective user id whoami XX wport print information about users and ttys wport XX yacc LALR(1) compiler-compiler XX z flexible command-based full-screen editor z XX There are many more useful commands and applications programs XX available. For more information, see section 1 of the UNIX XX PROGRAMMER'S MANUAL, or ask a consultant. @//E*O*F help.dir/COMMANDS.HLP// chmod u=rw,g=rw,o=rw help.dir/COMMANDS.HLP echo x - help.dir/date.HLP sed 's/^XX//' > "help.dir/date.HLP" <<'@//E*O*F help.dir/date.HLP//' XX The command `date' returns the system time and date. XX The form in which it is returned uses three-letter XX abbreviations for days of the week and months of the XX year. Time is given in military (24-hr) style. XX % date XX Tue Feb 30 13:38:31 CST 1985 @//E*O*F help.dir/date.HLP// chmod u=rw,g=rw,o=rw help.dir/date.HLP echo x - help.dir/su.HLP sed 's/^XX//' > "help.dir/su.HLP" <<'@//E*O*F help.dir/su.HLP//' XX Su subsitutes a new user identity on top of the current one. XX The syntax of su is simple: XX su [ username ] XX Usually, su is used to substitute a new user identity for XX the purpose of accessing files or programs owned by that XX user. For instance, XX % su cs456t5 XX might be used to substitute the cs456 term 5 user identity XX to work on a team report. XX If the user whose identity you are trying to assume has a XX password, su will insist on you typing this password correctly XX before granting you the new identity. XX When given no parameters, su assumes you wish to substitute the XX "root" user identity. Root wields all system privileges and XX powers. The command XX % su XX is therefore used only by system staff. XX To exit from the shell created by su, type the command `exit'. XX % su cs456t7 XX Password: ... XX 456> vi report.nroff XX 456> nroff -me report.nroff | lpr XX 456> exit XX % @//E*O*F help.dir/su.HLP// chmod u=rw,g=rw,o=rw help.dir/su.HLP echo x - help.dir/su.MANUAL sed 's/^XX//' > "help.dir/su.MANUAL" <<'@//E*O*F help.dir/su.MANUAL//' XX man 1 su @//E*O*F help.dir/su.MANUAL// chmod u=rwx,g=rwx,o=rwx help.dir/su.MANUAL echo x - help.dir/who.HLP sed 's/^XX//' > "help.dir/who.HLP" <<'@//E*O*F help.dir/who.HLP//' XX Who is a command to find out what users are on the system and XX when they logged on. To use this command, just type XX %who @//E*O*F help.dir/who.HLP// chmod u=rw,g=rw,o=rw help.dir/who.HLP echo x - help.dir/who.MANUAL sed 's/^XX//' > "help.dir/who.MANUAL" <<'@//E*O*F help.dir/who.MANUAL//' XX man 1 who @//E*O*F help.dir/who.MANUAL// chmod u=rwx,g=rwx,o=rwx help.dir/who.MANUAL echo mkdir - help.dir/vi mkdir help.dir/vi chmod u=rwx,g=rwx,o=rwx help.dir/vi echo mkdir - help.dir/vi/commands mkdir help.dir/vi/commands chmod u=rwx,g=rwx,o=rwx help.dir/vi/commands echo x - help.dir/vi/options.HLP sed 's/^XX//' > "help.dir/vi/options.HLP" <<'@//E*O*F help.dir/vi/options.HLP//' XX Many parameters of the vi editor are controlled by option XX settings: search modes, margins, tabs, line numbers, etc. XX To set these modes the way you like, you can modify the XX values of these options. XX There are two ways to set the value of an option: interactively XX or thru initialization. The environment variable `EXINIT' is XX used by vi to set the initial option values. You could have XX a line in your ".login" file like this: XX setenv EXINIT 'set magic ignorecase nowrapscan shiftwidth=8' XX to set the logical options magic, ignorecase, and wrapscan, and XX to set the numerical option shiftwidth. XX You can also set options while in the vi edit session. Just XX type colon ':' and to the prompt type: XX set autowrite XX to set the autowrite option. XX Note that setting options is done in "last line" state. XX Here is a list of useful options, numerical options are XX followed by a '=n'. You set their value with the `=###' XX construct shown above. Boolean options are reset by preceding XX their name with "no" (e.g. "nomagic"). XX autowrite - write buffer before changing files XX lisp - set up lisp mode XX ignorecase - ignore case of letters in searches XX magic - allow pattern-matching expression searches XX number - number lines XX redraw - simulate a smart terminal XX shiftwidth=n - set shift-command widths to n XX showmatch - show matching parentheses as they are closed XX wrapmargin=n - wrap lines n columns from right margin XX Personally, I prefer the following options combination: XX setenv EXINIT 'set redraw noslowopen showmatch magic optimize' XX For a complete list of options, get into vi and type ":set all". @//E*O*F help.dir/vi/options.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/options.HLP echo x - help.dir/vi/starting.HLP sed 's/^XX//' > "help.dir/vi/starting.HLP" <<'@//E*O*F help.dir/vi/starting.HLP//' XX To enter vi, just type `vi' and the name of the file to XX edit. XX % vi newhelp.c XX This will cause vi to read the file, and set up for you to XX edit it. If the file does not exist, vi will tell you so. XX Editing a new file just gives you a blank buffer to start. XX There are options to vi that allow you to start up your XX editing session differently: XX % vi + newhelp.c # start editing at the bottom of the file XX % vi +50 oldhelp.c # start editing at line 50 XX % vi +/main help.c # start editing at first occurence of `main' XX % vi -r prog2.p # recover edit session of prog2.p from last XX # time system crashed @//E*O*F help.dir/vi/starting.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/starting.HLP echo x - help.dir/vi/states.HLP sed 's/^XX//' > "help.dir/vi/states.HLP" <<'@//E*O*F help.dir/vi/states.HLP//' XX Vi operates in one of three basic states. When you start the XX edit session, you are in "visual" state. The text insertion XX commands (i, a, c., etc...) use "insert" state. Searches XX and special commands are performed in "last line" state. XX XX "Visual" state lets you move around and look at the file. To XX put in new text or change old text you use "insert" state. To XX execute complicated commands (e.g. 1,.s/x/X/g) you type a colon XX to enter "Last line" state. In "last line" state you are typing XX to a prompt at the bottom of the screen. XX STATE SUMMARY: XX ------------- insert cmd.s ------------- XX | | ------------------> | | XX | VISUAL | | INSERT | XX | | <------------------ | | XX ------------- ESCape key ------------- XX | ^ XX '?' | | XX '/' | | RETURN or XX ':' | | ESCape XX | | XX V | XX ------------- XX | | XX | LAST LINE | XX | | XX ------------- @//E*O*F help.dir/vi/states.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/states.HLP echo x - help.dir/vi/commands/change.HLP sed 's/^XX//' > "help.dir/vi/commands/change.HLP" <<'@//E*O*F help.dir/vi/commands/change.HLP//' XX Change is an operator to replace text. It takes the scope XX of its "changing" from a following motion command. XX For instance, 'ce' sets up to change text up to the end XX of the current word. XX Changing text is done in "insert" state. Here are some XX examples of command sequences to change text: XX ce change to end of word XX c$ change to end of line XX c/pat change to first occurence of pat XX c) change to end of sentence XX @//E*O*F help.dir/vi/commands/change.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/commands/change.HLP echo x - help.dir/vi/commands/delete.HLP sed 's/^XX//' > "help.dir/vi/commands/delete.HLP" <<'@//E*O*F help.dir/vi/commands/delete.HLP//' XX The letter 'd' is the delete operator in vi. Because it is XX an operator, it has no effect by itself; but requires a XX motion command to tell it the scope of the deletion. As XX a special case, "dd" deletes the entire current line. XX So, what can we do with this delete operator? Basically, XX 'd' followed by any command that would move the cursor deletes XX text up to and including where the cursor would have gone for XX that motion. XX For example: XX de delete 'til end of word XX d^ delete back to beginning of line XX df: delete until next occurence of a ':' XX dL delete to bottom of screen XX d/how delete up to next occurrence of "how" XX d?^[a-q]*: XX delete back to next line which matches "^[a-q]*:" XX Deletions are saved in queue of 10 buffers, numbered 1 thru 10. XX The most recent deletion is always in 1. You can get back XX your most recent deletion with 'p', and other deletions XX with `"np' where " is itself, and n is the number of the buffer. XX Therefore, to reverse the order of 3 lines, you could use XX this sequence of four commands: XX ddddp"2p XX @//E*O*F help.dir/vi/commands/delete.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/commands/delete.HLP echo x - help.dir/vi/commands/funky.HLP sed 's/^XX//' > "help.dir/vi/commands/funky.HLP" <<'@//E*O*F help.dir/vi/commands/funky.HLP//' XX To help you learn vi a little better, here are some XX funky command sequences that will do powerful things XX in vi. XX 1) Piping your buffer thru a command XX Let's say you want to quote something in a letter or XX other text, by making it all upper-case. XX You could do this in vi command state: XX XX 10!!tr 'a-z' 'A-Z' XX Another example: let's say you needed to sort a XX buffer alphabetically. You could use this sequence XX in vi to pipe the whole buffer to sort(1) and back again. XX 1G!Gsort -df XX XX 2) Pattern matching and replacement XX The general pattern-match-and-replacement capabilities XX of ex(1) are excellent. They even provide interactive XX query-replace. XX Let's say you need replace the strings "XMACnnn' where XX 'nnn' is a number, by 'ZMACROnnn' in almost every place XX it occurs. You could use this interactive replace to do XX the job XX 1,$s/XMAC\([0-9]*\)/ZMACRO\1/c XX Each time vi finds a candidate for replacement, it will XX display the line on which was found and you can type XX "yes" or "no" to replace or not replace. For more info XX on regular-expression pattern-matching and area addressing, XX see "The Ex Reference Manual". XX 3) Macros (Yes, really!) XX Vi has a limited macro facility that is part of ex(1). XX The macros written using this facility can perform an XX vi command, but have no parameters and do not nest. XX Macros are defined using the ":map" command. The basic XX syntax is: XX :map lhs rhs XX The lhs should be a single character (such as 'E' or '+') XX and may be a control character if quoted with ^V. Let's XX define a macro to start up an nroff paragraph. The command XX character will be 'P'. XX :map P oi.pp^V^[o XX You can learn more about macros in section 6.9 of XX "An Introduction to Display Editing with Vi". XX 4) Abbreviations XX You can define abbreviations with the ex command 'ab'. XX For instance, to define "ax" as an abbreviation for XX "AIRX project", you would do this: XX :ab ax AIRX project XX Abbreviations are different from macros in that they are XX expanded in insert state, and they only work when the XX lhs is a single word (i.e. if 'ax' were part of a longer XX word it would be left alone). @//E*O*F help.dir/vi/commands/funky.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/commands/funky.HLP echo x - help.dir/vi/commands/insert.HLP sed 's/^XX//' > "help.dir/vi/commands/insert.HLP" <<'@//E*O*F help.dir/vi/commands/insert.HLP//' XX The main way to put text in your buffer in vi is insert. XX Several commands enter "insert" state: XX i insert text right here XX a insert text to the right of right here XX A insert text at the end of the line XX I insert text at the beginning of this line XX o insert text on a following blank line XX O insert text on a preceding blank line XX Insert state is terminated with the ESCape key. XX You can also terminate insert with ^C (intr) but XX that ABORTs the insert state, and your text is lost. XX Note that insert state IS line oriented, when you have XX finished inserting each line, that line is in the buffer XX to stay. XX Several control characters have special meaning to vi XX when you are inserting text, so they will cause actions XX rather than be inserted. Do not be alarmed, this kind XX of ragged non-parameteric functionality is common in vi. XX XX The following commands work within insert state: XX ^H erase last character XX ^W erase last word XX ^U erase this insert line XX \ quote next character XX ^V really really quote next character @//E*O*F help.dir/vi/commands/insert.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/commands/insert.HLP echo x - help.dir/vi/commands/other_commands.HLP sed 's/^XX//' > "help.dir/vi/commands/other_commands.HLP" <<'@//E*O*F help.dir/vi/commands/other_commands.HLP//' XX Here is a list of other useful commands for vi. For XX a comprehensive list of commands, see the "VI QUICK XX REFERENCE" card. XX :wq write and quit XX :e xxx edit file 'xxx' XX :sh run a subshell XX XX n repeat last search XX N repeat last search but in opposite direction XX % find matching brace or parenthesis XX ) forward to next sentence XX or to next s-expr (lisp option) XX ( backward sentence XX or back s-expr (lisp option) XX XX '' back to previous location XX mX mark this spot with letter 'X' XX 'X go back to spot marked with 'X' XX J join this line and next XX D delete to end of line (same as d$) XX X delete character before cursor XX > left shift operator XX < right shift operator XX ! filter thru command operator XX XX :[addr1,addr2]s/pattern/replacement/[option] XX general pattern-match replacement (see ed(1) and ex(1)) XX :r fn read file "fn" into buffer XX XX :[addr1,addr2]d XX delete everything between addr1 and addr2 XX @//E*O*F help.dir/vi/commands/other_commands.HLP// chmod u=rw,g=rw,o=rw help.dir/vi/commands/other_commands.HLP echo Inspecting for damage in transit... temp=/tmp/sharin$$; dtemp=/tmp/sharout$$ trap "rm -f $temp $dtemp; exit" 0 1 2 3 15 cat > $temp <<\!!! 2 24 127 .HLP 133 744 8433 COMMANDS.HLP 9 44 252 date.HLP 36 155 898 su.HLP 1 3 10 su.MANUAL 6 25 126 who.HLP 1 3 11 who.MANUAL 55 260 1652 options.HLP 22 122 634 starting.HLP 32 149 1008 states.HLP 14 77 434 change.HLP 33 188 1071 delete.HLP 74 354 2217 funky.HLP 31 181 1051 insert.HLP 37 147 907 other_commands.HLP 486 2476 18831 total !!! wc help.dir/.HLP help.dir/COMMANDS.HLP help.dir/date.HLP help.dir/su.HLP help.dir/su.MANUAL help.dir/who.HLP help.dir/who.MANUAL help.dir/vi/options.HLP help.dir/vi/starting.HLP help.dir/vi/states.HLP help.dir/vi/commands/change.HLP help.dir/vi/commands/delete.HLP help.dir/vi/commands/funky.HLP help.dir/vi/commands/insert.HLP help.dir/vi/commands/other_commands.HLP | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp if test -s $dtemp then echo "Ouch [diff of wc output]:" ; cat $dtemp else echo "No problems found." fi exit 0