Awesome v4.3 is the third release of the 4.x API. It comes after one and a half years of little fixes and improvements. Awesome v4.2 was very stable thanks to everybody's effort to unit test everything. Given no major bug warranted a new release, this one adds a few large features while preserving full compatibility with existing user configurations.
New features
gears.stringnow has aendswithandstartswithfunctionsluarocksmodules are now automatically available in Awesome- A generic way to create or use widgets has been added (
wibox.widget.base.make_widget_from_value) - It is now possible to connect to signals from all instances of a widget at once
- The calendar widget now supports margins
- The documentation has a new theme
- Wiboxes now have
to_widget()andsave_to_svg()methods. - The client objects now have a
immobilized_horizontalandimmobilized_verticalproperty to know if they can currently be moved or resized (for example, it is set to false when maximized) gears.timerobjects now have acall_nowmethod.- The hotkey popup now supports
termitekeybindings - The menubar loads faster
- Wiboxes have an
input_passthroughproperty to send mouse clicks to the object below. - The
taglistandtasklistnow support the declarative constructor syntax - There is now an
awesome.pixbuf_to_surfaceto convert aGdkPixbufto a cairo surface. - The notifications icon can now be resized and limited with
notification_icon_size - A
gears.sortmodule has been added with graph resolution awesome-clientnow runs code in a protected context- The widget documentation has been extended to be more friendly to new users.
- There is a new
beautiful.maximized_hide_bordertheme option to hide the border for maximized clients. - The
clientstartup_idfield is now writable. This is useful when the client native implementation is not present or too buggy to be used. - The
awful.widget.promptnow has awith_shelloption to allow Bash/ZSH aliases, function and environment variables to be used in commands. - The
awful.titlebars now have afallback_namewhen a client has nonameproperty. - Clients now have a
motif_wm_hintsproperty to reflect some hints using the Motif X11 property extension. This is used by some modern toolkits including GTK. - Clients now have a
requests_no_titlebarproperty to expose when a client has client side titlebars (also known as decorations and CSD) - The hotkey popup now has a
show_awesome_keysoption. - The
awful.widget.promptnow has more of theawful.promptconstructor arguments. - It is now possible to set a list of layouts per tag instead of a single global one.
- There is now a
awful.layout.get_tag_layout_index()function to get the index of the current layout in the global layout list (awful.layout..layouts) - The
wibox.layout.manuallayout now has an:insert()method.
Better DPI handling
The screen now has a read/write dpi property and awful.screen.set_auto_dpi_enabled(true) can be used to automatically set the DPI for many Awesome elements. Please note that it is not backward compatible and breaks many widget. As AwesomeWM always used pixels as the de-facto metric for sizes, enabling auto_dpi will break most existing configs. However, for people who use such setup, it might be worth speding some time to fix their config.
Extendable awful.rules providers and better awful.spawn functions
There is two new functions called awful.rules.add_rule_source and awful.rules.remove_rule_source. They allow to create a dependency graph for where a rule comes from and which provider has the priority when setting it.
Previously, there were the normal properties, awful.rules.high_priority_properties and awful.rules.delayed_properties. This didn't scale and could not represent all corner cases. Those table still exist and are still honored, but there is now a system that can handle the full complexity of the property priority graph.
This is used by default in awful.spawn. The reliability of attaching properties to spawn calls has been improved. On top of this, three new functions were added
awful.spawn.onceawful.spawn.single_instanceawful.spawn.raise_or_spawn
They allow to specify that a command should only have one running instance. This works across restart too, so all hacks to handle restarting Awesome are no longer required.
Note that the client.startup_id isn't supported by all applications and a Linux-specific workaround is recommended to improve the reliability of the awful.spawn functions.
A brand new keygrabber API
The keygrabber module API was rebuilt from scratch to make it more usable. The previous API was very low level, very close to how it actually work, but was disconnected from how keygrabbers are used in a window manager. Getting anything done with the previous API required a lot of boilerplate code and had many corner cases to handle. The new API has built-in support for the most common use cases and is fully declarative.
A new GTK color palette based theme
A new theme has been added. It reads the GTK theme colors and use them in the wibar, menu and titlebar. It helps create an uniform look and feel between the window manager and client applications with minimal efforts.
Widgets improvements
- The
wibox.widget.separatorwidget was added. - It is now possible to set
spacingwidgets for all layouts. - The
awful.widget.taglistandawful.widget.tasklistnow support creating custom widgets for each elements. - A new
popupwidget allows to bypass most of the boilerplate code and easily display widgets on the screen. - The
awful.widget.layoutlistallows to easily display and select the client layout from a widget.
Noteworthy fixes
- There is no longer an error when a tag defined by name in
awful.rulesis not found. - The menubar is now generally more robust thanks to a variety of improvements
- Many dead links in the documentation have been fixed
- The
textclockis now generally more robust with formatting issues, timezones and declarative constructors. - The last screen is never removed. Previously, some laptops removed all screens during suspend, causing all clients to go to the first tag or getting lost completely.
- The new default
rc.luausesrequest::activateto set the focus. This fixes many corner case such as unfocusable clients getting the focus. - Calling
awful.spawnwith a set of properties is now more reliable. awful.key.executeis now much more reliable.
Behavior changes
- Previously, when accessing a screen by RandR output name caused a Lua error when no output with the given name exists. This was changed to now return
nilinstead. This could break code that usespcallto check if a screen exists. This code now needs to be changed to check for anilreturn instead. In practice it is unlikely anyone will notice the difference. - In the previous release, unfocusable clients might also not be raised. It was decided that this is a bug and the default behavior was changed.