News Migration Tutorial herbstluftwm(1) herbstclient(1)

herbstluftwm NEWS — History of user-visible changes

Current git version

  • Formerly, double dots in object paths were allowed (similar to double slashes in file paths in unix). Right now, they are only allowed at the end (which is necessary for the tab-completion of attr):

    • monitors is valid

    • monitors. is valid

    • monitors.. is valid

    • monitors.by-name. is valid

    • monitors..by-name. is invalid

  • Many boolean style settings were formely of type int. Now, these are boolean settings.

  • The toggle command only works for boolean settings. For the former behaviour for int-typed settings, use cycle_value.

  • Writing %% in the sprintf format string now gives a literate %, just as printf. Formely it stayed %%.

  • The keybind command now accepts all valid key symbols, even if they are not present on the current keyboard layout at the time of setup.

  • detect_monitors has an additional --list-all parameter

  • do not change the focus (for focus_follows_mouse=1) when an unmanaged dialog (e.g. a rofi menu or a notification) closes.

  • monitor detection via xrandr

Release 0.7.2 on 2019-05-28

  • When herbstluftwm is not running and herbstclient is called, the absent herbstluftwm is detected instead of hanging forever.

  • Close window on _NET_CLOSE_WINDOW. This makes closing windows via ewmh panels work.

  • Fix return code of remove_attr

  • Fix error when unmanaging clients

  • Some typo fixes in the documentation

Release 0.7.1 on 2018-08-09

  • Many bugfixes:

    • Fix Xlib race condition

    • Fix _NET_DESKTOP_VIEWPORT

    • 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:

    • float-maximize.sh

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:

    • maximize.sh

    • toggledualhead.sh

    • windowmenu.sh

    • wselect.sh (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: scratchpad.sh

  • 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

Changes:

  • 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

Changes:

  • 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 q3terminal.sh

  • 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.

Changes:

  • new settings: wmname, mouse_recenter_gap

  • hook togglehidepanel: the default panel.sh 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: q3terminal.sh 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

Changes:

  • 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 panel.sh 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 properties will be set: _NET_ACTIVE_WINDOW _NET_CLIENT_LIST _NET_CURRENT_DESKTOP _NET_DESKTOP_NAMES _NET_NUMBER_OF_DESKTOPS _NET_SUPPORTING_WM_CHECK _NET_WM_DESKTOP _NET_WM_STATE: fullscreen

    • 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 panel.sh)

  • give information about urgent state of clients