News Migration Tutorial herbstluftwm(1) herbstclient(1)

herbstluftwm NEWS — History of user-visible changes

Release 0.7.1 on 2018-08-09

  • Many bugfixes:

    • Fix Xlib race condition


    • etc

  • New setting: verbose

  • Fix the initial floating position of new windows by taking their position relative to the nearest hlwm monitor.

  • new example scripts:


Release 0.7.0 on 2016-02-04

  • Handle EWMH request _NET_WM_MOVERESIZE more conform

  • Make tag objects accessible by their index

  • Automatically unmanage desktop windows (e.g. xfdesktop), and force them to stay below all other windows.

  • new command: close_and_remove

  • new herbstclient flags: --last-arg --print0

  • new example scripts:




    • (new subcommand "select_here")

Release 0.6.2 on 2014-03-27

Two bug fixes:

  • A crash has been fixed. It could be triggered by changing a non-callback settings attribute e.g. settings.raise_on_focus

  • The dialog re-mapping-problem has been fixed. So now, applications can show the same dialogs again after the dialog has been closed (e.g. the connection window of qjackctl).

Release 0.6.1 on 2014-03-25

  • directional shift of floating windows

  • fix crash of directional focus

  • document theme.minimal

Release 0.6.0 on 2014-03-19

  • Add window decorations, configurable via the theme-object

  • The tag attributes curframe_windex and curframe_wcount have been removed, they are replaced by the more general attributes frames.focus.windex frames.focus.wcount.

  • new example script:

  • if swap_monitors_to_get_tag is set to 0, then focus the other monitor if the desired tag is shown on another monitor instead of doing nothing

  • new split mode: auto

  • new attribute monitors.count indicating the number of monitors

  • new settings object with an attribute for each setting.

  • directional focus for floating clients, i.e. switch between floating windows via focus left|right|up|down. It also raises the freshly focused window.

  • directional monitor focusing

  • new detect_monitors flags: --list -l --no-disjoin while detect_monitors does disjoin_rects on the detected monitors per default.

  • For each client a keymask can be given. A keymask is a regular expression, that is matched against the string representation of a keybinding. If it matches, the keybinding is enabled for this client, otherwise not. The default is an empty keymask ("") that matches all keybindings, so no bindings are masked out by default. A keymask is a client attribute, and can be set by a client rule.

  • add completion to the mousebind command

  • add mouse function call to call commands on mouse button press

  • add setting update_dragged_clients

  • new rule consequence: monitor

  • new command: try

  • new command: silent

Release 0.5.3 on 2013-12-24

  • make window floating faster, by dropping old motion events

  • new rule flag: prepend

  • close now accepts an arbitrary window id as a parameter

  • Also allow decimal window ids for commands accepting a window id, like raise, jump, close

  • new split modes, i.e. parameters to the split command: bottom, right (indicating the relative location of the new empty frame)

  • new split mode: explode

  • make fraction parameter for the split command optional

  • respect size hints in floating and tiling mode

  • new setting: frame_transparent_width

  • frame_bg_transparent: instead of copying the pixmap from the root window achieve transparency by cutting out a rectangle from the center of frames using the Shape Extension of X.

  • Make respecting of sizehints configurable for tiling and floating mode via the client properties sizehints_tiling and sizehints_floating

  • new setting: pseudotile_center_threshold

  • new command: cycle_frame

  • new object attribute type: color

Release 0.5.2 on 2013-06-23


  • cycle_all now raises the focused client.

  • focus a client on its tag after moving it there (by shift_to_monitor or move)

  • disallow focus_follows_mouse if the focus change hides another window (e.g. an pseudotiled window in the max layout). In that case an extra click is required to change the focus.

  • new command complete_shell for posix shell specific completion

  • add completion for the rule command

  • add completion for keycombinations in keybind

  • add completion for setenv, getenv and unsetenv

  • the hook consequence now also tells the window id that triggerd the rule

  • new command: echo

  • new commands: true false

  • rule labels: rules can be given a label with the label property. The label can be printed to stdout using the printlabel flag to the rule command. Unrule command accepts a label to remove all rules with that label.

  • new command: list_rules

  • allow true/false as arguments to commands accepting boolean values. This affects the commands: floating, fullscreen, pseudotile and rule.

  • new command: new_attr, remove_attr, get_attr, set_attr

  • new command: substitute, sprintf, mktemp

Release 0.5.1 on 2013-01-05


  • new command: use_previous

  • Makefile: new target: install-nodoc — install without man/html-docs

  • fixup of the + flag in tag_status

  • fixup of the example script

  • announce it if the tag changes due to remove_monitor

Release 0.5.0 on 2012-12-31

Incompatible changes:

  • The setting focus_follows_shift has been removed. The behaviour now is set like it were set to 1; the focus always follows the shift now.


  • new settings: wmname, mouse_recenter_gap

  • hook togglehidepanel: the default also accepts the parameters "current" or a certain monitor index

  • align captions of the tree output (commands: layout, stack) better by inserting a space in front of every caption

  • let new clients and monitors (and other items that are stacked) appear on top of the stacking order

  • chaining of commands now is possible with the new command: chain

  • new commands: and or negate

  • tag switch locking for monitors. The new lock_tag and unlock_tag commands control, whether tag switching operations for a monitor are allowed.

  • set the urgent flag on _NET_WM_STATE_DEMANDS_ATTENTION

  • clear the urgent flag on window focus

  • new command: list_padding

  • new commands: getenv/setenv/unsetenv

  • new rule: ewmhnotify

  • floating, fullscreen, pseudotile: default to toggle if no argument is given

  • add error messages for herbstclient

  • new commands: focus_edge, shift_edge

  • new command: shift_to_monitor

  • optional names for monitors, new command rename_monitor

  • new consequence: hook

  • new example script: which provides a q3-like terminal

Release: 0.4.1 on 2012-08-30

This fixes some build system issues:

  • Separate CFLAGS and CPPFLAGS

  • Add patch level to the version number

  • Only use MACH if really needed

  • Honor CPPFLAGS

Release: 0.4 on 2012-08-18

Changes that require user interaction on upgrade:

  • the setting window_gap is now called frame_gap

Other changes:

  • new setting window_gap which controls the gap between windows within one frame

  • new setting: frame_padding

  • new command: close_or_remove

  • new flags - and % for tag_status for multi monitor handling

  • toggle default panel on hook togglehidepanel

  • new setting: window_border_urgent_color

  • new command: set_monitors

  • new command: disjoin_rects

  • new command: jumpto

  • use clock_get_time on systems with a mach kernel (typically Mac OS X). This lets herbstluftwm run on Mac systems again.

  • fix many memory leaks.

  • new command line flag --skip-visible for use_index and move_index

  • new command: detect_monitors, to detect Xinerama monitors automatically

  • new ewmh feature: react to _NET_WM_DESKTOP client messages

  • new command: rotate

  • new setting: auto_detect_monitors

  • only one Makefile for herbstluftwm and herbstclient. The herbstclient binary now is put in the main directory.

  • new settings: smart_frame_surroundings and smart_window_surroundings

  • new settings: window_border_inner_color and window_border_inner_width

  • new settings: frame_border_inner_color and frame_border_inner_width

  • new option --skip-invisible for cycle_all

  • cycle_layout now offers to cycle through a custom list of layouts

  • add completion for +1 and -1 to many commands: cycle, cycle_all, cycle_monitor, cycle_layout, split and use_index

  • start system wide autostart file if there is no working user defined one

  • clients are restored (i.e. managed) from _NET_CLIENT_LIST even if they are not visible

  • do proper window and monitor stacking, this also introduces:

    • new command: raise_monitor

    • new setting: raise_on_focus_temporarily

    • new command: stack

  • new command: focus_nth

  • new command: bring

  • respect the WM_TAKE_FOCUS atom, this fixes keyboard focus issues with many (mostly Java/swing based) applications

  • new rule consequences: switchtag, ewmhrequests

Release 0.3 on 2012-04-12


  • new hook: window_title_changed

  • hook focus_changed now also reports the window title

  • the setting ignore_class is removed, because this also can be done by rules. You can replace a line like set ignore_class "$foo" in your autostart by rule class~"$foo" manage=off

  • remember the value when toggling a setting and restore it on next toggle

  • new command: cycle_value

  • new commands: use_index, move_index

  • recursive command completion for keybind

  • new rule condition: title

  • in the default autostart:

    • new green and gray color theme

    • use/move was replaced by use_index/move_index

  • proper signal handling: map all windows on SIGINT,SIGQUIT,SIGTERM

  • respect the initial fullscreen state of new clients on startup (as it is set in the _NET_WM_STATE property)

  • monitor locking mechanism, i.e. a new setting: monitors_locked with its accessors lock and unlock and the command line argument -l and --locked

Release 0.2 on 2012-01-25

Small bugfixes and major features:

  • new command: monitor_rect

  • let fork less often

  • set clients to fullscreen

  • new client layouting algorithm: grid layout

  • new command argument: keyunbind --all

  • new command: pseudotile (tile client but keep its floating size)

  • new command: list_keybinds

  • new hook: focus_changed

  • client rules with:

    • condition: class

    • condition: instance

    • condition: pid

    • condition: maxage

    • condition: windowtype

    • condition: windowrole

    • operator: = (equals)

    • operator: ~ (regex-matching)

    • flag: once

    • flag: not (negation of conditions)

    • consequence: tag

    • consequence: focus

    • consequence: index (where to insert a new client in layout tree)

    • consequence: pseudotile

    • consequence: fullscreen

    • consequence: manage (whether window will be managed)

  • basic ewmh features:


    • the following client messages are handled: _NET_ACTIVE_WINDOW _NET_CURRENT_DESKTOP _NET_WM_STATE: fullscreen

Release 0.1 on 2011-10-02

Initial release. The tiling algorithm and many things are working. But some things like EWMH or rules aren’t implemented yet (See BUGS file for a list of planned features). Currently implemented features are:

  • basic tiling concept

  • floating mode (with border snapping)

  • calling herbstluftwm internal commands with herbstclient

  • change keybindings/mousebindings at runtime

  • change/get settings (e.g. colors) at runtime

  • add/remove monitors at runtime

  • wmexec into other window manager

  • dump/load tiling layouts to/from a string

  • bash/zsh tab completion for herbstclient

  • hook system: let herbstclient listen for internal events

  • provide an easy way to build an own panel (using herbstclient hooks/commands) (there is also an example

  • give information about urgent state of clients