Emacs X Window Manager
Find a file
Fran Ley 4970d6ad4e More selectively ignore top and bottom struts
For the case of vertical columns of workareas, top and bottom struts
should only apply to workareas containing the respective edge of the
strut offset.

To simplify, imagine three monitors arranged vertically and one
workarea per display:

  +-------+
  |   1   | 2000x1000 px
  +-------+
  |   2   | 2000x1000 px
  +-------+
  |   3   | 2000x1000 px
  +-------+

In sexp form: ((0 0 2000 1000) (0 1000 2000 1000) (0 2000 2000 1000))
where each element represents a workarea as x, y, width, height

And example struts of the form (offset-type offset (x-start x-end))
a.) (top 42 (0 2000))
b.) (top 1042 (0 2000))
c.) (top 2042 (0 2000))
d.) (bottom 42 (0 2000))
e.) (bottom 1042 (0 2000))
f.) (bottom 2042 (0 2000))

Workareas adjusted for struts before this change:
a.) ((0 42 2000 958) (0 1000 2000 1000) (0 2000 2000 1000))
b.) ((0 1042 2000 -42) (0 1042 2000 958) (0 2000 2000 1000))
c.) ((0 2042 2000 -1042) (0 2042 2000 -42) (0 2042 2000 958))
d.) ((0 0 2000 1000) (0 1000 2000 1000) (0 2000 2000 902))
e.) ((0 0 2000 1000) (0 1000 2000 902) (0 2000 2000 -98))
f.) ((0 0 2000 902) (0 1000 2000 -98) (0 2000 2000 -1098))

Note that a. and d. are sensible, while b., c., e., and f. are quite
user unfriendly.

After this change, the same adjusted workareas are:
a.) no change
b.) ((0 0 2000 1000) (0 1042 2000 958) (0 2000 2000 1000))
c.) ((0 0 2000 1000) (0 1000 2000 1000) (0 2042 2000 958))
d.) no change
e.) ((0 0 2000 1000) (0 1000 2000 902) (0 2000 2000 1000))
f.) ((0 0 2000 902) (0 1000 2000 1000) (0 2000 2000 1000))

The intent is to allow dock type windows such as typical status bars
to occupy space in a workarea on any of a set of vertically arranged
displays without occluding the other workareas due to the limitations
of the X spec regarding strut offsets.

Note that this behaviour conflicts with EWMH 1.3:

> Struts MUST be specified in root window coordinates, that is,
they are *not* relative to the edges of any view port or Xinerama
monitor.

but is accepted by multiple WMs.  See:

- https://blog.martin-graesslin.com/blog/2016/08/panels-on-shared-screen-edges/
- https://mail.gnome.org/archives/wm-spec-list/2009-November/msg00005.html
- https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/22

* exwm-workspace.el (exwm-workspace--update-workareas): Assume
vertical struts apply from the monitor boundary when they cross
them.

Copyright-paperwork-exempt: yes
2023-06-09 00:00:00 +00:00
.elpaignore Code cleanups 2015-09-06 17:18:48 +08:00
.gitignore Minor fixes for packaging 2015-09-21 13:31:57 +08:00
exwm-background.el Add a module for setting the X background 2022-11-22 00:00:00 +00:00
exwm-cm.el Update copyright year to 2021 2021-10-29 00:00:00 +00:00
exwm-config.el Update copyright year to 2021 2021-10-29 00:00:00 +00:00
exwm-core.el Merge branch 'drop-client-p' into externals/exwm 2022-11-22 00:00:00 +00:00
exwm-floating.el Hide tab-bar on floating windows 2022-07-26 07:39:37 -07:00
exwm-input.el Reduce logging verbosity 2022-11-22 00:00:00 +00:00
exwm-layout.el Use active-minibuffer-window' rather than minibuffer-window' 2022-11-22 00:00:00 +00:00
exwm-manage.el Update copyright year to 2021 2021-10-29 00:00:00 +00:00
exwm-randr.el Update copyright year to 2021 2021-10-29 00:00:00 +00:00
exwm-systemtray.el Pick the correct line height for the systemtray 2022-11-22 00:00:00 +00:00
exwm-workspace.el More selectively ignore top and bottom struts 2023-06-09 00:00:00 +00:00
exwm-xim.el Merge branch 'tumashu.github.com/master' into externals/exwm 2021-10-30 00:00:00 +00:00
exwm.el Merge branch 'drop-client-p' into externals/exwm 2022-11-22 00:00:00 +00:00
LICENSE Add license file 2022-02-10 00:00:00 +00:00
README.md Add input method support 2019-02-06 00:00:00 +00:00
xinitrc Add input method support 2019-02-06 00:00:00 +00:00

Emacs X Window Manager

EXWM (Emacs X Window Manager) is a full-featured tiling X window manager for Emacs built on top of XELB. It features:

  • Fully keyboard-driven operations
  • Hybrid layout modes (tiling & stacking)
  • Dynamic workspace support
  • ICCCM/EWMH compliance
  • (Optional) RandR (multi-monitor) support
  • (Optional) Builtin system tray
  • (Optional) Builtin input method

Please check out the screenshots to get an overview of what EXWM is capable of, and the user guide for a detailed explanation of its usage.

Note: If you install EXWM from source, it's recommended to install XELB also from source (otherwise install both from GNU ELPA).