Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: exit after 10 EOF's

On Wed, 15 Sep 2004, Peter Stephenson wrote:

> Hmm... the documentation for ignore_eof says:
>   However, ten consecutive EOFs will cause the shell to exit anyway,
>   to avoid the shell hanging if its tty goes away.
>   Also, if this option is set and the Zsh Line Editor is used, widgets
>   implemented by shell functions can be bound to EOF (normally
>   Control-D) without printing the normal warning message.  This works
>   only for normal widgets, not for completion widgets.
> This implies there's not even an error message, which isn't right.

It implies that _widgets implemented by shell functions_ don't print an
error.  Which they don't -- try this:

 foo() { LBUFFER='Where is my error?' }
 zle -N foo
 setopt ignoreeof
 bindkey \^D foo

The reason there's no error in that case is because of the way eofsent 
because of the test

    } else if((w = func->widget)->flags & (WIDGET_INT|WIDGET_NCOMP)) {

at approximately line 904 of zle_main.c.  User-defined widgets don't have
such flags (see the discussion about how maybe they should, as per auto-
suffix removal) so they can't possibly take that code branch.

> The error message implies it *is* being treated as EOF

No, it's not being treated as EOF.  It's being treated as a key bound to 
the EOF character (and not explicitly bound to anything else).  Because
it is bound to the EOF character, zsh assumes the user meant to send an
EOF and warns about why it didn't exit.  That has nothing whatsoever to
do with whether or not it exits after 10 of them.

> The documentation could imply that if you bound ^D to something other
> than the default, you wouldn't get the message, but there doesn't appear
> to be any support for that

See above.

> and I don't think it's useful.

I disagree.

See also the heavily-commented (for a change) code in getkey() at around 
line 617, where it explains about zle exiting on 20 consecutive (real) 

Messages sorted by: Reverse Date, Date, Thread, Author