Commit graph

582 commits

Author SHA1 Message Date
Chris Feng
2efd7495d9 Avoid unnecessary focus changes when creating/killing buffers
* exwm-input.el (exwm-input--skip-buffer-list-update): New internal
variable for skipping the next 'buffer-list-update'.
(exwm-input--on-buffer-list-update): Skip when
`exwm-input--skip-buffer-list-update` is set.

* exwm-manage.el (exwm-manage--manage-window): Set
`exwm-input--skip-buffer-list-update` when creating/killing buffers.
2018-12-16 00:00:00 +00:00
James Ferguson
e6892216a6 Only call exwm-randr-screen-change-hook on new event sequence number
Multiple event callbacks are triggered per physical monitor plug event.
This de-duplicates the events triggering the running of the hook.
2018-12-05 08:21:05 -05:00
Chris Feng
58f7916619 ; Improve debug logs. 2018-12-02 00:00:00 +00:00
Chris Feng
fe8274ca7e Bump version to 0.21 2018-12-01 00:00:00 +00:00
Chris Feng
38e343ff07 Avoid unnecessary keyboard grab/ungrab in char-mode
* exwm-input.el (exwm-input--cache-event): Optimize the handling of
single event global key by not grabbing/ungrabbing the keyboard.
2018-11-25 00:00:00 +00:00
Chris Feng
786c2b4f7d Fallback to the first monitor as the primary one
* exwm-randr.el (exwm-randr--get-monitors): When no primary monitor is
specified, pick the first one.
2018-11-18 00:00:00 +00:00
Chris Feng
dc3b86d1b8 Add support for 'managed' per-application configuration
* exwm-manage.el (exwm-manage-configurations): Add a new value type
'managed' to allow users to specify whether a certain X window should
be managed or not.
(exwm-manage--manage-window): Use it.
2018-11-18 00:00:00 +00:00
Chris Feng
882a628daa Automatically refresh RandR settings
* exwm-randr.el (exwm-randr--last-timestamp): New variable recording
last seen timestamp after requesting `GetMonitors'.
(exwm-randr--get-monitors): Use it.
(exwm-randr--on-ScreenChangeNotify): Do not refresh any more.
(exwm-randr--on-Notify): New function for handling `CrtcChangeNotify'
and `OutputChangeNotify' events.
(exwm-randr--on-ConfigureNotify): New function for handling
`ConfigureNotify' event.
(exwm-randr--init): Add listeners for additional events.
2018-11-18 00:00:00 +00:00
Chris Feng
5fde63cc45 Avoid activating already active X windows
* exwm.el (exwm--on-ClientMessage): On receiving `_NET_ACTIVE_WINDOW'
events, check if the requested X windows are already active.
2018-11-18 00:00:00 +00:00
Chris Feng
d650159648 Fix wrong stacking order of tiling X windows
* exwm-manage.el (exwm-manage--on-MapNotify): Avoid restacking tiling
X windows on the top when force triggering hierarchy change events.
2018-11-11 00:00:00 +00:00
Chris Feng
9dcfff568f Expose `exwm-randr-refresh' public interface
* exwm-randr.el (exwm-randr-refresh): New public interface allowing
users to manually refresh when RandR settings are changed output EXWM.
(exwm-randr--refresh): Made obsolete.
2018-11-11 00:00:00 +00:00
Chris Feng
e597ab4f78 Add support for RandR 1.5 monitor
* exwm-randr.el (exwm-randr-workspace-monitor-plist): New user option
for specifying which monitor each workspace should be displayed on.
(exwm-randr-workspace-monitor-plist): Made obsolete.
(exwm-randr--get-monitors): New function for fetching active monitors.
(exwm-randr--refresh): Adapted to use monitor.
(exwm-randr--init): Now requires RandR 1.5.

* exwm-randr.el:
* exwm-workspace.el: Rename `output' to `monitor'.
2018-11-04 00:00:00 +00:00
Chris Feng
fec85bb72a Select more sensible buffers after creating new windows
* exwm-layout.el (exwm-layout--refresh-other)
(exwm-layout--refresh-workspace): When filling vacated windows
select more sensible buffer by calling `switch-to-next-buffer' for
newly created windows.
2018-11-04 00:00:00 +00:00
Adrián Medraño Calvo
cd7b32d1c2 Hide minibuffer upon receiving any event
* exwm-input.el (exwm-input--event-hook): New variable.
(exwm-input--on-ButtonPress, exwm-input--on-KeyPress): Run
`exwm-input--event-hook'.
* exwm-workspace.el (exwm-workspace--init, exwm-workspace--exit):
Hide minibuffer upon noticing an event.
2018-11-03 12:00:00 +00:00
Adrián Medraño Calvo
0dd909a11b Stop hiding the minibuffer when a message is being displayed
* exwm-workspace.el (exwm-workspace--echo-area-maybe-clear): New
function that postpones hiding the minibuffer when it's displaying
a message.
(exwm-workspace--on-echo-area-dirty): Use it.
2018-11-03 12:00:00 +00:00
Adrián Medraño Calvo
dbccda22a6 Merge branch 'medranocalvo/fix-input-mode-after-fullscreen' into externals/exwm 2018-10-24 12:00:00 +00:00
Adrián Medraño Calvo
eb91ee2c77 Restore keyboard grabbing after exiting fullscreen
Recover the difference between the input mode selected by the user and
actual one, which might be transient.  This was inadvertently removed in
recent changes.

* exwm-core.el (exwm--selected-input-mode): New variable.
* exwm-input.el (exwm-input-grab-keyboard)
(exwm-input-release-keyboard): Use it.
* exwm-layout.el (exwm-layout-unset-fullscreen): Return to the
selected input mode.
2018-10-21 12:00:00 +00:00
Adrián Medraño Calvo
dba1ed94c2 Do away with `exwm-input--input-mode'
* exwm-input.el (exwm-input--update-mode-line): Remove.
(exwm-input--on-ButtonPress, exwm-input--on-KeyPress)
(exwm-input--update-mode-line, exwm-input-toggle-keyboard): Use
`exwm--input-mode' variable directly.
2018-10-21 12:00:00 +00:00
Chris Feng
01b0b54c04 Fix single workspace invisible problem with Xephyr
* exwm-workspace.el (exwm-workspace-switch): On startup EXWM switches
to workspace 0 by force so the rest code can not assume the frames
before and after a switch different.
2018-10-21 00:00:00 +00:00
Chris Feng
449cd9d379 Bump version to 0.20 2018-10-14 00:00:00 +00:00
Chris Feng
98847a9cda Merge branch 'medranocalvo/reduce-workspace-switch-flicker' into externals/exwm 2018-10-14 00:00:00 +00:00
Chris Feng
5c9fcc0cd4 Merge branch 'medranocalvo/fix-minibuffer-only-focus-jump' into externals/exwm 2018-10-14 00:00:00 +00:00
Adrián Medraño Calvo
24287f2691 Reduce flicker when switching workspaces
* exwm-workspace.el (exwm-workspace-switch): Hide the old
workspace after having shown the new one when switching to avoid
flicker.
2018-10-08 12:00:00 +00:00
Adrián Medraño Calvo
57d0e9e1d3 Support binding mouse events in line-mode
* exwm-input.el (exwm-input--event-passthrough-p): Predicate
checking whether an event should be forwarded to Emacs.
(exwm-input--on-KeyPress-line-mode): Use it.
* exwm-input.el (exwm-input--cache-event): Protect against
translations swallow the event.
* exwm-input.el (exwm-input--on-ButtonPress-line-mode)
(exwm-input--on-ButtonPress-char-mode): New functions.
(exwm-input--on-ButtonPress): Forward bound mouse events to Emacs
when in line-mode.
2018-10-08 12:00:00 +00:00
Adrián Medraño Calvo
c9984ca216 Fix focus jumps with minibuffer-only frames
* exwm-input.el (exwm-input--update-focus): Focus the minibuffer's
frame, which is different than that of the
`minibuffer-selected-window' on minibuffer-only frames.
(exwm-input--on-minibuffer-setup, exwm-input--init)
(exwm-input-exit): Remove unneeded function.
2018-10-08 12:00:00 +00:00
Adrián Medraño Calvo
dff1ef6a3c Simplify input handling
No functional change.

* exwm-input.el (exwm-input--current-input-mode): New function
indicating keyboard input mode.
(exwm-input--on-KeyPress, exwm-input--update-mode-line): Use
`exwm-input--current-input-mode'.
(exwm-input-grab-keyboard, exwm-input-release-keyboard)
(exwm-input--update-mode-line): Simplify.

* exwh-core.el (exwm--on-KeyPress): Remove variable, use
`exwm--keyboard-grabbed' and `exwm-input--current-input-mode'
instead.
2018-10-08 12:00:00 +00:00
Chris Feng
472f7cb82b Simplify debugging and fix dynamic-scoping `eval'
* exwm-core.el (exwm-debug): New global minor mode to replace
`exwm-debug-on' and `exwm-debug-toggle'.

* exwm-manage.el (exwm-manage--get-configurations): Use
lexical-scoping `eval'.
2018-09-16 00:00:00 +00:00
Chris Feng
5903080b6e Merge branch 'medranocalvo/restack-after-map' into externals/exwm 2018-09-09 00:00:00 +00:00
Chris Feng
05977d05ff Merge branch 'medranocalvo/xcb-logging' into externals/exwm 2018-09-09 00:00:00 +00:00
Chris Feng
72bba1176c ; Minor fixes for Calvo's patch set. 2018-09-09 00:00:00 +00:00
Adrián Medraño Calvo
6978c1f45c Restack X-Windows after being mapped to ensure EnterNotify events fire
* exwm-manage.el (exwm-manage--on-MapNotify, exwm-manage--init):
Restack X windows after being mapped in order to ensure they receive
an EnterNotify event (does not happen under XQuartz).
2018-09-04 12:00:00 +00:00
Adrián Medraño Calvo
ac1372eb11 Command for toggling debugging output
* exwm-core.el (exwm-debug-toggle): New function for toggling
debugging output.
(exwm-mode-map): Use it.
2018-09-04 12:00:00 +00:00
Adrián Medraño Calvo
3419337f52 Substitute overlapping keybindings
* exwm-core.el (exwm-mode-map): Change keybindings to avoid
overlap.
2018-09-04 12:00:00 +00:00
Adrián Medraño Calvo
74ef19ff44 Use XELB's debugging facilities
* exwm-debug.el: Move to XELB as `xcb-debug'.
* exwm-core.el (exwm--log): Use it.
(exwm--log): Support switching debugging output at runtime.
2018-09-04 12:00:00 +00:00
James Ferguson
dd57c5eebb Explicitly specify frame for cursor warping conditional 2018-09-02 16:18:06 +08:00
James Ferguson
2399a0bb22 Fix cursor warping conditional for cursor left of frame 2018-09-02 16:18:06 +08:00
Adrián Medraño Calvo
5f6b866cfe Refresh layout after activating/deactivating workspaces
* exwm-workspace.el (exwm-workspace--set-active): Refresh layout
after activating or deactivating workspaces.

* exwm-layout.el (exwm-layout--refresh-workspace): Hide X windows on
inactive workspaces.
2018-08-30 12:00:00 +00:00
Chris Feng
2b1ed2ce70 Merge branch 'medranocalvo/fix-x-window-vanish' into externals/exwm 2018-08-19 00:00:00 +00:00
Chris Feng
be10e261cc Merge branch 'medranocalvo/exwm-log-buffer' into externals/exwm 2018-08-19 00:00:00 +00:00
Adrián Medraño Calvo
d4a772f536 ; Comment layout algorithm. 2018-08-19 00:00:00 +00:00
Adrián Medraño Calvo
29f2289a75 Consistently name helper windows
* exwm.el (exwm--init-icccm-ewmh): Avoid naming the root window.
(exwm--wmsn-acquire): Use the symbol name in the window name.
* exwm-systemtray.el (exwm-systemtray--embedder-window): Rename
`exwm-systemtray--embedder' consistency.
(exwm-systemtray--init):  Use symbol names in the window name.
2018-08-19 00:00:00 +00:00
Chris Feng
b6a3b7b3ad ; Unimportant tweaks 2018-08-19 00: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
Adrián Medraño Calvo
33dec8d1a3 Trace more functions 2018-08-13 12:00:00 +00:00
Adrián Medraño Calvo
ac600f0916 Commands for interacting with the log buffer remotely
* exwm-debug.el (exwm-debug--clear, exwm-debug--mark): New
functions.
2018-08-13 12:00:00 +00:00
Adrián Medraño Calvo
8d15a39c4d Print log output to an EXWM-specific messages buffer
Using `message' to log debugging information is cumbersome, as the output
appears constantly in the minibuffer, obscuring prompts and other information.
In the case of long messages, it might resize the minibuffer, which causes EXWM
to perform additional actions due to the log output.

This change reimplements EXWM debug logging using a separate
buffer (*EXWM-DEBUG*).  Basic functionality, like scrolling when point is at the
end of the buffer is maintained.

* exwm-core.el (exwm--log): Use `exwm-debug--message' instead of
`message'.  Prefix all messages with the name of the function.
Make FORMAT-STRING argument optional.

* exwm-debug.el: New file.
(exwm-debug-buffer): New variable holding the buffer where debug
messages are output to.
(exwm-debug--message): New function printing a message to
`exwm-debug-buffer'.
(exwm-debug--backtrace): New function printing a backtrace.
2018-08-13 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