Commit graph

464 commits

Author SHA1 Message Date
Chris Feng
37098a4009 Fix detection of modifier keys in Emacs events
* exwm-input.el (exwm-input--grab-global-prefix-keys)
(exwm-input--fake-key):
* exwm-xim.el (exwm-xim--handle-forward-event-request): X11 allows
multiple combinations of KEYSYM-MODIFIERS to generate a same
KEYSYM, thus the result of an Emacs event to KEYSYM-MODIFIERS
conversion is not necessarily unique.  Previously the result of
`xcb:keysyms:event->keysym' is misused as the modifiers returned is
actually the ones should be consumed.
2019-08-05 00:00:00 +00:00
Chris Feng
2c0dcc46cd Remove hard-coded keys in menu
* exwm-core.el (exwm-mode-menu): Avoid hard-coding keys in
`exwm-mode-menu'.
2019-08-05 00:00:00 +00:00
Chris Feng
c579476536 Fix `after-focus-change-function' not working
* exwm-workspace.el (exwm-workspace--original-handle-focus-in)
(exwm-workspace--original-handle-focus-out): Store the original
`handle-focus-{in,out}'.
(exwm-workspace-switch): Now that `handle-focus-{in,out}' has been
updated to call other stuffs like `after-focus-change-function', we
can no longer run `focus-{in,out}-hook' only.
2019-07-28 00:00:00 +00:00
Sebastian Wålinder
0a3dde042a Added option to have a key that ends exwm-input-send-next-key
* exwm-input.el (exwm-input-send-next-key): Accept an optional end key.
2019-07-14 00:00:00 +00:00
Chris Feng
fe8ee3c578 Fix 'Attempt to delete a surrogate minibuffer frame' error
* exwm-workspace.el (exwm-workspace--get-remove-frame-next-workspace):
New function automatically moves X window elsewhere before removing a
workspace; also returns the destination workspace.
(exwm-workspace--prompt-delete, exwm-workspace-delete)
(exwm-workspace--remove-frame-as-workspace): Use it.
* exwm.el (exwm--on-ClientMessage): Use it.
2019-06-30 00:00:00 +00:00
Chris Feng
605b0a9575 Allow panel to hide floating X windows
* exwm.el (exwm--on-ClientMessage): Use `exwm-floating-hide' to hide X
windows on receiving `WM_CHANGE_STATE' events.
2019-06-16 00:00:00 +00:00
Chris Feng
aa92c7be8c Avoid workspace switch loop with `mouse-autoselect-window' enabled
* exwm-input.el (exwm-input--last-enter-notify-position): New variable
storing last mouse position.
(exwm-input--on-EnterNotify): Avoid switching workspace when mouse
position is not changed (the event is a result of a workspace switch).
2019-06-16 00:00:00 +00:00
Chris Feng
8a54504152 Handle (t . EVENT) format events in exwm-xim
* exwm-xim.el (exwm-xim--handle-forward-event-request): Ditto.
2019-06-09 00:00:00 +00:00
Chris Feng
75833e0c53 Fix character loss with exwm-xim
* exwm-xim.el (exwm-xim--handle-forward-event-request): Events unread
can either be reused by input methods or forwarded to X windows as is.
2019-06-09 00:00:00 +00:00
Chris Feng
672a5e2a23 Fix unreading 'return event
* exwm-xim.el (exwm-xim--event-pending): Drop unused variable.
(exwm-xim--handle-forward-event-request): Convert 'return back to ?\n
to avoid error.
2019-06-02 00:00:00 +00:00
Chris Feng
fe2336a11e Fix auto commit issue with input methods
* exwm-xim.el (exwm-xim--handle-forward-event-request): Factored out
from `exwm-xim--on-request' to make auto commit work.  With input
methods providing candidates the first candidate can be implicitly
selected if no further matching is possible.  The last event would be
stored in `unread-command-events' (at least for `quail-input-method')
and should be reused by the input method.
(exwm-xim--on-request): Use it.
2019-06-02 00:00:00 +00:00
Chris Feng
f70bdb5868 Add compatibility mode for legacy servers
* exwm-randr.el (exwm-randr--compatibility-mode): Indicating whether
RandR 1.5 is supported by the server.
(exwm-randr--init): Set it.
(exwm-randr--get-monitor-alias): Split out from
exwm-randr--get-monitors for reuse.
(exwm-randr--get-outputs): New function for retrieving RandR 1.2
outputs when RandR 1.5 is not supported.
(exwm-randr-refresh): Call `exwm-randr--get-outputs' in compatibility
mode.
2019-04-14 00:00:00 +00:00
Chris Feng
4ac0d6c1fd Clarify the usage of `exwm-manage-configurations' 2019-04-14 00:00:00 +00:00
Chris Feng
bd99d8cf7f Support monitor mirroring
* exwm-randr.el (exwm-randr--get-monitors): Also return an alist of
monitor name aliases.
(exwm-randr-refresh): Unify mirrored monitor names.
2019-03-24 00:00:00 +00:00
Chris Feng
73b4d6f966 ; Follows up 2019-03-24 00:00:00 +00:00
Stefan Monnier
81e52263a7 * exwm-workspace.el: Use closures rather than `(lambda ...) 2019-03-17 10:47:28 -04:00
Chris Feng
397ca5497e Remove loading order dependency on `mouse-autoselect-window'
* exwm-core.el (exwm--get-client-event-mask): Renamed from
`exwm--client-event-mask' and used as a function.
* exwm-floating.el (exwm-floating--unset-floating):
* exwm-layout.el (exwm-layout--hide):
* exwm-manage.el (exwm-manage--manage-window): Use it.
2019-03-17 00:00:00 +00:00
Chris Feng
dd96fffb52 Add extra keys for selecting workspace
* exwm-workspace.el (exwm-workspace--switch-map)
(exwm-workspace--init): Avoid initializing the keymap when loading.
(exwm-workspace--init-switch-map): Initialize
`exwm-workspace--switch-map' and also add extra keybindings when
`exwm-workspace-index-map' has been customized.
2019-03-17 00:00:00 +00:00
Chris Feng
b12c67de2e Make replacing existing WM optional
* exwm.el (exwm-replace): New user option for specifying whether to
replace existing WM.
(exwm-init): Use it.
(exwm--wmsn-acquire, exwm-init): Do not print warning message when
user gives up replacing.
* exwm-core.el (exwm--wmsn-replace): Remove dead code.
2019-03-10 00:00:00 +00:00
Chris Feng
88c690217a Bump version to 0.22.1 2019-02-16 00:00:00 +00:00
Chris Feng
2434bdb57d Fix compatibility issue with Emacs 25
* exwm-input.el (exwm-input--unread-event): `string-version-lessp' is
not available on Emacs 25.
2019-02-11 00:00:00 +00:00
Chris Feng
b1f74203be Bump version to 0.22 2019-02-10 00:00:00 +00:00
Chris Feng
225c68d4ce Merge branch 'retain-echo-area-until-input' of https://github.com/medranocalvo/exwm into medranocalvo/retain-echo-area-until-input 2019-02-06 00:00:00 +00:00
Chris Feng
e157282038 Merge branch 'ieure/default-simulation-keys' into externals/exwm 2019-02-06 00:00:00 +00:00
Chris Feng
0f7269c4ec Add input method support
; The code is basically refactored from
; https://github.com/ch11ng/exim to get better maintenance.

* exwm-xim.el: New module making Emacs's builtin input methods usable
for interacting with X windows.

* exwm-core.el (exwm--intern-atom): New function for intern X11 atoms.
* exwm-input.el (exwm-input--init):
* exwm-manage.el (exwm-manage--init): Use it.
2019-02-06 00:00:00 +00:00
Chris Feng
97b1fb7c13 Do the same for `exwm-input-global-keys' 2019-02-06 00:00:00 +00:00
Ian Eure
ec108a61dc Cleanup simulation key config issues
* exwm-input.el (exwm-input-simulation-keys): Original key only has
one option, so probably shouldn’t be a `choice` type; Move the
"User-defined" key value to the top, since that’s the one someone is
most likely to want).

* exwm-config.el (exwm-config-default): Only set custom vars if there
isn’t a saved value for them.
2019-02-06 00:00:00 +00:00
Chris Feng
44629818ba Scan for existing X windows only after running `exwm-init-hook'
* exwm.el (exwm-init): Delay the call to `exwm-manage--scan' since
managing existing X windows too early may result in issues like losing
input focus.
2019-02-05 00:00:00 +00:00
Chris Feng
65d371d55f Fetch necessary properties before checking per-app configurations
* exwm-manage.el (exwm-manage--manage-window): Fetch X window title &
protocols so they can be available when checking per-application
configurations.
2019-02-01 00:00:00 +00:00
Chris Feng
993ca8a13a Update copyright year to 2019 2019-02-01 00:00:00 +00:00
Chris Feng
4f854e9fff Fix issue with managed tray icons
* exwm-input.el (exwm-input--on-ButtonPress): Replay button events
destined for managed tray icons.
2019-01-20 00:00:00 +00:00
Chris Feng
404c94568d Automatically iconify floating X windows
* exwm-layout.el (exwm-layout-auto-iconify): New user option to
specify whether to automatically iconify X windows.
(exwm-layout--auto-iconify): Automatically iconify floating X windows
when its main X window (if any) is iconified.
(exwm-layout--show, exwm-layout--hide): Use it.
2018-12-30 00:00:00 +00:00
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