> > * mktemp is not portable; you could use something like the date and
> >   process identifier ($$) to create a portable temporary file.
> >   (I am actually still curious as to whether there is a reasonable
> >   portable approach that is less sloppy than this.)
> 
> I'm not sure the best way to do that or if it's worth the extra
> complication.  It is unfortunate that POSIX doesn't have mktemp or a
> command to do the same thing.  However, mktemp seems to be very widely
> available.  It is in GNU coreutils (i.e. Gnu/Linux), OpenBSD, NetBSD,
> FreeBSD, Mac OS X, HP-UX, Tru64 Unix.

While mktemp is very widely available, I came across systems where it
was not, and I came across others where it behaved incompatibly.
I think HP-UX was one of the problematic operating systems. I may have
made notes on this in the urchin issue tracker and commit history,
but I don't remember.
http://thomaslevine.com/scm/urchin

> > * Quote "$edit" in case the editor has a space in its name.
> 
> I deliberately do not quote $edit so that I can set EDITOR to nano -w. 
> Is that non-standard/wacky?  Is there a convention for whether the the
> value of EDITOR environment variable should be able to have options?

Dunno about the convention. Please report if you come up with an answer,
as I am curious. Here are some ideas of how to handle this. They're in
decreasing order of my preference, but the first one is the only one that
I think is good.

* Quote the variable, set EDITOR equal to "nano-w", and implement "nano-w"
  as a program that calls "nano -w".
* Handle EDITOR and VISUAL one way, and handle two alternative
  non-standard variables the other way.
* Call "eval $EDITOR", so that it is at least possible to specify paths
  with spaces by quoting the path.
* Add a flag that affects how spaces are handled.

> > * You haven't handled editor errors.
> 
> I'm not sure the best way to do that or if it's worth the extra
> complication.

I present one approach in the attachment.
It is based on commit 08d2db088dad2f35ce91523eb35b6456dd189031.
diff --git i/edit-pipe w/edit-pipe
index 3ceff5f..b0b9351 100755
--- i/edit-pipe
+++ w/edit-pipe
@@ -24,5 +24,8 @@ fi
 
 cat > "$tf"
 $edit "$tf" < /dev/tty  > /dev/tty
+code=$?
+test 0 -lt $code ||
 test "-v" = "$1" || cat "$tf"
 rm "$tf"
+exit $code

Reply via email to