maart@cs.vu.nl (Maarten Litmaath) (11/14/89)
In article <740@uc.msc.umn.edu> glex@uf.UUCP (Jeffrey Gleixner) writes: \I finally have gotten so sick of typo's that I want to run spell while in \vi, without exiting or suspending, the file. So I wrote a small script (sp). \It takes the input from vi (:1,$!sp) and redirects it to a file, I run ^^^^^^^ This command will overwrite the buffer with the output from sp. The following command will just feed the buffer to sp: :w !sp Notice the space between the `w' and the `!'. \spell on the file, pulling up a window (Sun) displaying the output from spell. \The window waits for a <CR> and then exits. Well that works just fine EXCEPT \that I can't continue with vi until I exit the window, probably waiting for \the !sp to finish. Indeed. Try something like this for sp (without the indentation!): #!/bin/sh cat > /tmp/sp.$$ trap '' 2 18 21 22 # trap SIGINT, SIGTSTP, SIGTTIN and SIGTTOU ( # do funny stuff here ) & # maybe some redirections are appropriate sp exits while its child will continue processing in the background. If you don't trap the stop signals, something `funny' happens when you stop vi (^Z) while the background job is still running, so that it would be stopped too, implicitly: (relevant BSD kernel code) case SIGTSTP: case SIGTTIN: case SIGTTOU: /* * Children of init aren't allowed to stop * on signals from the keyboard. */ if (p->p_pptr == &proc[1]) { psignal(p, SIGKILL); continue; } The stop signal is changed to a kill signal! BTW, how about the following, Mr. Bourne?! trap '' SIGINT SIGTSTP SIGTTIN SIGTTOU or trap '' INT TSTP TTIN TTOU -- "Richard Sexton is actually an AI program (or Construct, if you will) running on some AT&T (R) 3B" (Richard Brosseau) | maart@cs.vu.nl, mcsun!botter!maart
mercer@ncrcce.StPaul.NCR.COM (Dan Mercer) (11/15/89)
In article <4525@ski.cs.vu.nl> maart@cs.vu.nl (Maarten Litmaath) writes: :In article <740@uc.msc.umn.edu> glex@uf.UUCP (Jeffrey Gleixner) writes: :\I finally have gotten so sick of typo's that I want to run spell while in :\vi, without exiting or suspending, the file. So I wrote a small script (sp). :\It takes the input from vi (:1,$!sp) and redirects it to a file, I run : ^^^^^^^ :This command will overwrite the buffer with the output from sp. :The following command will just feed the buffer to sp: : : :w !sp : :Notice the space between the `w' and the `!'. : :\spell on the file, pulling up a window (Sun) displaying the output from spell. :\The window waits for a <CR> and then exits. Well that works just fine EXCEPT :\that I can't continue with vi until I exit the window, probably waiting for :\the !sp to finish. : :Indeed. Try something like this for sp (without the indentation!): : : #!/bin/sh : : cat > /tmp/sp.$$ : trap '' 2 18 21 22 # trap SIGINT, SIGTSTP, SIGTTIN and SIGTTOU : ( : # do funny stuff here : ) & # maybe some redirections are appropriate : :sp exits while its child will continue processing in the background. :If you don't trap the stop signals, something `funny' happens when you :stop vi (^Z) while the background job is still running, so that it would :be stopped too, implicitly: (relevant BSD kernel code) : : case SIGTSTP: : case SIGTTIN: : case SIGTTOU: : /* : * Children of init aren't allowed to stop : * on signals from the keyboard. : */ : if (p->p_pptr == &proc[1]) { : psignal(p, SIGKILL); : continue; : } : :The stop signal is changed to a kill signal! :BTW, how about the following, Mr. Bourne?! : : trap '' SIGINT SIGTSTP SIGTTIN SIGTTOU :or : trap '' INT TSTP TTIN TTOU :-- :"Richard Sexton is actually an AI program (or Construct, if you will) running :on some AT&T (R) 3B" (Richard Brosseau) | maart@cs.vu.nl, mcsun!botter!maart On our SYSV Towers, spell is implemented as a very inefficient shell script, with /usr/lib/spell/spellprog as the actual program (although it requires a word/line input). I de-engineered it and turned it into Spell, designed not only to proofread, but to mark errors =======================CUT HERE============================ HLISTA="/usr/lib/spell/spellprog /usr/lib/spell/hlista" TMP=/usr/tmp/Spell$$ SCRIPT= for i in `tee $TMP | deroff -w | $HLISTA` do SCRIPT="${SCRIPT}s/$i/\/\/\/${i}\/\/\//g " done sed "$SCRIPT" $TMP rm $TMP exit 0 =======================CUT HERE============================ the following two command in my .exrc file invoke it: map ^V<ESC>s !}Spell^V^M/\/\/\/^Mw map! ^V<ESC>s ^V<ESC>!}Spell^V^M/\/\/\/^Mw ============================================================ Now is the winter of ourr discontemt made weerder by the moment by trying to think up sammple paragrafs to demo this shit. ================is replaced by============================== Now is the winter of ///ourr/// ///discontemt/// made ///weerder/// by the moment by trying to think up ///sammple/// ///paragrafs/// to ///demo/// this ///shit///. ============================================================ Of course, this cores on our old news machine (Tower 1650). On our normal machines, it works quite well and speedily. Normal disclaimers apply. Does anyone know how spellprog works - the format of the spell databases? If I knew I'd do this up right. -- Dan Mercer Reply-To: mercer@ncrcce.StPaul.NCR.COM (Dan Mercer)