Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!bloom-beacon!mit-eddie!rutgers!ucsd!nosc!helios.ee.lbl.gov!lll-tis!lll-winken!uunet!mcvax!ukc!etive!lfcs!simon From: simon@lfcs.ed.ac.uk (Simon Brown) Newsgroups: comp.bugs.4bsd Subject: Re: vi with an 8-bit shell Message-ID: <594@etive.ed.ac.uk> Date: 30 Jul 88 20:17:23 GMT References: <571@etive.ed.ac.uk> <575@sbsvax.UUCP> Sender: news@etive.ed.ac.uk Reply-To: simon@lfcs.ed.ac.uk (Simon Brown) Organization: LFCS, University of Edinburgh Lines: 35 In article <575@sbsvax.UUCP> greim@sbsvax.UUCP (Michael Greim) writes: >In article <571@etive.ed.ac.uk>, simon@lfcs.ed.ac.uk (Simon Brown) writes: >< If you use '%' or '#'in a shell-escape, such as >< :!diff % %.orig >< then vi will set the high-bit on the substituted filenames. If you use a >< shell which passes 8-bit data correctly (such as ksh-i), then you get: >< diff: mumble.c: Invalid argument >< This doesn't happen for sh or csh, of course, since they strip 8-bit data. >< >< See the unix0() function in ex_unix.c. >< >Yes, it's there. Probably it's for filenames which contain shell >meta characters like "*" or just plain spaces. By quoting vi ensures that >the filename is "correctly" interpreted by the shell. Most people, like >me, never notice such a thing, because they have plain sh or csh. >I think when vi was written, there was no such thing as a "8 bit" shell. >Can you come up with a fix ? well, just changing the "case '%'" switch-field in unix0() so it uses *up++ = *fp++ in place of *up++ = *fp++ | QUOTE; seems to do the trick. (i naughtily patched the binary instead of changing the source, but that was just to quickily check it out :-). of course, it means you have to explicitly quote it if the filename contains shell meta-chars, but that's not too much of a hardship... Simon. | Simon Brown | UUCP: mcvax!ukc!lfcs!simon | Laboratory for Foundations of Computer Science | ARPA: simon%lfcs.ed | Department of Computer Science | @nss.cs.ucl.ac.uk | University of Edinburgh, Scotland, UK. | JANET: simon@uk.ac.ed.lfcs