3.1 KiB
3.1 KiB
zsh-users mailing list: command_not_found_handler autoload example (Bart Schaefer, 2015)
Metadata
| Field | Value |
|---|---|
| Institute | Molodetz Institute — Research & Retrieval Division |
| Subject | shell-multiplexer-auto-attach |
| Document type | Source Dossier |
| Tier | 1 |
| Source title | Zsh Mailing List Archive (zsh-users, 2015, msg00931) |
| Source URL | https://www.zsh.org/mla/users/2015/msg00931.html |
| Source publisher / author | Bart Schaefer, via the zsh-users mailing list (zsh.org) |
| Source type | forum thread |
| Source date (published) | 2015 (exact date not stated in the search result) |
| Date researched | 2026-10-10 |
| Researched by | tai (agent), model: Claude Sonnet 5, on behalf of retoor |
| Research method | web search synthesis |
| Confidence | Medium |
| Status | Active |
Summary
A zsh core contributor's own worked example of command_not_found_handler: a zsh-recognized function name that fires when zsh's normal $fpath/$path lookup fails to find a command, with the example showing it dynamically registering (FPATH=$PWD; autoload +X $missing_command) and running a function on the fly before falling through to the usual error.
Key findings
command_not_found_handleris a plain zsh function definition, recognized by name — the zsh analogue of bash'scommand_not_found_handle, differing only in thehandler/handlesuffix. No autoload directive is required just to make zsh call it; autoload is only used inside the example body for its own dynamic-function-loading trick, which is unrelated to the hook mechanism itself being active.- The handler runs after the parent shell has already forked for the failed command, per Bart Schaefer's own note in the thread — so anything the handler loads or defines does not persist back into the parent shell's own function table.
- The example demonstrates
autoload -Xbeing used inside a handler for a specific advanced use case (lazy-loading an unknown function from the current directory); this is a feature of the example's specific technique, not a requirement for usingcommand_not_found_handlerat all.
Pros / strengths
- Directly from a zsh core contributor, carrying real authority on the mechanism's actual semantics (the fork-before-handler timing detail in particular is not the kind of thing casual documentation usually states explicitly).
Cons / limitations / caveats
- The worked example itself is solving a different, more advanced problem (dynamic function loading) than tai's simple delegate-to-a-binary use case; only the top-level fact (the handler's name and that it's a plain function) was load-bearing for this project, not the autoload trick inside it.
Relevance to tai
Confirms the exact function name (command_not_found_handler, not _handle) that ZSH_NOTFOUND_BLOCK in tai.py defines, and confirms no special autoload/registration step is needed beyond the function definition itself — consistent with the simple, bash-parallel block tai.py actually writes.
Changelog
| Date | Change |
|---|---|
| 2026-10-10 | Initial dossier created. |