Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Tests of interrupting completion, and completion_nostat_dirs
- X-seq: zsh-workers 32322
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx, gak@xxxxxxxxxxxxxx
- Subject: Tests of interrupting completion, and completion_nostat_dirs
- Date: Wed, 29 Jan 2014 18:12:06 -0800
- In-reply-to: <87eh3q3g63.fsf@lwm.klanderman.net>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CACcU-g0qb3gZVLPPS2bQBixuozSsXd_9ObK+V6CTcaP4qfiFtA@mail.gmail.com> <140122000435.ZM1516@torch.brasslantern.com> <CADdV=MsdfHUKDVy1dLbZ-d19cAEpGuDxzsKPd3Cy6imJ1Lo_8Q@mail.gmail.com> <140123171659.ZM19422@torch.brasslantern.com> <87iot91lp8.fsf@lwm.klanderman.net> <140125124934.ZM23767@torch.brasslantern.com> <87eh3q3g63.fsf@lwm.klanderman.net>
[> workers]
On Jan 29, 11:29am, Greg Klanderman wrote:
} Subject: Re: [Feature suggestion] (user configurable) timeout for generati
}
} >>>>> On January 25, 2014 Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
}
} > On Jan 24, 9:46am, Greg Klanderman wrote:
} > }
} > } For slow completion due to calling out to a separate process for
} > } completions (_git comes to mind) if that is not currently
} > } interruptible it seems like there might be some hope of adding a
} > } timeout or ensuring C-c will interrupt.
}
} > This is the thing I had a hard time reproducing. Even if I force
} > the completion function to be very busy with a loop, I can interrupt
} > it. (Oddly the value of $? is always 0 in _main_complete after I
} > hit ^C, so I can't detect the signal and issue a message.)
Incidentally, here's something I added to _main_complete to make this
easier to test:
------------
diff --git a/Completion/Base/Core/_main_complete b/Completion/Base/Core/_main_complete
index d6831b8..036f1d3 100644
--- a/Completion/Base/Core/_main_complete
+++ b/Completion/Base/Core/_main_complete
@@ -126,6 +126,11 @@ fi
_completer_num=1
+# We assume localtraps to be in effect here ...
+integer SECONDS=0
+trap 'zle -M "Killed by signal in ${funcstack[0]} after ${SECONDS}s";
+ zle -R; return 130' INT QUIT
+
# Call the pre-functions.
funcs=( "$compprefuncs[@]" )
------------
Any objection to that being pushed to the master git?
} Did you try a busy completion function, or external process?
I tried
_slow() { sleep 30; return 1 }
and the infinite loop
_slow() {
while :; do read -E -k 1 -u 0 </dev/zero >/dev/null; done
return 1
}
and even
_slow() {
SECONDS=0
while (( SECONDS < 30 )); do : ; done
return 1
}
and I was able to interrupt all of them.
} In the original post it seemed that the slow call was probably reading
} a large directory on a slow NFS mount.
Yes, but both that and stat of an automount are going to be disk-wait
blocking accesses to NFS.
} I'll attach the patch below, if you'd be willing to incorporate
} something like it let me know, I'd certainly prefer to have it part of
} zsh. I would add documentation of course.
Hmm, to include this I'd probably want completion_nostat_dirs to be an
autoloaded parameter in the zsh/complete module or something like that.
It doesn't have any of those right now (the magic parameters that are
only valid inside completion widgets are a somewhat different beast) but
there's no reason it couldn't.
On the other hand ZLE_RPROMPT_INDENT is declared in the main shell even
though it's used only by zsh/zle ... anybody else want to weigh in?
Messages sorted by:
Reverse Date,
Date,
Thread,
Author