Xref: utzoo comp.unix.questions:17671 comp.editors:1080 Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!ucsd!usc!cs.utexas.edu!uunet!ncrlnk!ncrcce!mercer From: mercer@ncrcce.StPaul.NCR.COM (Dan Mercer) Newsgroups: comp.unix.questions,comp.editors Subject: Re: VI & spell Message-ID: <1711@ncrcce.StPaul.NCR.COM> Date: 14 Nov 89 18:44:02 GMT References: <740@uc.msc.umn.edu> <4525@ski.cs.vu.nl> Reply-To: mercer@ncrcce.StPaul.NCR.COM (Dan Mercer) Organization: NCR Comten, Inc. Lines: 114 Keywords: 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 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 ^Vs !}Spell^V^M/\/\/\/^Mw map! ^Vs ^V!}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)