Commit graph

388 commits

Author SHA1 Message Date
Adrián Medraño Calvo
4c67a459c9 ; Comment layout algorithm. 2018-08-16 12:00:00 +00:00
Adrián Medraño Calvo
f820217d00 Split exwm-layout--refresh into three functions
* exwm-layout.el (exwm-layout--refresh): Split in three functions
for clarity.
(exwm-layout--refresh-workspace, exwm-layout--refresh-other)
(exwm-layout--refresh-floating):  New functions.
2018-08-16 12:00:00 +00:00
Adrián Medraño Calvo
633065ad55 Don't assume order of `get-buffer-window-list' results
It only guarantees that the first result *if* the buffer appears on the
selected window.
2018-08-16 12:00:00 +00:00
Adrián Medraño Calvo
11fecb5186 Use more explicit argument for excluding minibuffers
* exwm-layout.el (exwm-layout--refresh): Use a more intuitive
value for specifying exclusion of minibuffers.
2018-08-16 12:00:00 +00:00
Adrián Medraño Calvo
5c1aa4dc31 Consider windows of the frame being refreshed, not the selected one at the time exwm-layout--refresh runs
* exwm-layout.el (exwm-layout--refresh): Consider windows of the
frame being refreshed instead of the selected frame.
2018-08-16 12:00:00 +00:00
Chris Feng
4d43e3119a Avoid using `set-mouse-position' to warp pointer
* exwm-workspace.el (exwm-workspace-switch): Warp pointer with the
WarpPointer request.
2018-08-12 00:00:00 +00:00
Chris Feng
e6527227b3 Exclude irrelevant X windows when refreshing
* exwm-layout.el (exwm-layout--refresh): Only check X windows on the
workspace being examined.
2018-08-12 00:00:00 +00:00
Chris Feng
aebcb0344f When mapping an X window check if it's on an active workspace
* exwm-layout.el (exwm-layout--refresh): Avoid mapping X windows on
inactive workspaces.
2018-08-05 00:00:00 +00:00
Chris Feng
13a14579cc Fix issues with destroying full screen X windows
* exwm-manage.el (exwm-manage--unmanage-window): Set the Emacs window
of an full screen X window as non-dedicated before killing its buffer
so as not to cause other side effects.
2018-07-29 00:00:00 +00:00
Chris Feng
7e5750392c Bump version to 0.19 2018-07-18 00:00:00 +08:00
Chris Feng
f45e9b9273 Fix XTerm crash on startup
* exwm-input.el (exwm-input--set-focus): Applications like XTerm
crashes on receiving WM_TAKE_FOCUS so only send it to X windows
accepting it.
2018-07-15 00:00:00 +08:00
Chris Feng
bc5f0b3ffa ; Use `derived-mode-p'. 2018-07-15 00:00:00 +08:00
Chris Feng
1364f80f09 Add support for automatic cursor warping
* exwm-workspace.el (exwm-workspace-warp-cursor): New user option.
(exwm-workspace-switch): Automatically warp cursor after workspace
switch.
2018-07-15 00:00:00 +08:00
Chris Feng
c1b6a296a8 Shrink Emacs frames with X request
* exwm-manage.el (exwm-manage--on-ConfigureRequest): There's a problem
in shrinking Emacs frames with `set-frame-width' and
`set-frame-height'.  Use `exwm--set-geometry' instead.
2018-07-15 00:00:00 +08:00
Chris Feng
6be729847e Also send a WM_TAKE_FOCUS when setting focus with SetInputFocus
* exwm-input.el (exwm-input--set-focus): Send an extra WM_TAKE_FOCUS
event to workaround the key replay issue with Xorg 1.20 when keyboard
is grabbed.
2018-07-15 00:00:00 +08:00
Chris Feng
4bb2d87a8d Revert "Grab & Replay key events with XI2 and XTEST"
This reverts commit 0680be104f.
2018-07-15 00:00:00 +08:00
Chris Feng
0680be104f Grab & Replay key events with XI2 and XTEST
; A change has been made in Xorg server 1.20 that replaying a key
; event with keyboard grabbed would generate extra focus change and
; enter/leave events.  This basically breaks line-mode for apps like
; Firefox.  This commit reimplements the grab & replay functionality
; with XI2 and XTEST.

* exwm-input.el (exwm-input--devices): New variable for caching slave
keyboards.
(exwm-input--update-devices): Update it and re-grab keys if necessary.
(exwm-input--on-Hierarchy): Event listener for the Hierarchy event
that would in turn call `exwm-input--update-devices' to update the
cache.

* exwm-input.el (exwm-input--on-KeyPress): Use XI2 KeyPress events.
(exwm-input--on-KeyRelease): Event listener for the KeyRelease events.
(exwm-input--grab-global-prefix-keys): Use XI2 and also select
KeyRelease events.
(exwm-input--on-KeyPress-line-mode): Use XI2 KeyPress events and
replay key events with XTEST.
(exwm-input--on-KeyPress-char-mode, exwm-input--grab-keyboard)
(exwm-input--release-keyboard): Use XI2 KeyPress events.

* exwm-input.el (exwm-input--init): Initialize the XI2 and XTEST
extensions; add listeners for XI2 KeyPress, KeyRelease and Hierarchy
events.
2018-06-18 22:33:38 +08:00
Chris Feng
b75c89cae2 Fix systemtray position when menu-bar / tool-bar is enabled
* exwm-systemtray.el (exwm-systemtray--on-workspace-switch)
(exwm-systemtray--on-randr-refresh): Take menu-bar / tool-bar into
account when placing systemtray.
2018-05-27 23:29:36 +08:00
Chris Feng
df8de92113 Provide a fallback value for X window geometry
* exwm-manage.el (exwm-manage--update-geometry): Ditto.
2018-05-20 16:14:01 +08:00
Chris Feng
0037cba87b Avoid hiding full screen X windows unexpectedly
* exwm-layout.el (exwm-layout-set-fullscreen)
(exwm-layout-unset-fullscreen): Set the Emacs window of a full screen
X window dedicated to its buffer such that newly created X windows
won't replace it.
2018-05-13 23:57:36 +08:00
Paul Eggert
ff4ae82fd7 Port to 32-bit Emacs on master branch 2018-04-15 14:53:01 -07:00
Chris Feng
87db8b42a3 Preserve keyboard grab state after quitting fullscreen mode
* exwm-layout.el (exwm-layout-set-fullscreen)
(exwm-layout-unset-fullscreen, exwm-layout-toggle-fullscreen): Ditto.
2018-04-01 23:38:48 +08:00
Chris Feng
fbdcd42b0a Add support for various key processing variables
* exwm-input.el (exwm-input--mimic-read-event): New function for
handling `extra-keyboard-modifiers' and `keyboard-translate-table'.
(exwm-input--cache-event): Do not unread events here.
(exwm-input--on-KeyPress-line-mode)
(exwm-input--on-KeyPress-char-mode): Compare with preprocessed events
and unread raw ones.

* exwm-input.el (exwm-input--on-KeyPress-line-mode): Add support for
`overriding-terminal-local-map'.
2018-04-01 23:30:19 +08:00
Chris Feng
f4aa8389fc Fix a compatibility issue with Emacs 24
* exwm-core.el (exwm--defer): `time-add' in Emacs 24 only accept lists.
2018-03-23 23:57:18 +08:00
Chris Feng
10eb27eddc Fix local simulation keys
* exwm-input.el (exwm-input--on-KeyPress-line-mode): Do not test
`exwm-mode-map' to see if a key should be forwarded to Emacs as it's
overridden when local simulation keys are present.
2018-03-23 23:55:28 +08:00
Chris Feng
02b1be7160 Avoid entering line-mode after exit minibuffer
* exwm-input.el (exwm-input--on-pre-command): Keys should be forwarded
to the X window (if its Emacs window is currently selected) after
exiting the minibuffer.
2018-03-23 23:53:05 +08:00
Chris Feng
b6d660042e Add workspace support in per-application configurations
* exwm-manage.el (exwm-manage-configurations)
(exwm-manage--manage-window): Allow to specify which workspace an
applications should be created on.
2018-03-23 23:51:32 +08:00
Chris Feng
5448fb75fa Bump version to 0.18 2018-03-14 01:20:00 +08:00
Chris Feng
8db0a78382 Fix wrong exwm-active frame parameters
* exwm-randr.el (exwm-randr--refresh): Intern output names.
2018-03-14 01:14:36 +08:00
Chris Feng
3f6c609a2b Fix regressions
(exwm-init): Do not signal an error on startup.

* exwm-floating.el (exwm-floating-toggle-floating):
* exwm-input (exwm-input-send-next-key)
(exwm-input-send-simulation-key):
* exwm-layout (exwm-layout-set-fullscreen)
(exwm-layout-unset-fullscreen, exwm-layout-toggle-fullscreen): Fix
incorrect use of `cl-return-from'.
2018-03-10 17:28:43 +08:00
Chris Feng
cb8706f91c Delay setting workspaces active/inactive
* exwm-randr.el (exwm-randr--refresh): Set workspaces active/inactive
after their geometries have been updated.
2018-03-10 00:12:47 +08:00
Chris Feng
2f430db735 Minor fixes 2018-03-09 01:06:39 +08:00
Adrián Medraño Calvo
7aae6efdcd Support replacing and being replaced by other window managers
* exwm.el (exwm--on-SelectionClear, exwm--init-icccm-ewmh)
(exwm--exit-icccm-ewmh, exwm--wmsn-acquire, exwm--wmsn-release):
Get the window manager selection; die when it is cleared.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
350950abfc Clean up when failing to start
* exwm.el (exwm-init, exwm-exit): Clean up when failing to start.
(exwm--exit-icccm-ewmh): Stop deleting root window properties on
exit: delete function.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
cf98e3d921 Name all helper windows created by EXWM
* exwm-workspace.el (exwm-workspace--add-frame-as-workspace)
(exwm-workspace--init):
* exwm-input.el (exwm-input--init):
* exwm-floating.el (exwm-floating--set-floating): Name created
helper windows with prefix "EXWM".
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
587a8cad1d Add interactive commands for starting and stopping EXWM
* exwm.el (exwm-reset): Remove autoload cookie.
(exwm-init, exwm-exit): Add autoload cookie and interactive
declaration.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
ce8af83ffb Disconnect on `exwm--exit'
* exwm.el (exwm-exit): Disconnect `exwm-connection'.
* exwm.el (exwm-init, exwm-exit, exwm--confirm-kill-emacs)
* exwm-workspace.el (exwm-workspace--set-desktop-geometry)
(exwm-workspace--init, exwm-workspace--exit): Move
`confirm-kill-emacs' to this exwm.el`.  Delegate disconnection of
`exwm--connection' to `exwm-exit'.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
a2b6cfb878 * exwm.el (exwm--exit): Drop SubstructureRedirect on root window. 2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
a51be88c1e Cleanup exwm-workspace on exit
* exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Move
deinitialization to `exwm-workspace--exit'.
(exwm-workspace--exit): Reparent minibuffer frame to the root
window, turn workspace frames into regular frames, restore frame
parameters.
(exwm-workspace--init): Reset the fullscreen counter.
(exwm-workspace--remove-frame-as-workspace): Reset fullscreen
state.
(exwm-workspace--init-minibuffer-frame)
(exwm-workspace--exit-minibuffer-frame): New functions configuring
the minibuffer frame.
(exwm-workspace--init, exwm-workspace--exit): Use the above
functions to configure the minibuffer frame.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
33a1a28476 Dissociate frame creation and deletion handlers from the actual configuration of frames as workspaces
* exwm-workspace.el (exwm-workspace--add-frame-as-workspace)
(exwm-workspace--remove-frame-as-workspace): Limit functionality
to the configuration of frames as workspaces.
(exwm-workspace--on-after-make-frame)
(exwm-workspace--on-delete-frame): Callbacks run on frame creation
and deletion that may use or stop them from being used as
workspaces.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
d3be64e743 Factor out `exwm-randr--on-ScreenChangeNotify'
* exwm-randr.el (exwm-randr--on-ScreenChangeNotify)
(exwm-randr--init): Factor ScreenChangeNotify event callback into
a function.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
4f7abf4bfd Cleanup exwm-manage on exit
* exwm-manage.el (exwm-manage--unmanage-window): Map windows when
quitting.
(exwm-manage--exit): Remap all windows.

* exwm.el (exwm--exit): Reorder deinitialization sequence so that
windows are reparented before the workspaces are removed.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
c00331a7e6 Cleanup exwm-layout on exit
* exwm-layout.el (exwm-layout--exit): Remove
`window-pixel-width-before-size-change' hook.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
81529c2e89 Cleanup exwm-input on exit
* exwm-input.el (exwm-input--exit): Remove missing hook reset window
variable.
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
4660e040a0 Prevent duplicate keys in frameset-filter-alist
* exwm-workspace.el (exwm-workspace--init):
* exwm-randr.el (exwm-randr--init): Prevent duplicate keys in
frameset-filter-alist
2018-03-06 00:00:00 +00:00
Adrián Medraño Calvo
dd0f10775a Support disabling default `exwm-mode-map' bindings
* exwm-input.el (exwm-input--on-KeyPress-line-mode): Use
`lookup-key' to check whether a the event is defined in the
`exwm-mode-map' keymap.
2018-03-06 00:04:36 +08:00
Chris Feng
57328b439f Avoid switching buffer when moving an X window already in place
* exwm-workspace.el (exwm-workspace-move-window): This is required
when calling `exwm-workspace-move-window' from `exwm-layout--refresh'.
2018-03-04 21:59:19 +08:00
Chris Feng
46fe764634 Fix fullscreen mode after switching workspace and back
* exwm-layout.el (exwm-layout--show): Always set an X window in
fullscreen mode the size in fullscreen.
(exwm-layout-unset-fullscreen): Leave the fullscreen mode first.

* exwm-layout.el (exwm-layout--fullscreen-p): New function telling
whether the current buffer is in fullscreen mode.
(exwm-layout-set-fullscreen, exwm-layout-unset-fullscreen)
(exwm-layout-toggle-fullscreen):
* exwm-manage.el (exwm-manage--manage-window)
(exwm-manage--on-ConfigureRequest):
* exwm-workspace.el (exwm-workspace-switch, exwm-workspace-swap)
(exwm-workspace-move):
* exwm.el (exwm-reset, exwm--on-ClientMessage): Use it.
2018-03-04 12:29:24 +08:00
Chris Feng
277377c718 Fix local simulation keys
* exwm-input.el (exwm-input--set-simulation-keys): Try the local
binding first do not clear the hash table (rely on GC).
2018-03-04 12:21:53 +08:00
Chris Feng
7013b0122a Add header-line format support in per-application configurations
* exwm-manage.el (exwm-manage-configurations):
* exwm-floating.el (exwm-floating--set-floating)
(exwm-floating--unset-floating): Allow customizing header-line format
for floating/tiling X windows.
2018-03-04 01:39:12 +08:00