stack push|pop|list alias|assign|bind|on|set [<item>]
STACK is a convenient mechanism for storing current aliases, variables, hooks, sets, and binds in a stack. New aliases, variables, hooks, etc with the same names or scopes can be created without disturbing the stacked ones. Those that are stacked can be restored at any time (clobbering any current settings in favor of the saved ones).
There are three commands currently available to STACK. The first, push, pushes an item onto a stack bearing its name. The second, pop, removes the most recent pushed item off its stack. The last, list, shows the contents of the named stack.
To push the current WHO hook onto the stack:
stack push on who
To pop the most recently pushed $foo variable off its stack:
stack pop assign foo
To list the current alias stack:
stack list alias
STACK LIST works, but not quite as one would expect. Instead of listing each individual alias, variable, or hook separately, all are clumped together. Their order is correct, but the output may be confusing.
Behavior between the five varieties can be confusing. Aliases, assigns, and hooks (ons) disappear when pushed on to the stack. Keybindings and sets do not (nor do they revert to defaults.) Also, the on stack requires a hook type when accessed with the 'list' command.