Table of Contents

Inspiration

Whim is heavily inspired by the workspacer project. Whim was not built to be a drop-in replacement for workspacer, but it does have a similar feel and many of the same features. It is not a fork of workspacer, and is built from the ground up.

It should be noted that workspacer is no longer in active development. I am grateful to the workspacer project for the inspiration and ideas it has provided.

There are several key differences between Whim and workspacer:

Layout Engines

workspacer stores all windows in an IEnumerable<IWindow> stack which is passed to each ILayout implementation. This has a number of downsides:

  • All layout engines must work with the same list of windows.
  • workspacer cannot support more complex window layouts. In comparison, each ILayoutEngine in Whim stores windows in their own manner. For example, Whim's tree layout uses a n-ary tree structure to store windows in arbitrary grid layouts. For more, see Layout Engines.

Whim's ILayoutEngines also have methods for directional operations, like:

Whim's ILayoutEngine does not have the concept of a "primary area". However, this can be provided by ILayoutEngine implementations - for example, the SliceLayoutEngine.

Implementations of Whim's ILayoutEngine should be immutable. This was done to support functionality like previewing changes to layouts before committing them, with the Layout Preview plugin. In comparison, workspacer's ILayoutEngine implementations are mutable.

Commands

Whim has a command system with common functionality, which makes it easier to interact with at a higher level. The command system is used by different components, like the IKeybindManager and Command Palette.

The command palette in Whim is also more powerful than the one in workspacer, using a port of the Visual Studio Code command palette fuzzy search algorithm.

Appearance

Whim is built on top of WinUI 3 instead of Windows Forms. This makes it easier to have a more modern-looking UI, and means it's possible for users to specify styling using XAML - see Styling.