I removed the interact test and played around with fc and don't see any difference. The current regression tests which all work fine. So here's a suggestion that I believe will have little impact on zsh developers. Attached should be a two-line patch to #ifdef this code out. Apply it. If people find problems in fc as a result of this change, I'll fix these. If we get to a release and people for whatever reason feel the that life was better disallowing fc unless in interactive mode, then it is a matter of deleting two lines and you have the old behavior. I will also remove the interactive flag on zshdb as another means of getting test coverage there with a program that uses fc without interactive mode set. And to show good faith in fixing whatever bugs come up, attached is a test in an new "fc" file for the bug I recently discovered which by the way has nothing to do with whether or not interactive is set. On Mon, Sep 22, 2008 at 10:25 AM, Peter Stephenson wrote: > "Rocky Bernstein" wrote: >> > So "fc -l" >> > hasn't been very useful and the error message tends to be more helpful than >> > simply doing nothing because you're in a non-interactive shell with, the >> > vast majority of the time, no history. >> >> The problem is that an error message which prevents functioning of a >> command should only be given when there *is* an error, not in >> anticipation of a situation which sometimes is an error. > > Granted that's a perfectly good general rule, but it's not, in this > case, the "real" problem, which, as I've said many times, is that we > simply don't have anything remotely like the effort to implement all > these entirely reasonable things, never did, and probably never shall. > Many errors are simply there because the general case was much more > difficult than making it work the vast majority of the time. > >>> There's no basic reason why it >>> shouldn't work if history works elsewhere. >> >>> Could this be changed please? > > As you appear to have some test cases, could you please try removing the > lines in builtin.c:bin_fc() that say > > /* fc is only permitted in interactive shells */ > if (!interact) { > zwarnnam(nam, "not interactive shell"); > return 1; > } > > and seeing what happens? I suspect some options really don't work in > this case, but without trying it's hard to tell what they are. If we're > lucky, it may just be we need to catch a few extra test case lower down > like the one you picked up in up_histent(). Otherwise, it'll have to go > on the queue of things I might get around to one day. > > Thanks. > > -- > Peter Stephenson Software Engineer > CSR PLC, Churchill House, Cambridge Business Park, Cowley Road > Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 >