Skip to content

Awesome v4.3

Latest
Compare
Choose a tag to compare
@psychon psychon released this 28 Jan 07:42
· 1654 commits to master since this release
v4.3
5da5d36

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.string now has a endswith and startswith functions
  • luarocks modules 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() and save_to_svg() methods.
  • The client objects now have a immobilized_horizontal and immobilized_vertical property to know if they can currently be moved or resized (for example, it is set to false when maximized)
  • gears.timer objects now have a call_now method.
  • The hotkey popup now supports termite keybindings
  • The menubar loads faster
  • Wiboxes have an input_passthrough property to send mouse clicks to the object below.
  • The taglist and tasklist now support the declarative constructor syntax
  • There is now an awesome.pixbuf_to_surface to convert a GdkPixbuf to a cairo surface.
  • The notifications icon can now be resized and limited with notification_icon_size
  • A gears.sort module has been added with graph resolution
  • awesome-client now 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_border theme option to hide the border for maximized clients.
  • The client startup_id field is now writable. This is useful when the client native implementation is not present or too buggy to be used.
  • The awful.widget.prompt now has a with_shell option to allow Bash/ZSH aliases, function and environment variables to be used in commands.
  • The awful.titlebars now have a fallback_name when a client has no name property.
  • Clients now have a motif_wm_hints property 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_titlebar property to expose when a client has client side titlebars (also known as decorations and CSD)
  • The hotkey popup now has a show_awesome_keys option.
  • The awful.widget.prompt now has more of the awful.prompt constructor 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.manual layout 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.once
  • awful.spawn.single_instance
  • awful.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.separator widget was added.
  • It is now possible to set spacing widgets for all layouts.
  • The awful.widget.taglist and awful.widget.tasklist now support creating custom widgets for each elements.
  • A new popup widget allows to bypass most of the boilerplate code and easily display widgets on the screen.
  • The awful.widget.layoutlist allows 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.rules is 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 textclock is 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.lua uses request::activate to set the focus. This fixes many corner case such as unfocusable clients getting the focus.
  • Calling awful.spawn with a set of properties is now more reliable.
  • awful.key.execute is 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 nil instead. This could break code that uses pcall to check if a screen exists. This code now needs to be changed to check for a nil return 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.