Skip to content

Hook up PSES events to PSEventManager #613

Open
@SeeminglyScience

Description

@SeeminglyScience

Right now the only way to register event/request handlers is to override them via IMessageHandlers from the component registry. This has a few issues

  1. As far as I can tell this only allows you to override handlers, not add to them. Doing this as part of an extension module would break existing functionality.

  2. These delegates are invoked from a thread that doesn't have a default runspace. This means if the delegate is a converted script block it will fail (and crash PSES)

I propose we add the following:

  1. Function or cmdlet Register-EditorEvent. This should work like Register-EngineEvent. It would take a SourceIdentifier as the event name and script block to register as a PSEventSubscriber. Ideally this would also include argument completion for event names.

  2. A class that holds constants with event names (see PSEngineEvent)

  3. Additional logic to existing handlers and other events to check for relevant event subscribers and if found generate the event.

  4. If the event/handler typically returns a value, a property would need to be added to the EventArgs to handle output (PowerShell eventing doesn't handle delegate output)

This would solve a few issues

  1. Extension modules could register additional handlers the same way in PowerShell and compiled languages

  2. Eventing should take care of all the runspace management and queuing of commands that would normally make this a huge pain. This would also allow the events to be ran in between sequence points of an in progress command.

  3. Allow multiple handlers for a single request/event

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions