Skip to content

Version 0.2 end of life

Compare
Choose a tag to compare
@sminez sminez released this 29 Oct 15:56
· 180 commits to develop since this release
33af1c4

⚠️ The rewrite branch is being merged to the develop ⚠️

Users pulling this repo directly from the mainline branch will see this as a breaking change

The original API of penrose was written fairly quickly(!) and has a number of issues that make future development difficult:

  • Basing the original design on the dwm code base lead to a very C like API
  • State management is overly complicated
  • Hooks are overly complicated
  • Testing core window manager operations is a lot harder than it should be
  • Far too many macros (I wrote penrose originally in part to learn how to write proc-macros...)
  • Default impls used the rust-XCB crate rather than the wonderful x11rb from @psychon

A near total rewrite for v0.3 is reaching a usable state which moves over to an API that is more suited for ongoing development and extension by users of the crate. In particular the APIs are now designed with composition in mind as a rich set of primatives and a clear split between "pure" logical operations on the internal state and code that then updates things on the X side based on diffs of that pure state.

What does this mean for me?

I like things the way they are!

🏷️ Please pin your usage of penrose to this tag if you are intending on making use of the original penrose API but be aware that there will be no more development taking place on this version of the code.

How do I start making use of the new APIs?

The rewrite branch is being merged to mainline following the creation of this EOL release and is now in a usable state. I've been using it as my daily driver for a few weeks now and it is relatively stable to live in so long as you are only making use of the top level APIs shown in the examples directory.

🐛 That said, there are bugs. There are some issues around tracking mouse based focus changes in a multi-monitor set up and I suspect that it will be easier than it should be to shoot yourself in the foot if you try something clever beyond what is shown in the current examples.

I am planning on writing up the docs and more examples for the API now that it is stablising but for now please be aware that I am making frequent changes to APIs in order to address issues as they crop up. If you are interested in taking things for a spin and providing feedback then please do! Just be aware that I am not yet aiming for stability.

When will the new APIs be stable?

There are a couple of final high profile bugs / behaviours that I want to correct before pushing this live to crates.io. Once those are addressed I'll be publishing a 0.3.0 version to crates which will mark the new stable API.

👋 Happy window managing!