2019-06-16 Chris Feng 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 Chris Feng 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-09 Chris Feng Handle (t . EVENT) format events in exwm-xim * exwm-xim.el (exwm-xim--handle-forward-event-request): Ditto. 2019-06-09 Chris Feng 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-02 Chris Feng 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 Chris Feng 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-04-14 Chris Feng 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 Chris Feng Clarify the usage of `exwm-manage-configurations' 2019-03-24 Chris Feng 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 Chris Feng ; Follows up 2019-03-17 Stefan Monnier * exwm-workspace.el: Use closures rather than `(lambda ...) 2019-03-17 Chris Feng 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 Chris Feng 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-10 Chris Feng 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-02-16 Chris Feng Bump version to 0.22.1 2019-02-11 Chris Feng Fix compatibility issue with Emacs 25 * exwm-input.el (exwm-input--unread-event): `string-version-lessp' is not available on Emacs 25. 2019-02-10 Chris Feng Bump version to 0.22 2019-02-06 Chris Feng Merge branch 'retain-echo-area-until-input' of https://github.com/medranocalvo/exwm into medranocalvo/retain-echo-area-until-input 2019-02-06 Chris Feng Do the same for `exwm-input-global-keys' 2019-02-06 Ian Eure 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 Chris Feng 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-05 Chris Feng 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-01 Chris Feng 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 Chris Feng Update copyright year to 2019 2019-01-20 Chris Feng Fix issue with managed tray icons * exwm-input.el (exwm-input--on-ButtonPress): Replay button events destined for managed tray icons. 2018-12-30 Chris Feng 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-16 Chris Feng 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-05 James Ferguson 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-02 Chris Feng ; Improve debug logs. 2018-12-01 Chris Feng Bump version to 0.21 2018-11-25 Chris Feng 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-18 Chris Feng 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 Chris Feng 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 Chris Feng 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 Chris Feng 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-11 Chris Feng 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 Chris Feng 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-04 Chris Feng 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 Chris Feng 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-03 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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-10-21 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Chris Feng 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-14 Chris Feng Bump version to 0.20 2018-10-14 Chris Feng Merge branch 'medranocalvo/reduce-workspace-switch-flicker' into externals/exwm 2018-10-14 Chris Feng Merge branch 'medranocalvo/fix-minibuffer-only-focus-jump' into externals/exwm 2018-10-08 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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-09-16 Chris Feng 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-09 Chris Feng Merge branch 'medranocalvo/restack-after-map' into externals/exwm 2018-09-09 Chris Feng ; Minor fixes for Calvo's patch set. 2018-09-04 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo Substitute overlapping keybindings * exwm-core.el (exwm-mode-map): Change keybindings to avoid overlap. 2018-09-04 Adrián Medraño Calvo 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-02 James Ferguson Explicitly specify frame for cursor warping conditional 2018-09-02 James Ferguson Fix cursor warping conditional for cursor left of frame 2018-08-30 Adrián Medraño Calvo 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-19 Chris Feng Merge branch 'medranocalvo/fix-x-window-vanish' into externals/exwm 2018-08-19 Chris Feng Merge branch 'medranocalvo/exwm-log-buffer' into externals/exwm 2018-08-19 Adrián Medraño Calvo ; Comment layout algorithm. 2018-08-19 Adrián Medraño Calvo 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 Chris Feng ; Unimportant tweaks 2018-08-16 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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-13 Adrián Medraño Calvo Trace more functions 2018-08-13 Adrián Medraño Calvo Commands for interacting with the log buffer remotely * exwm-debug.el (exwm-debug--clear, exwm-debug--mark): New functions. 2018-08-13 Adrián Medraño Calvo 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-12 Chris Feng Avoid using `set-mouse-position' to warp pointer * exwm-workspace.el (exwm-workspace-switch): Warp pointer with the WarpPointer request. 2018-08-12 Chris Feng Exclude irrelevant X windows when refreshing * exwm-layout.el (exwm-layout--refresh): Only check X windows on the workspace being examined. 2018-08-05 Chris Feng 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-07-29 Chris Feng 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-18 Chris Feng Bump version to 0.19 2018-07-15 Chris Feng 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 Chris Feng ; Use `derived-mode-p'. 2018-07-15 Chris Feng 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 Chris Feng 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 Chris Feng 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 Chris Feng Revert "Grab & Replay key events with XI2 and XTEST" This reverts commit 0680be104f9394e39dd55b5c4e33b9b7e4e77926. 2018-06-18 Chris Feng 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-05-27 Chris Feng 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-20 Chris Feng Provide a fallback value for X window geometry * exwm-manage.el (exwm-manage--update-geometry): Ditto. 2018-05-13 Chris Feng 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-04-15 Paul Eggert Port to 32-bit Emacs on master branch 2018-04-01 Chris Feng 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 Chris Feng 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-03-23 Chris Feng Fix a compatibility issue with Emacs 24 * exwm-core.el (exwm--defer): `time-add' in Emacs 24 only accept lists. 2018-03-23 Chris Feng 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 Chris Feng 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 Chris Feng 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-14 Chris Feng Bump version to 0.18 2018-03-14 Chris Feng Fix wrong exwm-active frame parameters * exwm-randr.el (exwm-randr--refresh): Intern output names. 2018-03-10 Chris Feng 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 Chris Feng Delay setting workspaces active/inactive * exwm-randr.el (exwm-randr--refresh): Set workspaces active/inactive after their geometries have been updated. 2018-03-09 Chris Feng Minor fixes 2018-03-06 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo * exwm.el (exwm--exit): Drop SubstructureRedirect on root window. 2018-03-06 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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 Adrián Medraño Calvo Cleanup exwm-layout on exit * exwm-layout.el (exwm-layout--exit): Remove `window-pixel-width-before-size-change' hook. 2018-03-06 Adrián Medraño Calvo Cleanup exwm-input on exit * exwm-input.el (exwm-input--exit): Remove missing hook reset window variable. 2018-03-06 Adrián Medraño Calvo 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 Adrián Medraño Calvo 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-04 Chris Feng 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 Chris Feng 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 Chris Feng 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 Chris Feng 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 Chris Feng Add prefix arguments support for various commands * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace-switch-create, exwm-workspace-move) (exwm-workspace-move-window): Add prefix arguments support. 2018-03-03 Chris Feng Add various per-application configurations * exwm-manage.el (exwm-manage-configurations): Add options for fullscreen mode and floating & tiling mode-line formats. (exwm-manage--manage-window): Add support for configuring line-mode/char-mode, prefix keys, simulation keys and fullscreen mode. * exwm-floating.el (exwm-floating--set-floating): Add support for configuring the geometry, mode-line format and border width of a floating X window. (exwm-floating--unset-floating): Add support for configuring the mode-line format of a tiling X window. 2018-03-03 Johan Johansson <96.bryal@gmail.com> Fix EXWM buffers not being hidden on workspace switch * exwm-workspace.el (exwm-workspace-switch, exwm-workspace-move-window): Use `equal' to compare RandR output names. 2018-03-02 Chris Feng Add initial support for per-application configurations * exwm-core.el (exwm--configurations): New buffer-local variable recording the configurations of an X window. * exwm-manage.el (exwm-manage-configurations): New user option as the per-application configurations. (exwm-manage--get-configurations): New function for fetching the configurations of this X window. (exwm-manage--manage-window): Fetch the configurations and check if the X window should be floating/tiling. 2018-03-02 Chris Feng Improve multi-monitor performance * exwm-randr.el (exwm-randr--refresh): Use GetScreenResourcesCurrent instead of GetScreenResources to avoid polling hardware changes. (exwm-randr--init): GetScreenResourcesCurrent requires RandR 1.3 . 2018-02-26 Chris Feng Make `exwm-manage-ping-timeout' a user option * exwm-manage.el (exwm-manage-ping-timeout): Now a user option. 2018-02-26 Chris Feng Forward keys defined in `exwm-mode-map' to Emacs by default * exwm-input.el (exwm-input-prefix-keys): Remove ?\C-c. (exwm-input--on-KeyPress-line-mode): * exwm-core.el (): Detect keys in `exwm-mode-map' in line-mode. 2018-02-26 Chris Feng Improve the Customize interface for simulation keys * exwm-input.el (exwm-input--set-simulation-keys): New function for actullay setting simulation keys. (exwm-input-simulation-keys, exwm-input-set-local-simulation-keys) (exwm-input--init): Use this instead of `exwm-input-set-simulation-keys'. (exwm-input-set-simulation-keys): Make obsolete. (exwm-input--read-keys): New function for reading an arbitrary key sequence. (exwm-input-set-simulation-key): New command for setting a new simulation key (which can be saved in the Customize interface). 2018-02-26 Chris Feng Add Customize interface for global keys * exwm-input.el (exwm-input--set-key): New function for actually setting the binding. (exwm-input-global-keys): New user option for customizing global keys. (exwm-input-set-key): Update `exwm-input-global-keys' and call `exwm-input--set-key' (exwm-input--init): Initialize global keys. 2018-02-24 Chris Feng Bump version to 0.17 2018-02-22 Chris Feng Hide blocked frames (they are visible with a compositor) * exwm-workspace.el (exwm-workspace--set-active): New function for setting the 'exwm-active' frame parameter and show/hide frames BTW. (exwm-workspace--active-p): New function checking whether a frame is active. (exwm-workspace--set-fullscreen, exwm-workspace-switch) (exwm-workspace-move-window): * exwm-randr.el (exwm-randr--refresh): Use them. * exwm-workspace.el (exwm-workspace-attach-minibuffer) (exwm-workspace--show-minibuffer, exwm-workspace--hide-minibuffer): Show/Hide the minibuffer frame. 2018-02-22 Chris Feng Mark active workspaces on each output * exwm-randr.el (exwm-randr--refresh): Mark active workspaces. * exwm-workspace.el (exwm-workspace-switch): Use the marks to show/hide X windows when switching workspace; do not update timestamp. (exwm-workspace-move-window): Use the marks to hide X windows after moving them. (exwm-workspace--init): Update `frameset-filter-alist'. 2018-02-22 Chris Feng Grab global keys on top-level X windows * exwm-input.el (exwm-input--on-CreateNotify): New function for grabbing global keys on newly created X windows. (exwm-input--update-global-prefix-keys): Grab global keys on top-level X windows instead of the root window. (exwm-input--grab-global-prefix-keys): New function for grabbing global keys on X windows. (exwm-input--release-keyboard): Grab global keys in char-mode. (exwm-input--init): Select CreateNotify events. * exwm-core.el (exwm--unlock): * exwm-input.el (exwm-input--on-FocusIn, exwm-input--init): Do not handle FocusIn events on the root window. 2018-02-20 Chris Feng Fix unexpected focus change after a global key binding is activated * exwm-core.el (exwm--unlock): Select FocusChange events on the root window. * exwm-input.el (exwm-input--on-FocusIn): Input focus should stay on the current workspace when the root window receives a FocusIn event. 2018-02-20 Chris Feng Use the 'exwm-randr-output' frame parameter to determine the output * exwm-randr.el (exwm-randr--refresh): Always set the name of primary output. * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace-move-window): Use 'exwm-randr-output' frame parameter to check if two frames are on the same output. 2018-02-20 Chris Feng Remove redundant code for fullscreen mode * exwm-manage.el (exwm-manage--unmanage-window) (exwm--on-ClientMessage): No need to modify workspace when an X window enters/leaves fullscreen mode. 2018-02-20 Chris Feng Add Customize interface for simulation keys * exwm-input.el (exwm-input-simulation-keys): New user option for setting simulation keys. (exwm-input--init): Initialize simulation keys from this variable. * exwm-input.el (exwm-input--simulation-prefix-keys) (exwm-input--on-KeyPress-line-mode) (exwm-input--update-simulation-prefix-keys) (exwm-input-set-simulation-keys, exwm-input-set-local-simulation-keys) (exwm-input-send-simulation-key): `exwm-input--simulation-keys' is now a hash table storing both simulation keys and prefix keys. (exwm-input--unset-simulation-keys): Clear the hash table. (exwm-input--exit): Use `exwm-input--unset-simulation-keys'. * exwm-core.el (exwm--kmacro-map, exwm-mode-menu): Adapt to the change of `exwm-input--simulation-keys'. * exwm-config.el (exwm-config-default): Update the example. 2018-02-19 Chris Feng Fix various issues with multi-monitor support * exwm-workspace.el (exwm-workspace-switch): Do not hide X windows when switching to a workspace on another output; update the timestamp (last switched to) of a workspace frame. (exwm-workspace-move-window): Do not hide an X window when moving it to an active workspace on another output. * exwm-floating.el (exwm-floating--set-floating): * exwm-layout.el (exwm-layout-set-fullscreen): * exwm-manage.el (exwm-manage--manage-window) (exwm-manage--on-ConfigureRequest): * exwm-systemtray.el (exwm-systemtray--refresh) (exwm-systemtray--init): Correct coordinate calculations. * exwm-workspace.el (exwm-workspace--current-width): Removed since no longer used. 2018-02-19 Chris Feng Support displaying floating X windows on all workspaces ; Setting _NET_WM_DESKTOP to 0xffffffff makes an X windows appearing ; on all desktops (EWMH). It's tricky to do it for tiling X windows ; so it's not implemented. * exwm-core.el (exwm--desktop): New buffer-local variable recording the value of _NET_WM_DESKTOP. * exwm-layout.el (exwm-layout--hide): Do not hide X windows with this property set to 0xffffffff. * exwm.el (exwm--update-desktop): New function for fetching the value of _NET_WM_DESKTOP and setting `exwm--desktop'. * exwm-manage.el (exwm-manage--manage-window): Use it. * exwm-workspace.el (exwm-workspace--set-desktop): Also update `exwm--desktop'. 2018-02-19 Chris Feng Add customization settings ; Also fix documentations. 2018-02-18 Chris Feng Make X windows container-less ; This is an attempt to make (managed) X windows container-less, i.e. direct children of the root window. This is mainly to make EXWM compatible with third-party compositors. Other issues like wrong absolute position should also get resolved by the way. The workspace containers ("virtual roots") are also removed. However Emacs frames are still wrapped in containers to avoid unexpected stack reordering. * exwm-cm.el: Make this module obsolete as EXWM supports third-party compositors now. * exwm-core.el (exwm--container): * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating, exwm-floating-hide) (exwm-floating--start-moveresize, exwm-floating--stop-moveresize) (exwm-floating--do-moveresize, exwm-floating-move): * exwm-input.el (exwm-input--update-focus): * exwm-layout.el (exwm-layout--show, exwm-layout--hide) (exwm-layout-set-fullscreen, exwm-layout-unset-fullscreen): * exwm-manage.el (exwm-manage--manage-window, exwm-manage--unmanage-window) (exwm-manage--kill-buffer-query-function, exwm-manage--kill-client): * exwm-workspace.el (exwm-workspace--set-fullscreen, exwm-workspace-switch) (exwm-workspace-move-window, exwm-workspace--add-frame-as-workspace) (exwm-workspace--remove-frame-as-workspace): Make adaptions for container-less X windows. * exwm-workspace.el (exwm-workspace--update-ewmh-props): * exwm.el (exwm--init-icccm-ewmh, exwm--exit-icccm-ewmh): No longer use virtual roots. * exwm-input.el (exwm-input--on-workspace-list-change) (exwm-input--update-global-prefix-keys, exwm-input--init, exwm-input--exit): From now on global key bindings are grabbed on the root window so it's no long required to re-grab them each time the workspace list changes. As a result `exwm-input--on-workspace-list-change' and its corresponding references are discarded. It remains to be seen if this change will raise input focus issues. * exwm-manage.el (exwm-manage--manage-window): Explicitly set the workspace for newly managed X windows. * exwm-floating.el (exwm-floating--set-floating): Avoid implicit reference to the current workspace. * exwm-core.el (exwm--set-geometry): New function for setting the geometry of an X window. * exwm-layout.el (exwm-layout--resize-container): Replaced by `exwm-layout--resize-container'. * exwm-core.el (exwm--guide-window): New global variable recording the guide X window. * exwm.el (exwm--init-icccm-ewmh): Set it. * exwm-input.el (exwm-input--post-init): New function containing staffs for initialization but should better get called after the event loop starts. * exwm.el (exwm-init): Use it. 2018-02-04 Chris Feng Avoid crashing Emacs by resizing its frame into 0x0 * exwm-floating.el (exwm-floating--do-moveresize): * exwm-layout.el (exwm-layout-enlarge-window): Resizing a frame into 0x0 crashes Emacs so additional checks are required. 2018-01-14 Chris Feng Support key translation in line-mode * exwm-input.el (exwm-input--translate): New function for translating keys according to `input-decode-map', `local-function-key-map' and `key-translation-map'. (exwm-input--cache-event): Use it. 2018-01-14 Chris Feng Raise docks after quitting full screen mode * exwm-layout.el (exwm-layout-unset-fullscreen): Raise docks lowered when entering full screen mode. 2017-12-31 Chris Feng ; Add missing autoload cookies. 2017-12-31 Chris Feng Add support for `mouse-autoselect-window' ; This feature requires both `mouse-autoselect-window` and ; `focus-follows-mouse' being set. Delaying autoselection is not ; supported yet. * exwm-core.el (exwm--client-event-mask): Select the EnterNotify event on each X window when `mouse-autoselect-window' is set. * exwm-input.el (exwm-input--on-EnterNotify): New function for making `mouse-autoselect-window' work on X windows. (exwm-input--init): Listen to EnterNotify event when `mouse-autoselect-window' is set. 2017-12-31 Chris Feng Update copyright year to 2018 2017-12-10 Chris Feng ; Eliminate a compilation warning. 2017-11-26 Chris Feng Re-grab global keys on keyboard update * exwm-input.el (exwm-input--on-keysyms-update): New function for re-grabbing global keys. (exwm-input--init): Register it to XELB. 2017-11-26 Chris Feng Bump version to 0.16 2017-11-24 Chris Feng Another fix for input focus issues * exwm-core.el (exwm--defer): * exwm-input.el (exwm-input--update-focus-defer): Avoid unnecessarily long delay. * exwm-input.el (exwm-input--on-FocusIn): Filter out FocusIn events generated as a result of grab/ungrab or when the keyboard is grabbed. 2017-11-24 Chris Feng Fix possible wrong context when killing buffers * exwm-manage.el (exwm-manage--unmanage-window): Make sure to use the correct context to read/set buffer-local variables when killing buffers. 2017-11-19 Chris Feng Fix various input focus issues * exwm-input.el (exwm-input--on-buffer-list-update): Cancel the frame redirection introduced by 421c0512f7. * exwm-input.el (exwm-input--on-buffer-list-update): Only ignore temp buffers just switched from. * exwm-input.el (exwm-input--update-focus-commit): New function for ensuring the input focus lock can always be released. (exwm-input--update-focus-defer, exwm-input--update-focus): Use it. * exwm-input.el (exwm-input--update-focus): No need to select frames; only transfer X input focus. * exwm-core.el (exwm--defer): New macro for correcting the use of `run-with-idle-timer' by taking `current-idle-time' into account. * exwm-input.el (exwm-input--update-focus-defer) (exwm-input--update-focus): * exwm-layout.el (exwm-layout--on-minibuffer-setup) (exwm-layout--on-echo-area-change): * exwm-manage.el (exwm-manage--unmanage-window) (exwm-workspace--prompt-delete): * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace--add-frame-as-workspace): Use it. 2017-11-19 Chris Feng Free unused X resources * exwm-cm.el (exwm-cm--paint-tree): Make sure the clip can be destroyed even the X window is in full screen mode. (exwm-cm--paint-transparent, exwm-cm--paint-background): Free pixmaps after creating pictures. 2017-11-19 Chris Feng Correct the detection of emacsclient * exwm.el (exwm-enable): Use `daemonp' instead of `display-graphic-p'. 2017-11-19 Chris Feng Merge branch 'kriyative/bugfix-selecting-deleted-buffer-error' into externals/exwm 2017-11-09 Chris Feng Be more precise when choosing the init hook * exwm.el (exwm-enable): Run `exwm-init' in `after-make-frame-functions' only for emacsclient and `window-setup-hook' only for ordinary sessions. 2017-11-09 Chris Feng Update the workarounds for `unread-command-events' * exwm-input.el (exwm-input--unread-event): Update the note. (exwm-input-send-next-key): Remove the workaround. 2017-11-05 Ram Krishnan Fix for "Selecting deleted buffer" exception 2017-11-05 Chris Feng Filter out events relating to temp buffers * exwm-input.el (exwm-input--on-buffer-list-update): Filter out events relating to temp buffers by detecting if temp-buffer is present. 2017-10-09 Chris Feng Fix systemtray applications crash when restarting * exwm-systemtray.el (exwm-systemtray--exit): Reparent out the tray embedder to protect tray icons. 2017-09-10 Chris Feng Avoid comparing raw button events * exwm-input.el (exwm-input--move-keysym, exwm-input--move-mask) (exwm-input--resize-keysym, exwm-input--resize-mask): Removed. (exwm-input--on-ButtonPress): Compare using Emacs events rather than raw X11 events or it would fail with num-lock no. (exwm-input--init): No longer cache raw keysym/state for button events. 2017-08-31 Chris Feng Update systemtray when initializing * exwm-systemtray.el (exwm-systemtray--init): Systemtray is not placed correctly when there's a panel launched before EXWM. 2017-08-31 Chris Feng Avoid reusing dedicated window * exwm-floating.el (exwm-floating--unset-floating): * exwm-manage.el (exwm-manage--on-MapRequest): Do not select a dedicated window for displaying a buffer. 2017-08-02 Chris Feng Bump version to 0,15 2017-07-16 Chris Feng Allow customizing workspace indexes * exwm-workspace.el (exwm-workspace-index-map): New variable for customizing workspace indexes. (exwm-workspace--update-switch-history): Use it. 2017-05-31 Chris Feng Allow switching to a workspace by selecting one X window on it * exwm-workspace.el (exwm-workspace-switch-to-buffer): Only allows it when `exwm-layout-show-all-buffers' is nil. 2017-05-30 Chris Feng Fix X display name comparison * exwm-workspace--add-frame-as-workspace (exwm-workspace--add-frame-as-workspace): Manually compare X display names as there's no built-in function handles this correctly. 2017-05-07 Chris Feng Bump version to 0.14 2017-05-07 Chris Feng Force repositioning floating Emacs frames * exwm-floating.el (exwm-floating--set-floating): Ditto. 2017-04-23 Chris Feng ; Do not cache events for non-`exwm-mode' buffers 2017-04-16 Chris Feng Avoid comparing X display names * exwm-workspace.el (exwm-workspace--add-frame-as-workspace): An X display name set by XELB can be different from (but equivalent with) the one set by Emacs. 2017-04-10 Chris Feng Only add graphic frames to `exwm-manage--frame-outer-id-list' * exwm-manage.el (exwm-manage--add-frame, exwm-manage--remove-frame): Add checks for graphic frames. 2017-03-05 Chris Feng Manually run `focus-in-hook' and `focus-out-hook' ; Since X windows are managed by EXWM, the current Emacs frame should always be considered focused logically. * exwm-workspace.el (exwm-workspace-switch): Manually run `focus-in-hook' and `focus-out-hook'. (exwm-workspace--handle-focus-in, exwm-workspace--handle-focus-out): New functions for overriding `handle-focus-in' and `handle-focus-out'. (exwm-workspace--init, exwm-workspace--exit): Override `handle-focus-in' and `handle-focus-out' 2017-03-05 Chris Feng ; Update the workaround for bug#23980 2017-02-24 Chris Feng Merge branch 'Stebalien/expose-line-mode-passthrough' into externals/exwm 2017-02-24 Chris Feng ; Expose `exwm-input-line-mode-passthrough' as a public interface. 2017-02-24 Chris Feng Fix systemtray position * exwm-workspace.el (exwm-workspace--update-workareas-hook): New hook run when workareas get updated. (exwm-workspace--update-workareas): Run the hook. * exwm-systemtray.el (exwm-systemtray--on-workspace-switch) (exwm-systemtray--on-randr-refresh): Take struts into account when calculating the position for systemtray. (exwm-systemtray--on-struts-update): Alias of `exwm-systemtray--on-randr-refresh'. (exwm-systemtray--init, exwm-systemtray--exit): Manipulate `exwm-workspace--update-workareas-hook'. 2017-02-22 Steven Allen Use let instead of setq when setting exwm-input--line-mode-passthrough That way, exwm won't clobber user modifications to this variable. 2017-02-12 Chris Feng Bump version to 0.13 2017-02-10 Chris Feng Correct a renamed variable * exwm-core.el (exwm--kmacro-map): Correct `exwm-input--during-key-sequence' that was left out in 089afdc8. 2017-02-05 Chris Feng Add a menu entry to `exwm-mode-map' * exwm-core.el (exwm-mode-menu): Add a menu entry for closing X windows. 2017-02-05 Chris Feng Fix checkdoc warnings 2017-02-05 Chris Feng Update copyright year to 2017 2017-01-03 Chris Feng Prevent certain frame parameters from being saved/restored * exwm-input.el (exwm-input--init): * exwm-randr.el (exwm-randr--init): * exwm-workspace.el (exwm-workspace--init): Add certain frame parameters into `frameset-filter-alist' to prevent them from being saved/restored which makes little sense and is problematic. 2016-12-26 Chris Feng Fix a bug with zero floating border width * exwm-manage.el (exwm-manage--manage-window): Avoid setting ColorMap mask when creating an X window if floating border is zero. 2016-11-19 Chris Feng Bump version to 0.12 2016-11-13 Chris Feng Grab global prefix keys with num-lock mask set. * exwm-input.el (exwm-input--update-global-prefix-keys): Grab global prefix keys with num-lock mask set, or those keys won't be activated when num-lock is enabled. 2016-10-06 Chris Feng Fix a possible deadlock * exwm-input.el (exwm-input--update-focus): Unlock before switching workspace. Also make sure the correct Emacs window is chosen for the target workspace. 2016-10-06 Chris Feng Avoid updating input focus when renaming buffers * exwm-workspace.el (exwm-workspace-switch-to-buffer) (exwm-workspace-rename-buffer): Do not update input focus. 2016-10-06 Chris Feng Fix problems with active minibuffer * exwm-floating.el (exwm-floating--unset-floating): Never use the minibuffer window to display an `exwm-mode' buffer. * exwm-input.el (exwm-input--on-buffer-list-update) (exwm-input--update-focus): Allow updating input focus when the minibuffer is active. (exwm-input--update-focus): Handle the case when an auto-hiding minibuffer is active. (exwm-input--during-key-sequence): Renamed to `exwm-input--line-mode-passthrough'. (exwm-input--line-mode-passthrough): New variable for forcing all events to be passed to Emacs in line-mode. (exwm-input--on-KeyPress-line-mode, exwm-input-send-next-key): Use it. (exwm-input--finish-key-sequence, exwm-input--init, exwm-input--exit): Drop `exwm-input--finish-key-sequence'. (exwm-input--line-mode-cache): New variable for caching incomplete key sequences. (exwm-input--cache-event): New function for handling new key events. (exwm-input--on-KeyPress-line-mode, exwm-input--on-KeyPress-char-mode): Use it. 2016-10-01 Chris Feng Bump version to 0.11 2016-09-30 Felix Lange Use read-buffer-to-switch in exwm-workspace-switch-to-buffer read-buffer-to-switch elides the current buffer from the list of completions and selects a sane default. 2016-09-25 Chris Feng Fix a frame resizing problem for Lucid build * exwm-manage.el (exwm-manage--frame-outer-id-list): New variable for storing frame window-outer-id's. (exwm-manage--add-frame, exwm-manage--remove-frame): New functions for adding/removing ids to/from the variable. (exwm-manage--init): Add the functions to the corresponding hooks. (exwm-manage--on-ConfigureRequest): Check for frames and avoid handling them. 2016-09-25 Chris Feng Fix `exwm-manage--kill-buffer-query-function' * exwm-manage.el (exwm-manage--kill-buffer-query-function): Check buffer-local variables for destroyed X windows; Avoid force killing clients that support WM_DELETE_WINDOW but not _NET_WM_PING; Use `y-or-n-p' instead for querying. 2016-09-23 Chris Feng Use X window borders ; This commit replaces the internal borders of Emacs frames with X ; window borders. This should make the flickering issue of floating X ; windows less serious. * exwm-floating.el (exwm-floating--border-pixel) (exwm-floating--border-colormap): New variables for storing border pixel and its colormap. (exwm-floating--set-floating): Do not set the internal border (and background color) of floating frames; do not take `exwm-floating-border-width' into account when calculating geometries; set the border of floating X window containers. (exwm-floating--unset-floating): No need to restore the position of X windows any more; hide the border of floating X window containers. (exwm-floating--init): Initialize the border pixel. * exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): Show/Hide container border respectively. * exwm-manage.el (exwm-manage--manage-window): Set the border pixel and colormap of X window containers. * exwm-workspace.el (exwm-workspace-move-window): Do not set the internal border and background color of floating frames. * exwm.el (exwm--on-ClientMessage): Simplify the code for calculating _NET_REQUEST_FRAME_EXTENTS. 2016-09-23 Chris Feng Remember the geometries of floating X windows * exwm-floating.el (exwm-floating--stop-moveresize): * exwm-layout.el (exwm-layout-enlarge-window): Update the geometry after resizing. 2016-09-23 Chris Feng Redirect KeyPress events sent to system tray icons * exwm-systemtray.el (exwm-systemtray--embed): Select KeyPress events on system tray icons. (exwm-systemtray--on-KeyPress): New function for redirecting KeyPress events. (exwm-systemtray--init): Attach the event listener. * exwm-systemtray.el (exwm-systemtray--init): Fix a typo. 2016-09-23 Chris Feng Allow selecting an X window from another workspace * exwm-input.el (exwm-input--on-buffer-list-update): Filter out switch-frame events. (exwm-input--update-focus): Switch workspace to set input focus on an X window from another workspace. 2016-09-22 Chris Feng Add support for keyboard macro * exwm-core.el (exwm--kmacro-map): New keymap used when executing keyboard macros. (exwm-mode): Use `exwm--kmacro-map' to override the default keymap. * exwm-input.el (exwm-input--on-KeyPress-line-mode): Send extra key events when defining keyboard macros. 2016-09-22 Chris Feng Drop support for _NET_WM_STATE_MODAL ; Modal X windows are not necessarily floating. * exwm.el (exwm--on-ClientMessage, exwm--init-icccm-ewmh): Drop support for _NET_WM_STATE_MODAL. 2016-09-22 Chris Feng ; Remove dead code 2016-08-31 Chris Feng Force using visible buffers in `other-buffer' * exwm-floating.el (exwm-floating--set-floating): * exwm-workspace.el (exwm-workspace-move-window): Buffers visible on other frames should be treated as invisible. One side effect is visible buffers on the current frame is also taken into account. 2016-08-30 Ved Vyas Improve exwm-workspace-move-window behavior in specific case This is a small change that improves the behavior of `exwm-workspace-move-window` in the following situation: 0. `exwm-workspace-show-all-buffers` and `exwm-layout-show-all-buffers` are `nil`*. 1. On active workspace `i`, there is X window `a` in the selected Emacs window. 2. On workspace `j`, there is X window `b` in the selected Emacs window on that workspace frame. 3. While workspace `i` is active, use `exwm-workspace-move-window` to move `a` to workspace `j`. 4. Switch to workspace `j` and use `exwm-workspace-move-window` to move `a` back to workspace `i`. Expected behavior: X window `a` is once again shown in the selected Emacs window on workspace `i` and X window `b` is once again shown in the selected Emacs window on workspace `j`. What is observed: `a` is OK but the selected Emacs window on workspace `j` does not show `b`. However, `b` is the first candidate when doing a `switch-to-buffer` in that Emacs window on workspace `j`. I'm not sure if this is the correct and complete change required, but it is working well so far. *The expected behavior is observed with EXWM 0.10 if exwm-{workspace,layout}-show-all-buffers are non-nil. 2016-08-28 Chris Feng Bump version to 0.10 2016-08-24 Chris Feng Add toggle commands * exwm-input.el (exwm-input-toggle-keyboard): New command for toggling keyboard mode. * exwm-layout.el (exwm-layout-toggle-fullscreen): New command for toggling fullscreen mode. * exwm-core.el (exwm-mode-menu, exwm-mode-map): Use them. 2016-08-15 Chris Feng ; Fix typos 2016-08-15 Chris Feng Do not set _NET_WORKAREA * exwm-workspace.el (exwm-workspace--update-workareas): Do not set _NET_WORKAREA. * exwm.el (exwm--init-icccm-ewmh, exwm--exit-icccm-ewmh): Remove _NET_WORKAREA from the supported list. 2016-08-14 Chris Feng Merge branch 'feat/compositor' into externals/exwm 2016-08-14 Chris Feng Document the compositing manager module * README.md: * exwm.el: Mention this new feature. 2016-08-14 Chris Feng Implement compositing manager module * exwm-cm.el: New compositing manager module. 2016-08-14 Chris Feng Bump version to 0.9 2016-08-14 Chris Feng Only check input focus for globally active model * exwm-input.el (exwm-input--set-focus): Partly revert 810b471. 2016-08-12 Chris Feng Fix _NET_DESKTOP_VIEWPORT * exwm-workspace.el (exwm-workspace--update-ewmh-props): * exwm.el (exwm--init-icccm-ewmh): Set _NET_DESKTOP_VIEWPORT on startup since it's a constant. 2016-08-12 Chris Feng Raise all docks/panels when switching workspace * exwm.el (exwm--update-struts-legacy, exwm--update-struts-partial): Always set the struts value, even it's nil. * exwm-workspace.el (exwm-workspace--update-struts): Check for nil struts values. 2016-08-12 Chris Feng Check for _NET_WM_STATE_FULLSCREEN on managing * exwm-core.el (exwm--fullscreen): Removed. (exwm--ewmh-state): New variable for recording the _NET_WM_STATE hint. * exwm-core.el (exwm-mode-menu, exwm-mode-map): * exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): * exwm-manage.el (exwm-manage--unmanage-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 the new variable. * exwm-manage.el (exwm-manage--update-ewmh-state): New function for updating _NET_WM_STATE. (exwm-manage--manage-window): Update _NET_WM_STATE and check for _NET_WM_STATE_FULLSCREEN. 2016-08-12 Chris Feng * exwm-manage.el (exwm-manage--unmanage-window): Do not clear struts when unmapping. 2016-08-12 Chris Feng Always put the desktop at bottom * exwm-manage.el (exwm-manage--desktop): New variable for recording the desktop X window. (exwm-manage--manage-window): Check for desktop. * exwm-workspace.el (exwm-workspace--resize-minibuffer-frame) (exwm-workspace--hide-minibuffer): Put the minibuffer container above desktop if any. 2016-08-12 Chris Feng * exwm-manage.el (exwm-manage--scan): Check for possibly destroyed child. 2016-08-12 Chris Feng Fix CreateWindow attributes ; Also fix various compile warnings. * exwm-floating.el (exwm-floating--set-floating): * exwm-manage.el (exwm-manage--manage-window): * exwm-systemtray.el (exwm-systemtray--init): * exwm-workspace.el (exwm-workspace--add-frame-as-workspace) (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Explicitly specify the class (InputOutput or InputOnly) and for an InputOutput X window the background pixmap when creating an X window. 2016-08-10 Chris Feng Adapt for the changes in `window-configuration-change-hook' * exwm-layout.el (exwm-layout--refresh): Accept frame as an optional argument. (exwm-layout--init): Add `exwm-layout--refresh' to `window-size-change-functions' when appropriate. 2016-08-09 Chris Feng Update timestamp for WM_TAKE_FOCUS ClientMessage * exwm-input.el (exwm-input--timestamp-window) (exwm-input--timestamp-atom, exwm-input--timestamp-callback): New variables for updating timestamp. (exwm-input--set-focus): Send WM_TAKE_FOCUS ClientMessage with updated timestamp. (exwm-input--update-timestamp): New utility function for fetching timestamp. (exwm-input--on-PropertyNotify): New function for handling PropertyNotify event to extract the timestamp. (exwm-input--init): Create resources for updating timestamp; attach the event listener. (exwm-input--on-ButtonPress, exwm-input--on-KeyPress): * exwm.el (exwm--on-PropertyNotify): No longer update timestamp. * exwm-input.el (exwm-input--set-focus): Avoid setting input focus on already focused X windows, or when the input focus in not on a Emacs frame if globally active model is in use. * exwm-floating.el (exwm-floating--set-floating): * exwm-workspace.el (exwm-workspace-move-window) (exwm-workspace--add-frame-as-workspace, exwm-workspace--init): Set 'exwm-id' frame parameter as the numerical (inner) frame X ID. 2016-08-09 Chris Feng Fix coordinates calculations concerning workspaces * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--do-moveresize): * exwm-manage.el (exwm-manage--manage-window): Use the computed workareas rather than RandR output geometries. 2016-08-09 Chris Feng Ensure floating hooks are run in the right context * exwm-floating.el (exwm-floating-setup-hook, exwm-floating-exit-hook): Fix doc string. (exwm-floating--set-floating, exwm-floating--unset-floating): Set the context. 2016-08-07 Chris Feng Set background pixmap for system tray embedder * exwm-systemtray.el (exwm-systemtray--init): Make embedder use the same depth and pixmap of the parent; the parent is always a Emacs frame. 2016-08-06 Chris Feng * exwm-layout.el (exwm-layout--show): Fix the position of floating X windows. 2016-08-06 Chris Feng Avoid setting input focus on workspace containers * exwm-input.el (exwm-input--on-FocusIn): Set input focus to the workspace frame when input focus is received by a workspace container. (exwm-input--on-workspace-list-change): Select FocusChange event mask on workspace containers. (exwm-input--init): Attach the event listener; adapt function calls. 2016-08-01 Chris Feng Fix emacsclient issues * exwm-workspace.el (exwm-workspace--client-p): New function for testing emacsclient frames. (exwm-workspace--update-minibuffer-height) (exwm-workspace--on-minibuffer-setup) (exwm-workspace--on-minibuffer-exit, exwm-workspace--on-echo-area-dirty) (exwm-workspace--on-echo-area-clear): * exwm-input.el (exwm-input--on-buffer-list-update) (exwm-input--on-minibuffer-setup): * exwm-layout.el (exwm-layout--on-minibuffer-setup) (exwm-layout--on-echo-area-change): Use it. * exwm-workspace.el (exwm-workspace--add-frame-as-workspace): Always clear the 'client' frame parameter. (exwm-workspace--init): Fix a typo. 2016-08-01 Chris Feng Fix restarting issues * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Prompt for unsaved files before restarting; avoid running `server-force-stop' early; restore the 'client' frame parameter before calling `exwm--exit'; correctly handle emacsclient. * exwm.el (exwm-restart): Always kill subordinate Emacs instances. 2016-07-31 Chris Feng Bump version to 0.8 2016-07-31 Chris Feng ; Eliminate compile warnings 2016-07-31 Chris Feng Fix restarting issues * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): * exwm.el (exwm-restart): Run `kill-emacs-hook' early; do not check for X windows before restarting. 2016-07-30 Chris Feng Add restart support * exwm-input.el (exwm-input--exit): Cancel timers. * exwm-manage.el (exwm-manage--manage-window): Add reparented X windows to save-set. * exwm-systemtray.el (exwm-systemtray--embed): Add embeded icons to save-set. * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): No need to unmanage; also hide Emacs frames; always call `exwm--exit'. * exwm.el (exwm-restart): New command for restarting EXWM. (exwm--exit-icccm-ewmh): New function for cleaning up ICCCM/EWMH properties. (exwm-exit-hook): Update doc string. (exwm--exit): Call `exwm--exit-icccm-ewmh' and do not reset variables. 2016-07-30 Chris Feng ; * exwm.el (exwm-enable): Ignore unrecognized command line arguments. 2016-07-30 Chris Feng ; * exwm-workspace.el (exwm-workspace-switch): Input focus should be set ; on the frame where the target window resides. 2016-07-30 Taichi Uemura set fullscreen-frame-count to 0 on exiting 2016-07-30 Chris Feng Fit the *Completions* buffer * exwm-workspace.el (exwm-workspace--on-minibuffer-setup): Work around the *Completions* buffer not getting fitted problem. * exwm.el (exwm-enable): Enable `window-resize-pixelwise'. 2016-07-30 Chris Feng Exit the active minibuffer on unmanaging X windows * exwm-manage.el (exwm-manage--unmanage-window): Exit the minibuffer as a precaution to prevent the "selecting deleted buffer" error. 2016-07-30 Chris Feng ; * exwm-manage.el (exwm-manage--manage-window): Check the value range ; of _NET_WM_DESKTOP. 2016-07-30 Chris Feng Grab global keys on newly created workspaces * exwm-input.el (exwm-input--update-global-prefix-keys): Label grabbed workspaces and re-grab keys only when keys change or there are newly created workspaces. (exwm-input--init, exwm-input--exit): Use the function in `exwm-workspace-list-change-hook'. 2016-07-30 Chris Feng Fix input focus transfer between workspaces * exwm-input.el (exwm-input--set-focus): Make input focus revert to parent by default (to prevent input focus from following pointer). * exwm-input.el (exwm-input--update-focus): Switch to another workspace if input focus is transfered to it. * exwm-workspace.el (exwm-workspace--on-focus-in, exwm-workspace--init) (exwm-workspace--exit): Remove `exwm-workspace--on-focus-in' and related uses. 2016-07-29 Chris Feng ; * exwm-floating.el (exwm-floating--unset-floating): Reposition an X ; window when it changes from floating to tiling layout. 2016-07-29 Chris Feng Sync with XELB * exwm-input.el (exwm-input--update-global-prefix-keys) (exwm-input--on-KeyPress-line-mode, exwm-input--on-KeyPress-char-mode) (exwm-input--fake-key, exwm-input--init): Sync with XELB. * exwm-input.el (exwm-input--on-KeyPress) (exwm-input--on-KeyPress-line-mode): Resend XKB events with SendEvent since AllowEvents in ReplayKeyboard mode doesn't seem to work. 2016-07-27 Chris Feng Bump version to 0.7 2016-07-26 Chris Feng Always update input focus on entering minibuffer * exwm-input.el (exwm-input--on-minibuffer-setup): New function for setting input focus on the workspace frame. (exwm-input--init): Add the function to `minibuffer-setup-hook'. * exwm-workspace.el (exwm-workspace--on-minibuffer-setup): Avoid setting input focus here. 2016-07-26 Chris Feng Add an option to force using tiling layout * exwm-manage.el (exwm-manage-force-tiling): New variable indicating whether X windows should always be managed in tiling layout. (exwm-manage--manage-window): Add a condition. 2016-07-25 Chris Feng Bump version to 0.6 2016-07-25 Chris Feng Minor fixes for past few commits * exwm-input.el (exwm-input--unread-event): Temporarily disable it due to bug#23980. * exwm-workspace.el (exwm-workspace--init): Set the default frame internal border to 0. * exwm-workspace.el (exwm-workspace--remove-frame-as-workspace): Fix a typo. 2016-07-22 Chris Feng ; * exwm-input.el: Prevent moving/resizing a tiling X window. 2016-07-22 Chris Feng Fix issues with deleting the last workspace * exwm-workspace.el (exwm-workspace-delete): Prevent deleting the last workspace. * exwm-workspace.el (exwm-workspace--remove-frame-as-workspace): Create a new workspace if the last one is deleted. 2016-07-22 Chris Feng Add minibuffer toggle command * exwm-workspace.el (exwm-workspace-toggle-minibuffer): Add minibuffer toggle command. * exwm-core.el (exwm-mode-menu, exwm-mode-map): Substitute minibuffer attach/detach commands with minibuffer toggle command. * exwm-workspace.el (exwm-workspace-toggle-minibuffer): Insert various auto load cookies. 2016-07-21 Chris Feng Improve the performance of workspace creation * exwm-workspace.el (exwm-workspace--add-frame-as-workspace): Do not run `exwm-workspace-list-change-hook' when create workspace in the background. (exwm-workspace-switch-create): Run the hook once. (exwm-workspace--prompt-add): Run the hook. 2016-07-21 Chris Feng Fix input focus issues revealed by recent commits * exwm-input.el (exwm-input--update-focus-window) (exwm-input--on-buffer-list-update, exwm-input--update-focus-interval) (exwm-input--update-focus-lock, exwm-input--update-focus-defer-timer) (exwm-input--update-focus-timer, exwm-input--update-focus-defer) (defun exwm-input--update-focus): Rework the input focus update mechanism, mainly to overcome the input focus update contention. * exwm-input.el (defun exwm-input--update-focus): Use `select-window' instead of `exwm-workspace-switch'; calling the latter is too expensive. * exwm-layout.el (exwm-layout--on-minibuffer-setup): Drop a unnecessary line. * exwm-workspace.el (exwm-workspace-switch): Set input focus to the new workspace frame. 2016-07-21 Chris Feng Fix workspace creation and deletion * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace-switch-create): Move support for creating missing workspaces from the former to the latter.. (exwm-workspace-switch-create-limit): New variable limiting the number of new workspaces allowed to create each time. * exwm-workspace.el (exwm-workspace--prompt-add) (exwm-workspace--prompt-delete): New commands for adding and deleting workspaces from the `read-from-minibuffer' prompt. (exwm-workspace--prompt-add-allowed) (exwm-workspace--prompt-delete-allowed): New variables telling whether the above two commands are allowed to run. (exwm-workspace--switch-map): Change "+" / "-" to use the new commands. * exwm-workspace.el (exwm-workspace-switch, exwm-workspace-swap) (exwm-workspace-move-window): Use this new feature. * exwm-workspace.el (exwm-workspace-add, exwm-workspace-delete): Since they are not used by the keymap any more, drop the use of idle timer. * exwm-workspace.el (exwm-workspace--create-silently): New variable indicating whether new workspaces should be created in the background. (exwm-workspace--add-frame-as-workspace): Support creating new workspaces in the background. * exwm-workspace.el (exwm-workspace--on-ConfigureNotify): Update workareas if it's not up to date. * exwm-randr.el (exwm-randr--refresh): Raise the standalone minibuffer when refreshed. * exwm-config.el (exwm-config-default): Add `exwm-workspace-number' and `exwm-workspace-switch-create'. 2016-07-21 Chris Feng Minor fixes * exwm-core.el (exwm-mode-menu, exwm-mode-map): Add workspace attach/detach commands. * exwm-workspace.el (exwm-workspace--add-frame-as-workspace): Cleanup containers. * exwm-workspace.el (exwm-workspace--update-ewmh-props): Create the frame in size 1x1 (Lucid build does no support zero sized frames). * exwm-workspace.el (exwm-workspace--post-init): Reset the 'fullscreen' frame parameter for emacsclient. 2016-07-21 Chris Feng Minor cleanups ; Eliminate compile warnings. ; Rename frame parameter 'exwm--urgency' to 'exwm-urgency'. ; Simplify expressions. 2016-07-19 Chris Feng Add support for attachable/detachable minibuffer * exwm-workspace.el (exwm-workspace--update-minibuffer-height): Renamed from `exwm-workspace--update-minibuffer' to better reflect its usage. * exwm-input.el (exwm-input--update-focus): Directly put the floating X window at top since the minibuffer is no longer a sibling. * exwm-workspace.el (exwm-workspace--resize-minibuffer-frame): Calculate position in absolute coordinate; put minibuffer at bottom by default; resize the minibuffer frame with ConfigureWindow rather than `set-frame-width'. (exwm-workspace-switch): No need to reparent minibuffer any more. (exwm-workspace--on-ConfigureNotify): Calculate position in absolute coordinate. (exwm-workspace--show-minibuffer, exwm-workspace--hide-minibuffer): Show/Hide the minibuffer by adjusting the stacking order rather than mapping/unmapping. (exwm-workspace--init): Map the minibuffer frame container on creation. * exwm-workspace.el (exwm-workspace--minibuffer-attached-p): New function telling whether the minibuffer is attached. (exwm-workspace--attached-minibuffer-height): New variable storing the height of the attached minibuffer. (exwm-workspace-attach-minibuffer, exwm-workspace-detach-minibuffer): New functions for attaching/detaching the minibuffer. * exwm-workspace.el (exwm-workspace--show-minibuffer): Remove the workaround for minibuffer cursor (seems fixed). 2016-07-19 Chris Feng Fix an bug for emacsclient * exwm-workspace.el (exwm-workspace--init): Always create one initial workspace by default. 2016-07-19 Chris Feng Fix a workspace switch issue * exwm-workspace.el (exwm-workspace--switch-map-nth-prefix): Add more checking conditions. 2016-07-19 Chris Feng Merge branch 'medranocalvo/dynamic-workspaces' into externals/exwm 2016-07-19 Chris Feng Mention dynamic workspace in various places * README.md: * exwm.el: Update README and comments. * exwm-core.el (exwm-mode-menu exwm-mode-map): Add menu entries for dynamic workspace feature. 2016-07-19 Chris Feng Adapt dynamic workspace for RandR module * exwm-workspace.el (exwm-workspace-list-change-hook): New hook run when the workspace list is modified. * exwm-randr.el (exwm-randr--init, exwm-randr--exit): * exwm-workspace.el (exwm-workspace-swap, exwm-workspace-move) (exwm-workspace--add-frame-as-workspace) (exwm-workspace--remove-frame-as-workspace): Use it. 2016-07-19 Chris Feng Adapt dynamic workspace for floating module * exwm-workspace.el (exwm-workspace--add-frame-as-workspace): Fix the checking criteria of floating frames; Copy RandR frame parameters from the first workspace frame (rather than the selected one which can be a floating frame). * exwm-workspace.el (exwm-workspace--remove-frame-as-workspace): Check frame type first. 2016-07-19 Chris Feng Improve the handling of workspaces * exwm-workspace.el (exwm-workspace--prompt-for-workspace): Add an optional argument to modify prompt. (exwm-workspace-switch, exwm-workspace-swap) (exwm-workspace-move, exwm-workspace-move-window): Use it. * exwm-workspace.el (exwm-workspace-number): Re-introduce the variable (now it stands for the initial workspace number). (exwm-workspace--init): Create remaining initial workspaces. * exwm-workspace.el (exwm-workspace-add, exwm-workspace-delete): New commands for adding/deleting workspaces. (exwm-workspace--switch-map): Add "+"/"-" to increase/descrease workspace number. * exwm-workspace.el (exwm-workspace-switch): Automatically add missing workspaces. * exwm.el (exwm--on-ClientMessage): Support _NET_NUMBER_OF_DESKTOPS client message for adjusting workspace number. 2016-07-19 Chris Feng Fix various minor issues ; Coding style fixes * exwm-core.el (exwm-mode-menu exwm-mode-map): Use `exwm-workspace--count'. * exwm-workspace.el (exwm-workspace--set-fullscreen) (exwm-workspace--on-focus-in, exwm-workspace--set-desktop): Use `exwm-workspace--position'. * exwm-workspace.el (exwm-workspace-swap, exwm-workspace-move): Renamed from `exwm-workspace-swap-workspace' and `exwm-workspace-move-workspace'. * exwm-workspace.el (exwm-workspace--update-ewmh-props): Update comments. * exwm-workspace.el (exwm-workspace--switch-map-nth-prefix): Fix a calculation. * exwm-workspace.el (exwm-workspace-switch): Fix a potential timer problem. * exwm-workspace.el (exwm-workspace-swap, exwm-workspace-move) (exwm-workspace--remove-frame-as-workspace): Update workspace and clients involved. * exwm-workspace.el (exwm-workspace--remove-frame-as-workspace): Remove workspace first. 2016-07-18 Chris Feng Fix 2 dock-related issues * exwm-floating.el (exwm-floating--set-floating): Add a workaround to prevent accidental move of Emacs frame when struts are set. * exwm-workspace.el (exwm-workspace--update-workareas): Make legacy docks working. 2016-07-18 Chris Feng * exwm-workspace.el (exwm-workspace--init): Rebalance parentheses. 2016-07-17 Adrián Medraño Calvo Remove `exwm-worspace-number' No longer fill initial workspace list, nor limit the number of workspaces to `exwm-worspace-number'. Users are free to create as many as they like by hitting 'C-x 5 2' or running `make-frame'. The initial workspace list can be set up by creating frames in a configuration file. For example, to start up with 4 workspaces: (dolist (i 3) (make-frame)) The interactive workspace switcher is improved to support selecting workspaces with a many-digits position. * exwm-workspace.el (exwm-workspace-number): Remove variable, as we no longer have a fixed number of workspaces. (exwm-workspace--switch-map) (exwm-workspace--switch-map-nth-prefix) (exwm-workspace--switch-map-select-nth): Improve support for selecting workspaces with multiple-digit positions (e.g. workspace number 12). (exwm-workspace--add-frame-as-workspace, exwm-workspace--init): Remove limit on number of workspaces. (exwm-workspace--init): Stop creating workspaces at startup. * exwm-config.el (exwm-config-default): Bind keys to namespaces 0-9 in the default configuration. 2016-07-17 Adrián Medraño Calvo Support adding and removing workspaces Frames created via `make-frame' are added to the workspace list; `delete-frame' removes them from the list. Floating frames, non-graphical frames, as well as those associated to different displays are ignored. When deleting a workspace, care is taken to reparent that all X clients another workspace. * exwm-workspace.el (exwm-workspace--add-frame-as-workspace) (exwm-workspace--remove-frame-as-workspace): New functions that intercept created and deleted frames and configure them as EXWM workspaces. (exwm-workspace--update-ewmh-props): New function to update desktop-related EWMH properties after workspace changes. (exwm-workspace--init): Use `exwm-workspace--add-frame-as-workspace' to create the initial workspaces. 2016-07-17 Adrián Medraño Calvo Support moving workspaces * exwm-workspace.el (exwm-workspace-move-workspace): New function to move a workspace to a certain position. 2016-07-17 Adrián Medraño Calvo Support swapping workspaces * exwm-workspace.el (exwm-workspace-swap-workspaces): New function to interchange the position of two workspaces. 2016-07-17 Adrián Medraño Calvo Factor out prompt for workspace * exwm-workspace.el (exwm-workspace--prompt-for-workspace): New function to interactively ask the user for a workspace. (exwm-workspace-switch, exwm-workspace-move-window): Use it. 2016-07-17 Adrián Medraño Calvo Work with workspace frames instead of indices * exwm.el (exwm--on-ClientMessage): * exwm-workspace.el (exwm-workspace-switch) (exwm-workspace-move-window, exwm-workspace-switch-to-buffer): * exwm-layout.el (exwm-layout--refresh): * exwm-input.el (exwm-input--update-focus) (exwm-input--on-ButtonPress): Accept frame as well as workspace index as argument. * exwm-workspace.el (exwm-workspace--workspace-from-frame-or-index): New function. 2016-07-17 Adrián Medraño Calvo Move defvars to the top * exwm-workspace.el (exwm-workspace--current) (exwm-workspace-current-index): Do it. 2016-07-17 Adrián Medraño Calvo New function exwm-workspace--workspace-p * exwm-workspace.el (exwm-workspace--workspace-p): New function. * exwm-input.el (exwm-input--on-ButtonPress): * exwm-workspace.el (exwm-workspace-switch): * exwm-layout.el (exwm-layout--refresh): Use it. 2016-07-17 Adrián Medraño Calvo Add helper for counting number of workspaces * exwm-workspace.el (exwm-workspace--count): New function. * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--switch-map) (exwm-workspace--update-switch-history, exwm-workspace-switch) (exwm-workspace-move-window, exwm-workspace--init) (exwm-workspace--post-init): Use it. 2016-07-17 Adrián Medraño Calvo Add `exwm-workspace--position' helper * exwm-workspace.el (exwm-workspace--position): New function. * exwm-layout.el (exwm-layout--refresh): * exwm-input.el (exwm-input--on-ButtonPress): * exwm-workspace.el (exwm-workspace--update-switch-history): * exwm.el (exwm--on-ClientMessage, exwm-workspace--init): Use it. 2016-07-17 Adrián Medraño Calvo Apply minibuffer in own frame configuration to created frames * exwm-workspace.el (exwm-workspace--modify-all-x-frames-parameters): Helper function to non-destructively modify `window-system-default-frame-alist'. (exwm-workspace--init): Use above function to default all frames to the shared minibuffer when `exwm-workspace--minibuffer-own-frame-p' is true. 2016-07-17 Adrián Medraño Calvo Add missing declarations * exwm-systemtray.el : * exwm-manage.el : * exwm-layout.el : * exwm-input.el : * exwm-floating.el : * exwm-core.el : Add missing function declarations. 2016-07-17 Adrián Medraño Calvo Minor cleanup * exwm-workspace.el (exwm-workspace--update-workareas): Use `make-list' instead of looping. 2016-07-16 Adrián Medraño Calvo 2016-07-17 Chris Feng Add major mode menu * exwm-core.el (exwm--keyboard-grabbed): New buffer-local variable for recoding grabbing state. (exwm-mode-menu, exwm-mode-map): Add major mode menu. * exwm-input.el (exwm-input-set-key): Update prefix keys when a global binding is interactively set. (exwm-input-grab-keyboard, exwm-input-release-keyboard): Update grabbing state. 2016-07-16 Chris Feng Add RandR support for docks and reuse workareas * exwm-workspace (exwm-workspace--update-struts): Add RandR support for docks. * exwm-workspace (exwm-workspace--workareas): New variable for storing workareas. (exwm-workspace--update-workareas): Update workareas and set _NET_WORKAREA (replaces `exwm-workspace--set-workareas'). (exwm-workspace--set-fullscreen): Reuse workareas for resizing and drop optional arguments. (exwm-workspace--resize-minibuffer-frame) (exwm-workspace--on-ConfigureNotify): Reuse workareas for resizing/reposition the (optional) dedicated minibuffer frame. * exwm-layout.el (exwm-layout-set-fullscreen): Do not use `exwm-workspace--set-fullscreen' here. * exwm-manage.el (exwm-manage--unmanage-window): * exwm-randr.el (exwm-randr--refresh): * exwm.el (exwm--update-struts-legacy, exwm--update-struts-partial): Update workareas before resizing workspaces. * exwm.el (exwm--update-struts-legacy, exwm--update-struts-partial): Remove the corresponding record on receiving invalid struts. * exwm-workspace.el (exwm-workspace--get-geometry): New utility function for retrieving workspace geometry. 2016-07-15 Chris Feng Add multi-dock support and fix fullscreen issues with dock * exwm.el (exwm--update-strut-legacy, exwm--update-strut-partial) (exwm--update-strut): Rename (strut => struts). * exwm-manage.el (exwm-manage--manage-window): Listen for UnmapNotify/DestroyNotify events of docks to stop tracking them. (exwm-manage--unmanage-window): Remove dock from tracking list when it's unmapped/destroyed. * exwm-workspace.el (exwm-workspace--id-struts-alist): New variable for tracking docks. (exwm-workspace--struts): Now it stores merged struts. (exwm-workspace--update-struts): New function for doing the 'merge'. * exwm.el (exwm--update-struts-legacy, exwm--update-struts-partial): Now update struts for multiple docks. * exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): * exwm-manage.el (exwm-manage--unmanage-window): Fix fullscreen mode with dock. * exwm-workspace.el (exwm-workspace--set-fullscreen): Add optional arguments for ignoring struts / resizing container only. (exwm-workspace-switch): Restack workspace/docks appropriately. 2016-07-15 Chris Feng Fix a `unread-command-events' issue for Emacs 24 * exwm-input.el (exwm-input--unread-event) (exwm-input--on-KeyPress-line-mode): Use `unread-command-events' differently on Emacs 24 and 25. 2016-07-14 Chris Feng Fix various stability issues * exwm-input.el (exwm-input--on-KeyPress-line-mode) (exwm-input--on-KeyPress-char-mode): Append events at the tail. * exwm-manage.el (exwm-manage--unmanage-window): Remove the _NET_WM_DESKTOP property when an X window is withdrawn. * exwm-systemtray.el (exwm-systemtray--init): * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Issue warning rather than error when there's an existing tray running. * exwm.el (exwm--on-ClientMessage): The buffer window can be on a floating frame. 2016-07-13 Chris Feng Add/improve some ICCCM/EWMH features * exwm-floating.el (exwm-floating--set-allowed-actions) (exwm-floating--set-floating, exwm-floating--unset-floating): Add _NET_WM_ALLOWED_ACTIONS support. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating): Support initial state hint. * exwm.el (exwm--update-hints): Fetch initial state. (exwm--update-state, exwm--on-PropertyNotify): WM_STATE is not intended to be read. * exwm-core.el (exwm-state): * exwm-floating.el (exwm-floating-hide): * exwm-input.el (exwm-input--update-focus): * exwm-layout.el (exwm-layout--set-state) (exwm-layout--iconic-state-p, exwm-layout--show, exwm-layout--hide): * exwm-manage.el (exwm-manage--on-MapRequest): Improve WM_STATE support. * exwm-input.el (exwm-input--set-focus): * exwm-input.el (exwm-input--update-focus) (exwm-input--set-active-window): * exwm.el (exwm--on-ClientMessage): Add _NET_ACTIVE_WINDOW support. * exwm-layout.el (exwm-layout--set-client-list-stacking): Improve _NET_CLIENT_LIST_STACKING support. * exwm-manage.el (exwm-manage--set-client-list) (exwm-manage--manage-window, exwm-manage--unmanage-window): Improve _NET_CLIENT_LIST support. * exwm-manage.el (exwm-manage--manage-window): * exwm-workspace.el (exwm-workspace--set-desktop) (exwm-workspace-move-window): * exwm.el (exwm--on-ClientMessage): Add _NET_WM_DESKTOP support. * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--set-desktop-geometry) (exwm-workspace--init): Add _NET_DESKTOP_GEOMETRY support. * exwm-workspace.el (exwm-workspace--set-desktop-geometry): Renamed from `exwm-workspace--update-desktop-geometry'. * exwm-randr.el (exwm-randr--refresh): Improve _NET_WORKAREA support. * exwm-workspace.el (exwm-workspace--set-fullscreen): Correct variables names. * exwm-workspace.el (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Set _NET_NUMBER_OF_DESKTOPS in workspace module. * exwm-workspace.el (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Set _NET_DESKTOP_VIEWPORT in workspace module. * exwm.el (exwm--on-ClientMessage): Improve _NET_CURRENT_DESKTOP support. * exwm.el (exwm--on-ClientMessage): Add _NET_CLOSE_WINDOW support. * exwm.el (exwm--on-ClientMessage): Add WM_CHANGE_STATE support. * exwm.el (exwm--init-icccm-ewmh): Update supported atoms. 2016-07-12 Chris Feng * exwm-input.el (exwm-input--on-KeyPress-char-mode): No need to force events to be added to `this-command-keys' (and it causes problems). 2016-07-12 Chris Feng Add initial support for dock (panel) applications * exwm-layout.el (exwm-layout--fullscreen-frame-count) (exwm-layout--set-frame-fullscreen): Moved to workspace module. * exwm-workspace.el (exwm-workspace--fullscreen-frame-count) (exwm-workspace--set-fullscreen): Moved from layout module. * exwm-manage.el (exwm-manage--manage-window): Update struts for dock applications. * exwm-workspace.el (exwm-workspace--strut) (exwm-workspace--strut-is-partial): New variables for storing struts. (exwm-workspace--resize-minibuffer-frame) (exwm-workspace--on-ConfigureNotify): Take struts into consideration. * exwm.el (exwm--update-strut-legacy, exwm--update-strut-partial) (exwm--update-strut): New functions for updating _NET_WM_STRUT or _NET_WM_STRUT_PARTIAL. (exwm--on-PropertyNotify): Update struts on corresponding event. (exwm--init-icccm-ewmh): Declare _NET_WM_STRUT and _NET_WM_STRUT_PARTIAL as supported. * exwm-workspace.el (exwm-workspace--update-workareas): Dedicated function for updating _NET_WORKAREA. * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--init): Use `exwm-workspace--update-workareas'. * exwm.el (exwm--init-icccm-ewmh): Do not set _NET_WORKAREA here. 2016-07-12 Chris Feng * exwm-workspace.el (exwm-workspace--init): Remove possible internal borders of workspace frames. 2016-07-12 Chris Feng Fix a bug of simulation keys * exwm-input.el (exwm-input--on-KeyPress-line-mode) (exwm-input--on-KeyPress-char-mode): Force events to be added to `this-command-keys'. (exwm-input-send-next-key): The read event can now be (t . EVENT). 2016-06-17 Chris Feng Allow buffer-local simulation keys * exwm-input.el (exwm-input-set-local-simulation-keys): New function for setting buffer-local simulation keys. (exwm-input--local-simulation-keys): New internal variable. (exwm-input--update-simulation-prefix-keys): Modify either `exwm-mode-map' or the local keymap accordingly. 2016-06-17 Chris Feng * exwm-layout.el (exwm-layout--show): Resize the X window if the minibuffer is active but with line height 1. 2016-05-25 Chris Feng Bump version to 0.5 2016-05-24 Chris Feng * exwm-input.el (exwm-input--update-focus): Do not update input focus when there's an active minibjffer 2016-05-24 Chris Feng Manage a certain type of undecorated X windows * exwm-core.el (exwm--mwm-hints): Removed. (exwm--mwm-hints-decorations): New buffer-local variable for indicating whether the X window should have decorations. * exwm-floating.el (exwm-floating--set-floating): Hide the mode-line of undecorated floating X windows by default. * exwm-manage.el (exwm-manage--update-mwm-hints): Set exwm--mwm-hints-decorations; (exwm-manage--manage-window): Manage an undecorated X window if its input model is not 'No Input' or 'Globally Active'. 2016-05-23 Chris Feng Add cleanup codes for Emacs daemon * exwm-floating.el (exwm-floating--exit): * exwm-input.el (exwm-input--exit): * exwm-layout.el (exwm-layout--exit): * exwm-manage.el (exwm-manage--exit): * exwm-randr.el (exwm-randr--exit): * exwm-systemtray.el (exwm-systemtray--exit): * exwm-workspace.el (exwm-workspace--exit): New functions for cleanup each module. * exwm-input.el (exwm-input--on-pre-command, exwm-input--on-post-command) (exwm-input--init): Name lambda functions. * exwm-layout.el (exwm-layout--timer, exwm-layout--init): Save timer. * exwm-randr.el (exwm-randr-enable): Register the cleanup function. * exwm-systemtray.el (exwm-systemtray--init): Force refresh atoms in XEMBED and system tray protocols. (exwm-systemtray-enable): Register the cleanup function. * exwm-workspace.el (exwm-workspace--client): Save the server process. (exwm-workspace--confirm-kill-emacs): Add emacsclient-specific cleanup codes. (exwm-workspace--timer): Save the timer. (exwm-workspace--init): Save the server process and timer; fix problems with emacsclient frames. * exwm.el (exwm-init): Always select the newly created frame; force refresh ICCCM & EWMH atoms. (exwm-exit-hook): New hook for holding cleanup codes. (exwm--exit): Run `exwm-exit-hook', execute cleanup codes for each module and reset the environment. 2016-05-21 Chris Feng Always add `exwm-workspace--on-focus-in' * exwm-workspace.el (exwm-workspace--init): `exwm-workspace--on-focus-in' should always be added to `focus-in-hook'. 2016-05-13 Chris Feng Use `xcb:connect' instead of `xcb:connect-to-socket' * exwm.el (exwm-init): * exwm-systemtray.el (exwm-systemtray--init): Use `xcb:connect' instead of `xcb:connect-to-socket'. 2016-04-21 Chris Feng Announce manager selection with client message * exwm-systemtray.el (exwm-systemtray--init): Send a client message to announce the manager selection. (xcb:systemtray:-ClientMessage): The client message. 2016-04-21 Chris Feng Properly place undecorated X windows * exwm-manage.el (exwm-manage--manage-window): Convert absolute position of undecorated X windows. 2016-04-07 Chris Feng Fix 2 multi-monitor issues * exwm-workspace.el (exwm-workspace--on-focus-in, exwm-workspace--init): Handle unexpected frame switch in `focus-in-hook'. * exwm-floating.el (exwm-floating--set-floating): If the absolute position is (0, 0) then the relative position is also the same. 2016-04-03 Chris Feng Some commands should be called interactively * exwm-layout.el (exwm-layout-set-fullscreen, exwm-layout-unset-fullscreen) (exwm-layout-show-mode-line): * exwm.el (exwm-reset): Call `exwm-input-grab-keyboard' and `exwm-input-release-keyboard' interactively. 2016-03-25 Chris Feng Fix emacsclient issues * exwm-layout.el (exwm-layout--on-minibuffer-setup) (exwm-layout--on-echo-area-change): * exwm-workspace.el (exwm-workspace--on-minibuffer-setup) (exwm-workspace--on-minibuffer-exit, exwm-workspace--on-echo-area-dirty) (exwm-workspace--on-echo-area-clear): Exclude non-graphical frames. * exwm.el (exwm--server-eval-at): Avoid using `x-dispaly-name'. 2016-03-19 Adrián Medraño Calvo Restore a sensible buffer when replacing EXWM buffers * exwm-layout.el (exwm-layout--other-buffer-exclude-exwm-mode-buffers) (exwm-layout--other-buffer-exclude-buffers): New variables. (exwm-layout--other-buffer-predicate): Allow excluding EXWM buffers or buffers from a given set. (exwm-layout--refresh): Replace EXWM buffers with sensible buffers depending on the situation. When in non-workspace/non-floating frames, with some non-EXWM buffer; when the EXWM buffer is displayed elsewhere, some buffer previously displayed in that window (making sure it has been recently covered). 2016-03-19 Adrián Medraño Calvo Use `other-buffer' instead of "*scratch*" * exwm-workspace.el (exwm-workspace-move-window): Display `other-buffer' instead of "*scratch*" in the window whose buffer has been made floating. 2016-03-19 Adrián Medraño Calvo Use `buffer-predicate' frame parameter to prevent switching to visible EXWM buffers * exwm-layout.el (exwm-layout--other-buffer-predicate): New function to be set as `buffer-predicate' frame parameter. * exwm-workspace.el (exwm-workspace--init): Use above function on workspace frames. 2016-03-19 Adrián Medraño Calvo Set the correct buffer before checking the `major-mode' * exwm-layout.el (exwm-layout--refresh): Make sure we test the `major-mode' of the first buffer of the floating frame. 2016-03-19 Adrián Medraño Calvo Minor cleanup * exwm-layout.el (exwm-layout--refresh): Reuse car. 2016-03-16 Chris Feng Exclude unmanaged floating X windows when refreshing * exwm-layout.el (exwm-layout--refresh): Do not show unmanaged floating X windows. 2016-03-11 Chris Feng Neglect trivial resizing requests * exwm-manage.el (exwm-manage--on-ConfigureRequest): Neglect trivial resizing requests since that cannot be done precisely. 2016-03-08 Chris Feng Use `cl-case' instead of `case' 2016-03-07 Adrián Medraño Calvo Change input mode of window being clicked When clicking a mode-line of other window to switch the EXWM input mode, `window-buffer' does not return the window whose mode-line has been clicked, but the current one. This change ensures that the right window has its input mode and mode-line updated. * exwm-input.el (exwm-input--update-mode-line): Factor out setting `mode-line-process'. (exwm-input--grab-keyboard, exwm-input--release-keyboard) (exwm-input-grab-keyboard, exwm-input-release-keyboard): Make sure the buffer of the window being clicked has its input mode updated. 2016-03-07 Chris Feng Restack fullscreen X windows * exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): Raise and lower fullscreen X windows respectively. 2016-03-06 Chris Feng Allow floating X windows to resize themselves * exwm-manage.el (exwm-manage--on-ConfigureRequest): Allow (non-fullscreen) floating X windows to resize themselves. 2016-03-06 Chris Feng Untabify 2016-03-04 Chris Feng Allow moving/resizing undecorated X windows * exwm-manage.el (exwm-manage--manage-window): Do not manage undecorated floating X windows (set in _MOTIF_WM_HINTS). * exwm-floating.el (exwm-floating--start-moveresize) (exwm-floating--stop-moveresize, exwm-floating--do-moveresize): Allow moving/resizing undecorated X windows with _NET_WM_MOVERESIZE client message. 2016-03-03 Chris Feng Handle buffer change after a buffer is killed * exwm-manage.el (exwm-manage--kill-buffer-query-function): Handle buffer change. * exwm-workspace.el (exwm-workspace--show-minibuffer): Revert the change made in 93e42136 (the problem has not been fully resolved). 2016-03-01 Chris Feng Avoid unnecessary input focus changes in line-mode * exwm-input.el (exwm-input--grab-keyboard, exwm-input--release-keyboard): Grab keys on X windows instead to prevent unexpected input focus changes. * exwm-workspace.el (exwm-workspace--show-minibuffer): The workaround for cursor flickering issue is no more needed. 2016-02-28 Chris Feng Simplify `exwm-workspace--display-buffer' * exwm-workspace.el (exwm-workspace--display-buffer): Make it simpler and more reliable. 2016-02-26 Chris Feng Do not wait for WM_STATE property events * exwm-layout.el (exwm-layout--show, exwm-layout--hide): Save the state directly. 2016-02-26 Chris Feng Minor fixes for layout and workspace * exwm-layout.el (exwm-layout-show-mode-line): Force update mode-line. * exwm-workspace.el (exwm-workspace--update-minibuffer): Treat nil as empty string. 2016-02-25 Chris Feng Fix exwm-workspace-switch-to-buffer * exwm-workspace.el (exwm-workspace-switch-to-buffer): Select the floating frame when switching to a floating X window buffer. 2016-02-25 Chris Feng Bump version to 0.4 2016-02-25 Chris Feng Allow user to hide floating X windows * exwm-core.el (exwm-mode-map): Add a new key to hide floating X windows. * exwm-floating.el (exwm-floating-hide): New command to hide a floating X window. * exwm-workspace.el: Fix a compile warning. 2016-02-24 Chris Feng Refresh the workspace after creating a floating X window * exwm-floating.el (exwm-floating--set-floating): Refresh the workspace (since auto-refresh was disabled). 2016-02-24 Chris Feng Fix issues with moving X windows between workspaces * exwm-workspace.el (exwm-workspace-move-window): Select the moved floating X window. Update the 'exwm-selected-window' frame parameter. (exwm-workspace-switch): Check 'exwm-selected-window' for dead windows. (exwm-workspace-switch-to-buffer): Allow non-interactive call. 2016-02-23 Chris Feng Make input focus revert to pointer root * exwm-input.el (exwm-input--set-focus): Input focus should not revert to parent (which was the Emacs frame) any more. 2016-02-22 Chris Feng Bump version to 0.3 2016-02-21 Chris Feng Fix emacsclient related issues * exwm-systemtray.el (exwm-systemtray-height): The value is not available when emacsclient has just loaded the library (and it crashes emacsclient). * exwm-workspace.el (exwm-workspace--init): Set `default-minibuffer-frame' later to prevent it from being modified when using emacsclient. * exwm-floating.el: * exwm-randr.el: * exwm-systemtray.el: * exwm-workspace.el: * exwm.el: Use `exwm-workspace--minibuffer-own-frame-p' instead of the raw variable. 2016-02-21 Chris Feng Various fixes for floating X windows * exwm-floating.el (exwm-floating--set-floating): Always create floating X windows on current workspace. * exwm-workspace.el (exwm-workspace-switch): Restore selected floating frames. * exwm-workspace.el (exwm-workspace-move-window): Restore the position of floating X windows. Recreate floating frames when using fixed minibuffer. Restack tiling X windows. 2016-02-21 Chris Feng Fix the advice function for ido-buffer-window-other-frame * exwm-config.el (exwm-config--ido-buffer-window-other-frame) (exwm-config--fix/ido-buffer-window-other-frame): Do not use advice. Fix issues when switching form/to floating frames. 2016-02-20 Chris Feng Prevent Emacs frames from restacking themselves Putting Emacs frames (workspace frames, floating frames) into dedicated containers greatly simplifies the stacking order management and totally fixes relevant issues. * exwm-floating.el (exwm-floating--set-floating): Create floating frame container. Remove redundant stacking order modification code. (exwm-floating--unset-floating): Destroy the floating frame container. No need to reparent the X window container. (exwm-floating--do-moveresize): Resize the floating frame container. * exwm-input.el (exwm-input--update-focus): No need to restack frames. * exwm-layout.el (exwm-layout--show, exwm-layout--set-frame-fullscreen) (exwm-layout-enlarge-window): Resize the floating frame container. * exwm-manage.el (exwm-manage--on-ConfigureRequest): Re-enable stacking order modification on ConfigureRequest. * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Reparent out all frames on exit. No need to remove selected events or created resources. (exwm-workspace--init): Create workspace frame containers. * exwm-layout.el (exwm-layout-set-fullscreen): * exwm-manage.el (exwm-manage--unmanage-window): Remove a redundant call to `xcb:flush'. * exwm-manage.el (exwm-manage--unmanage-window): Force unmap the X window. Unmap the floating frame before reparent it. 2016-02-20 Chris Feng Prevent/Reduce flickering issues with floating X windows * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating): Prevent flickering when creating/removing a floating X window. * exwm-layout.el (exwm-layout--show): Show X windows after resizing to prevent flickering. * exwm-manage.el (exwm-manage--unmanage-window): Reduce flickering by hiding the container. (exwm-manage--kill-buffer-query-function): Prevent flickering by hiding the container (except that the X window destroys itself after receiving the WM_DELETE_WINDOW client message). 2016-02-20 Chris Feng Redefine mode-specific keys * exwm-core.el (exwm-mode-map): Redefine mode-specific keys to comply with the key binding conventions. 2016-02-19 Chris Feng Minor fixes for system tray * exwm-systemtray.el (exwm-systemtray--embed): Default to visible if the XEMBED_MAPPED flag is not set. (exwm-systemtray--on-ClientMessage): Only embed new icons. Ignore balloon messages. 2016-02-19 Chris Feng Fix system tray issues after updating workspaces * exwm-workspace.el (exwm-workspace-switch-hook): New hook run by `exwm-workspace-switch'. * exwm-randr.el (exwm-randr-refresh-hook): New hook run by `exwm-randr--refresh'. * exwm-systemtray.el (exwm-systemtray--on-randr-refresh) (exwm-systemtray--on-workspace-switch, exwm-systemtray--init): Update the system tray in `exwm-randr-refresh-hook' and `exwm-workspace-switch-hook'. * exwm-layout.el (exwm-layout--set-frame-fullscreen): * exwm-workspace.el (exwm-workspace--post-init): Wait until all workspace frames are set fullscreen. * exwm-workspace.el (exwm-workspace--current-width) (exwm-workspace--current-height): New functions for retrieving the width and height of the current workspace. * exwm-layout.el (exwm-layout-set-fullscreen): * exwm-manage.el (exwm-manage--manage-window) (exwm-manage--on-ConfigureRequest): * exwm-systemtray.el (exwm-systemtray--refresh, exwm-systemtray--init): * exwm-workspace.le (exwm-workspace--resize-minibuffer-frame) (exwm-workspace--on-ConfigureNotify): Switch to `exwm-workspace--current-width' and `exwm-workspace--current-height'. * exwm-core.el: * exwm-floating.el: * exwm-floating.el: * exwm-input.el: * exwm-layout.el: * exwm-manage.el: * exwm-randr.el: * exwm-systemtray.el: * exwm-workspace.el: * exwm.el: Clean up loading file. Set/Unset some functions as commands. * README.md: Add intro to system tray. 2016-02-19 Chris Feng Add system tray support * exwm-systemtray.el: New module adds a simple system tray (using the X11 System Tray protocol). * exwm-workspace.el (exwm-workspace-switch-hook, exwm-workspace-switch): New hook run after switching workspace. 2016-02-18 Chris Feng Fix floating X window bugs introduced by 9c95c03e * exwm-floating.el (exwm-floating--set-floating): Make floating frames invisible before resizing them. (exwm-floating--fit-frame-to-window): Removed since unused. * exwm-layout.el (exwm-layout-hide-mode-line, exwm-layout-show-mode-line): Use set frame height instead of exwm-floating--fit-frame-to-window. * exwm-core.el (exwm-mode): Replace `exwm-manage--close-window' with `exwm-manage--kill-buffer-query-function'. * exwm-floating.el (exwm-floating--unset-floating): Reparent out floating frames. * exwm-manage.el (exwm-manage--unmanage-window): Reparent out floating frames. Hide floating frames. (exwm-manage--close-window, exwm-manage--kill-buffer-query-function): Rename `exwm-manage--close-window' since it's only used in `kill-buffer-query-functions'. Reparent out floating frames. 2016-02-12 Chris Feng Bump version to 0.2 2016-02-12 Chris Feng Postpone making workspace frames fullscreen * exwm-workspace.el (exwm-workspace--init, exwm-workspace--post-init): Move work to postpone to the new function `exwm-workspace--post-init'. * exwm.el (exwm-init): Call `exwm-workspace--post-init' after `exwm--unlock`. 2016-02-09 Chris Feng Fix bugs on managing/unmanaging X windows * exwm-manage.el (exwm-manage--scan): Unmap X windows before managing them. (exwm-manage--on-UnmapNotify): Do not ignore synthetic UnmapNotify events (according to ICCCM). Do not use the `from-configure' slot which was mistakenly introduced due to the bug in `exwm-manage--scan'. * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Do more cleanups. 2016-02-07 Chris Feng Eliminate compilation warnings 2016-02-07 Chris Feng Unmanage X windows on exit * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): New function called on exit to unmanage X windows. (exwm-workspace--init): Set `confirm-kill-emacs' to `exwm-workspace--confirm-kill-emacs'. * exwm-manage.el (exwm-manage--on-UnmapNotify): Ignore UnmapNotify event generated as a result of parent being resized. 2016-02-07 Chris Feng Add some useful key bindings * exwm-core.el (exwm--floating-mode-line-format, exwm--mode-line-format) (exwm-mode-map): * exwm-floating.el (exwm-floating-hide-mode-line) (exwm-floating-show-mode-line): * exwm-layout.el (exwm-layout-hide-mode-line, exwm-layout-show-mode-line) (exwm-layout-toggle-mode-line): Allow hide/show mode-line for all `exwm-mode' buffers with 'C-c M'. * exwm-config.el (exwm-config-default): Add simulation keys for 'C-d' and 'C-k'. 2016-02-07 Chris Feng Remove an assertion * exwm-randr.el (exwm-randr--refresh): There can be no valid output sometimes. 2016-02-06 Felix Lange Resize minibuffer only when it's in its own frame 0e4055d3392 introduced a few calls to exwm-workspace--resize-minibuffer in various places. This function only works when the minibuffer is displayed in its own frame but was called unconditionally in some cases. Fix it by wrapping all calls in an appropriate conditional and add an assertion. Also rename the function so it is clearer that it resizes a frame, which might prevent calling it unconditionally in the future. 2016-02-06 Chris Feng Improve bc80eefe * exwm-layout.el (exwm-layout--set-frame-fullscreen): * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--resize-minibuffer): (exwm-workspace-switch): * exwm.el (exwm--on-ClientMessage): Calling `exwm-workspace-switch' in bc80eefe does not work correctly sometimes. This commit improves it by directly specify the geometry info rather than getting it from Emacs frame. 2016-02-06 Chris Feng Fix multi-monitor/fullscreen issues * exwm-randr.el (exwm-randr--refresh): Correct the _NET_WORKAREA property. Reconfigure the current workspace when screen changes. (exwm-randr--init): Run `exwm-randr-screen-change-hook' to take into account already attached monitor(s), * exwm.el (exwm--on-ClientMessage): Reconfigure the current workspace when it's fullscreen. 2016-02-06 Chris Feng Add auto-hiding minibuffer support * exwm-floating.el (exwm-floating--set-floating): Take auto-hiding minibuffer into account when calculating available height. (exwm-floating--unset-floating): Restack the container to avoid further restacking. * exwm-input.el (exwm-input--update-focus): Use more accurate restacking. (exwm-input--on-minibuffer-setup): Replaced by `exwm-layout--on-minibuffer-setup' and `exwm-workspace--on-minibuffer-setup'. (exwm-input-command-whitelist, exwm-input--during-command) (exwm-input--on-KeyPress-line-mode): The functionality of `exwm-input-command-whitelist' is replaced by `exwm-input--during-command', which can automatically tell whether functions like `read-event' are being called. (exwm-input--init): Add/remove corresponding hooks. * exwm-layout.el (exwm-layout--on-minibuffer-setup): Also set input focus. (exwm-layout--on-echo-area-change): New function for refreshing layout when the size of echo area changes. (exwm-layout--init): Track size changes for fixed minibuffer and echo area. * exwm-manage.el (exwm-manage--on-ConfigureRequest): Never grant restacking requests initiated by other clients. * exwm-workspace.el (exwm-workspace--minibuffer): New variable for the auto-hiding minibuffer. (exwm-workspace-minibuffer-position): For setting the position of the auto-hiding minibuffer. (exwm-workspace-display-echo-area-timeout): Seconds before echo area auto-hides. (exwm-workspace--display-echo-area-timer): The corresponding timer. (exwm-workspace-switch): Configure the auto-hiding minibuffer when switching workspace. (exwm-workspace--update-minibuffer): New function for adjusting the height of the auto-hiding minibuffer. (exwm-workspace--on-ConfigureNotify): New function for configuring the container of the auto-hiding minibuffer. (exwm-workspace--display-buffer): New function for forcing `minibuffer-completion-help' to use the workspace frame. (exwm-workspace--show-minibuffer, exwm-workspace--hide-minibuffer): New functions for showing/hiding the auto-hiding minibuffer (container). (exwm-workspace--on-minibuffer-setup, exwm-workspace--on-minibuffer-exit): New functions called when the auto-hiding minibuffer entered/exists. (exwm-workspace--on-echo-area-dirty, exwm-workspace--on-echo-area-clear): New functions when the auto-hiding echo area is ready to show/hide. (exwm-workspace--init): Set up the auto-hiding minibuffer and workspace frames. Track sizes changes for auto-hiding minibuffer and echo area. No need to set OverrideRedirect on workspace frames. * exwm.el (exwm--init-icccm-ewmh): Correct the value of _NET_WORKAREA. 2016-02-03 Chris Feng Merge branch 'feat/virtual-root' 2016-02-03 Chris Feng Avoid unnecessary changes of stacking order * exwm-input.el (exwm-input--update-focus): Only restack a tiling X window when it's not the last but one sibling. This should reduce flickering. 2016-02-03 Chris Feng Rework the X windows hierarchy model This commit add workspace and X window containers support to avoid using Emacs frames as the parents of X windows. This should make it easier to set input focus. * exwm-core.el (exwm--container, exwm--floating-frame-position): New file local variables. (exwm--floating-frame-geometry): Removed file local variable. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating, exwm-floating--do-moveresize) (exwm-floating-move): Use container. (exwm-floating--fit-frame-to-window): No longer adjust stacking order. (exwm-floating--fit-frame-to-window): The first member is changed to buffer. (exwm-floating--start-moveresize): Use container. Correctly set input focus. * exwm-input.el (exwm-input--redirected, exwm-input--on-focus-in): Removed. (exwm-input--on-buffer-list-update): Remove the restriction on floating frames which is no longer valid. (exwm-input--update-focus): Adjust stacking order. (exwm-input--on-minibuffer-setup): New function for setting focus on the Emacs frame when entering minibuffer. (exwm-input--on-KeyPress-line-mode): No longer compensate FocusOut event. (exwm-input--grab-keyboard, exwm-input--release-keyboard): Local keys are now grabbed on the X window container. (exwm-input--init): Add `exwm-input--on-minibuffer-setup' to `minibuffer-setup-hook'. * exwm-layout.el (exwm-layout--resize-container): New function to resize/reposition both the X window and its container. (exwm-layout--show, exwm-layout--hide): Use container. (exwm-layout-set-fullscreen): Use container. No longer save width and height. (exwm-layout-unset-fullscreen, exwm-layout--set-frame-fullscreen): Use container. (exwm-layout--refresh): Update a frame parameter. Remove dead code. * exwm-manage.el (exwm-manage--manage-window): Reparent unmanaged X windows to the workspace. Create X window container as the parent of the X window. (exwm-manage--unmanage-window): Unmap/destroy container when appropriate. Use the position of container. (exwm-manage--unmanage-window): Destroy the container. * exwm-randr.el (exwm-randr--refresh): Resize workspace using container. * exwm-workspace.el (exwm-workspace-switch): Raise workspace. Correctly set input focus. (exwm-workspace--on-focus-in): Removed. (exwm-workspace-move-window): Reparent to workspace container. (exwm-workspace--init): Create workspace frames as visible. Create workspace containers. Remove exwm-workspace--on-focus-in from focus-in-hook. Update _NET_VIRTUAL_ROOTS. * exwm.el (exwm-init): No longer disable hourglass window. Initialize workspace module before input. * exwm-core.el (exwm--debug): New macro for setting debug forms. * exwm-floating.el (exwm-floating--set-floating): No longer do `exwm--lock' and `exwm--unlock' since `make-frame' is already adviced to take care of everything. Correctly set input focus to the newly created floating X window. * exwm-core.el (exwm--floating-edges): Removed file local variable. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating): * exwm-layout.el (exwm-layout--show, exwm-layout-enlarge-window): * exwm-manage.el (exwm-manage--on-ConfigureRequest): No longer use floating geometry. * exwm-input.el (exwm-input--update-global-prefix-keys): Grab global keys on workspaces containers instead of the root window (or input focus would transfer to the workspace containing the pointer when the grab is active). * exwm-workspace.el (exwm-workspace-switch): No longer move mouse. 2016-02-02 Chris Feng Update copyright year to 2016 2015-12-13 Chris Feng Remove the MappingNotify event listener * exwm-input.el (exwm-input--on-MappingNotify, exwm-input--init): Remove the event listener for MappingNotify event (it should be handled in the underling library instead). 2015-12-11 Chris Feng Add support for desktop and dock * exwm-manage.el (exwm-manage--manage-window): Add support for _NET_WM_WINDOW_TYPE_DESKTOP and _NET_WM_WINDOW_TYPE_DOCK (they are not reparented). 2015-11-15 W. Greenhouse Limit X host-based auth permissions. We don't need more than the currently logged in user to have access to the X session, so don't grant X host access to other users. 2015-11-10 Chris Feng Fix a typo * exwm-manage.el (exwm-manage--on-MapRequest): Correct a wrong variable name. 2015-11-03 Chris Feng Bump version to 0.1 2015-11-02 Chris Feng Disable some incompatible features * exwm.el (exwm-init): exwm-config.el (exwm-config-misc): Disable dialog boxes and hourglass pointer by default. 2015-11-01 Chris Feng Add hook run when screen changes * exwm-randr.el (exwm-randr-screen-change-hook): New hook. (exwm-randr--init): Run the new hook in the event handler of ScreenChangeNotify. 2015-10-30 Chris Feng Use new calling conventions of xcb:keysyms * exwm-input.el: Use new calling conventions of xcb:keysyms 2015-10-29 Chris Feng Improve robustness of killing buffers * exwm-core.el (exwm-mode): Use the return value of exwm-manage--close-window. * exwm-manage.el (exwm-manage--close-window): Kill empty buffers; Handle X windows that does not support _NET_WM_PING. (exwm-manage--kill-client): Kill X windows supporting _NET_WM_PID with both SIGKILL and KillClient. 2015-10-29 Chris Feng Avoid mapping managed X windows on MapRequest * exwm-manage.el (exwm-manage--manage-window, exwm-manage--on-MapRequest): Check managed X windows in exwm-manage--on-MapRequest instead. 2015-10-28 Chris Feng Check KEYSYMs converted from events * exwm-input.el (exwm-input--update-global-prefix-keys) (exwm-input--fake-key, exwm-input--init): Check the return value of xcb:keysyms:event->keysym. 2015-10-28 Chris Feng Add demo configurations * exwm-config.el: Demo EXWM configurations. * xinitrc: Demo xinitrc file. * exwm.el (exwm-enable-ido-workaround, exwm-disable-ido-workaround): Partly moved to exwm-config.el. 2015-10-28 Chris Feng Make the creation/destruction of floating frames more silent * exwm-floating.el (exwm-floating--set-floating): Reparent floating frames as late as possible. * exwm-manage.el (exwm-manage--unmanage-window): Hide floating frames first on unmanagement. 2015-10-28 Chris Feng Minor input focus fix * exwm-input.el (exwm-input--on-buffer-list-update): Schedule input focus switch with idle timer. 2015-10-27 Chris Feng Delay closing minibuffer * exwm-workspace.el (exwm-workspace-switch, exwm-workspace--on-focus-in): Delay closing minibuffer until Emacs is idle. This prevent nonlocal exits from interrupting remaining code. 2015-10-26 Chris Feng Fix problems introduced/exposed by last commit * exwm-workspace.el (exwm-workspace-switch, exwm-workspace--on-focus-in): Use handle-switch-frame instead of exwm-workspace--switch-count to filter out events. * exwm-workspace.el (exwm-workspace--init): Delay making workspaces fullscreen. * exwm-workspace.el (exwm-workspace-move-window): * exwm-floating.el (exwm-floating--set-floating): * exwm-layout.el (exwm-layout--refresh): `set-buffer-major-mode` does not accept buffer names. 2015-10-25 Chris Feng Fix workspace switch issues * exwm-core.el (exwm--make-emacs-idle-for): Removed. * exwm-workspace.el (exwm-workspace--switch-count): New variable. (exwm-workspace-switch): Increase exwm-workspace--switch-count when necessary; Remove the call to exwm--make-emacs-idle-for. (exwm-workspace--on-focus-in): Consume exwm-workspace--switch-count. * exwm-workspace.el (exwm-workspace--on-focus-in): Close active minibuffer. 2015-10-19 Chris Feng Close the (possible) active minibuffer when switching workspace * exwm-workspace.el (exwm-workspace-switch): An active minibuffer on another workspace might cause problems for input. Closing it should be sufficient. 2015-10-17 Chris Feng Allow certain commands to receive key events in line-mode * exwm-input.el (exwm-input-command-whitelist): New variable. (exwm-input--on-KeyPress-line-mode): Allow certain commands which receive inputs without using the minibuffer to work in line-mode. 2015-10-11 Chris Feng Improve robustness * exwm-input.el (exwm-input--update-focus, exwm-input--on-ButtonPress): Make sure Emacs windows are alive before manipulating them. 2015-10-10 Chris Feng Restrict the check of _MOTIF_WM_HINTS * exwm-manage.el (exwm-manage--manage-window): Restrict the check of _MOTIF_WM_HINTS to only Java applications (since some other applications like Evince would also set it). 2015-10-01 Chris Feng Fix a position calculation error on multi-monitor settings * exwm-floating.el (exwm-floating--set-floating): Always use relative positions. 2015-09-27 Chris Feng Work around subrs that block EXWM; other minor fixes Some subrs (e.g. x-file-dialog) create X windows and block the execution of EXWM, so they won't work normally. This commit partly fixes this issue by invoking them in a subordinate Emacs instance and trying to fetch the result back. * exwm.el (exwm-blocking-subrs): New variable for specify such subrs. * exwm.el (exwm-enable, exwm--server-name, exwm--server-stop) (exwm--server-eval-at): The implementation. * exwm-core.el: * exwm-floating.el: * exwm-layout.el: * exwm-manage.el: * exwm-randr.el: Evaluate constants at compile-time. * README.md: Renamed from README.org to make the 'Commentary:' section used by GNU ELPA instead. * exwm.el: Depends on XELB version 0.3. 2015-09-25 Chris Feng Fix click-to-focus on multi-monitor settings * exwm-input.el (exwm-input--on-ButtonPress): [click-to-focus] Switch to the corresponding workspace if necessary. 2015-09-24 Chris Feng Fix a calculation error of the position of a floating frame * exwm-floating.el (exwm-floating--set-floating): The position of a floating frame should be relative to its workspace. 2015-09-23 Chris Feng Adjust default prefix keys; advice x-create-frame * exwm-input.el (exwm-input--on-KeyPress-line-mode, exwm-input-prefix-keys): Allow users to disable 'C-c' prefixed keys; Add 'C-c' to / remove 'M-!' from the default prefix keys. * exwm-workspace.el (exwm-workspace--x-create-frame, exwm-workspace--init): Advice `x-create-frame' to prevent it from hanging EXWM, making e.g. speedbar working. * exwm-floating.el (exwm-floating--set-floating): Remove the now unnecessary request that sets override-redirect on floating frames. 2015-09-21 Chris Feng Minor fixes for packaging * .gitignore: Add ELPA files. * exwm-workspace.el: Autoload exwm-workspace-switch. * README.org: Renamed from README.md; add an installation note. 2015-09-20 Chris Feng Fix input & input focus issues * exwm-manage.el (exwm-manage--manage-window): Only grab left/middle/right buttons. * exwm-input.el (exwm-input--on-ButtonPress): Only perform click-to-focus on unfocused X windows. * exwm-input.el (exwm-input--update-focus): Do not focus an X window on another workspace, but instead keep focusing on the current one and set exwm--urgency parameter on that frame. * exwm-input.el (exwm-input--fake-key): Send KeyRelease event (some applications reply on it). 2015-09-19 Chris Feng Manage non-floating windows without decorations * exwm-manage.el (exwm-manage--manage-window): Should manage non-floating windows without decorations. 2015-09-19 Chris Feng Check _MOTIF_WM_HINTS when attempting to manage an X window * exwm-core.el: New buffer-local variable exwm--mwm-hints. * exwm-manage.el: New variable exwm--atom-_MOTIF_WM_HINTS for holding the value of _MOTIF_WM_HINTS atom; new function exwm--update-mwm-hints for updating the _MOTIF_WM_HINTS property of an X window. * exwm-manage.el (exwm-manage--init): Intern the _MOTIF_WM_HINTS atom. * exwm-manage.el (exwm-manage--manage-window): Avoid managing windows without decoration (implied by _MOTIF_WM_HINTS). 2015-09-19 Chris Feng Avoid autoloading variables * exwm-floating.el: * exwm-layout.el: Avoid autoloading exwm-floating-border-width. * exwm-workspace.el: Avoid autoloading exwm-workspace--switch-history-outdated. 2015-09-18 Chris Feng Prevent Emacs cursor style change when pointer is in an X window * exwm-input.el (exwm-input--on-KeyPress-char-mode): Compensate FocusOut event by sending a synthetic FocusIn event to prevent the change of cursor style (e.g. box to hollow) when pointer is in an X window. 2015-09-18 Chris Feng Fix a compilation warning * exwm-floating.el: Autoload exwm-floating-border-width. 2015-09-18 Chris Feng Fix wrong/missing ConfigureNotify events * exwm-floating.el (exwm-floating--set-floating): Set exwm--floating-edges as absolute edges (the relative edges can be easily determined). * exwm-layout.el (exwm-layout--show): Send correct absolute positions to floating X windows. * exwm-floating.el (exwm-floating--stop-moveresize, exwm-floating-move): Send ConfigureNotify events after moving floating X windows. 2015-09-17 Chris Feng On-demand update exwm-workspace--switch-history * exwm-workspace.el (exwm-workspace--switch-history-outdated) (exwm-workspace--update-switch-history, exwm-workspace-switch) (exwm-workspace-move-window): * exwm.el (exwm--update-hints, exwm--on-ClientMessage): * exwm-floating.el (exwm-floating--set-floating): * exwm-manage.el (exwm-manage--manage-window, exwm-manage--unmanage-window): Update exwm-workspace--switch-history only when it's used. 2015-09-16 Chris Feng Allow showing buffers on other workspaces and moving an X window by switching to its buffer * exwm-workspace.el (exwm-workspace-show-all-buffers, exwm-workspace-switch) (exwm-workspace-move-window, exwm-workspace-switch-to-buffer): Show buffers on other workspaces if `exwm-workspace-show-all-buffers' is non-nil. * exwm-layout.el (exwm-layout-show-all-buffers, exwm-layout--refresh): Allow moving an X window by switch to its corresponding buffer from another workspace when `exwm-layout-show-all-buffers' is non-nil. * exwm.el (exwm--ido-buffer-window-other-frame): Handle the case when `exwm-layout-show-all-buffers' is non-nil. * exwm-floating.el (exwm-floating--set-floating): Handle the case when *scratch* buffer is killed. * exwm-workspace.el (exwm-workspace-switch-to-buffer): Renamed from `exwm-workspace-switch-to-window' to better reflect its role. 2015-09-11 Chris Feng Fix with-slots * exwm-randr.el (exwm-randr--refresh): Could not set the name slot in xcb:randr:GetOutputInfo~reply, turn to another variable. 2015-09-11 Chris Feng Minor fix for window move * exwm-workspace.el (exwm-workspace-move-window): Move to selected instead of the first window of a frame (workspace). 2015-09-11 Chris Feng Implement move/resize with keyboard * exwm-floating.el: Remove an invalid TODO item. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating-hide-mode-line, exwm-floating-show-mode-line): Set window-size-fixed only for fixed-size floating windows. * exwm-floating.el (exwm-floating-move): New function for moving a floating window. * exwm-layout.el (exwm-layout-enlarge-window) (exwm-layout-enlarge-window-horizontally, exwm-layout-shrink-window) (exwm-layout-shrink-window-horizontally): New commands for interactively resizing a floating window. 2015-09-11 Chris Feng Allow switch to normal buffers in exwm-workspace-switch-to-window * exwm-workspace.el (exwm-workspace-switch-to-window): Allow switch to normal buffers. 2015-09-09 Chris Feng Add a command to interactively move X window to the current workspace * exwm-workspace.el (exwm-workspace-move-window): Hide buffer on the original Emacs window when moving an X window to the current workspace. * exwm-workspace.el: New function exwm-workspace-switch-to-window for interactively moving an X window on another workspace to the current one. 2015-09-09 Chris Feng Add support for xcb:Atom:_NET_CLIENT_LIST_STACKING etc The _NET_CLIENT_LIST_STACKING EWMH property is essential for e.g. the tabbar of chromium to work correctly. * exwm-input.el: Remove invalid TODO item. * exwm.el (exwm--init-icccm-ewmh): Add xcb:Atom:_NET_CLIENT_LIST and xcb:Atom:_NET_CLIENT_LIST_STACKING to _NET_SUPPORTED. * exwm-layout.el (exwm-layout--refresh): Update _NET_CLIENT_LIST_STACKING. * exwm-manage.el (exwm-manage--manage-window, exwm-manage--unmanage-window): Update _NET_CLIENT_LIST. 2015-09-07 Chris Feng Allow hide/show mode-line on floating frames * exwm-core.el: new buffer-local variable exwm--floating-mode-line-format for saving mode-line-format when mode-line is hidden * exwm-floating.el (exwm-floating--fit-frame-to-window) (exwm-floating-hide-mode-line, exwm-floating-show-mode-line): new functions for resizing frames, hiding/showing mode-line respectively; (exwm-floating--set-floating): use exwm-floating--fit-frame-to-window to resize frames 2015-09-06 Chris Feng Code cleanups * exwm-workspace.el (exwm-workspace--update-switch-history): use `aref' instead of `elt' to index vectors * .elpaignore: ignore README.md 2015-09-04 Chris Feng Prepare for GNU ELPA release * Transfer copyright to Free Software Foundation * Add packaging components (e.g. headers) * Coding style fixes: + Quote functions with "#'" + Wrap long lines + Fix doc strings / comments * Replace `string-to-int' with `string-to-number' * Fix compiling errors / eliminate compiling warnings + Add exwm-core.el to hold common variables, functions and macros * Remove the redundant COPYING file * Add .gitignore * Rename README to README.md 2015-09-03 Chris Feng Ungrab pointer timely when resizing is aborted * exwm-floating.el (exwm-floating--start-moveresize): when resizing type cannot be decided, ungrab the previously grabbed pointer. 2015-08-28 Philip Minor fix 2015-08-28 Chris Feng Drop intro to xelb-util 2015-08-27 Chris Feng Avoid deleting the frame created by Emacs client by accident When Emacs is invoked as `emacsclient -a '' -c`, it creates a frame that can be deleted without any prompt. This commit removes the `client` parameter from that frame to avoid such inconvenience. 2015-08-27 Chris Feng Re-enable complete refresh of keyboard mapping Since the performance of `xcb:keysyms:update-keyboard-mapping` is no longer an problem, we allow every possible refresh of keyboard mapping again. 2015-08-27 Chris Feng Fix window size calculations * When sending the synthetic ConfigureNotify event, make sure we are dealing with the correct Emacs window * When managing a floating window, ensure it can be easily pick up by the user 2015-08-26 Chris Feng Fix `exwm-workspace-rename-buffer` Ensure buffer names are unique. 2015-08-26 Chris Feng Correct several EWMH properties The following EWMH properties on the root window are corrected in this commit: _NET_VIRTUAL_ROOTS, _NET_WORKAREA and _NET_DESKTOP_VIEWPORT. 2015-08-26 Chris Feng Replay KeyPress events instead of fake them in line-mode X windows in line-mode receive KeyPress events faked with SendEvent requests previously. This causes many problems including: * Some applications (e.g. xterm) ignore synthetic events completely * KeyPress and KeyRelease evnets arrive disorderly This commit makes EXWM exploiting AllowEvents requests (in ReplayKeyboard mode) to forward KeyPress events to X windows instead. 2015-08-25 Chris Feng Merge pull request #42 from pipcet/ewmh-fullscreen Avoid using the "no window manager" code in Emacs 2015-08-24 Philip Avoid using the "no window manager" code in Emacs * exwm.el (exwm--on-ClientMessage): Handle fullscreen requests for frames. (exwm-init): Initialize workspaces after unlocking events. * exwm-workspace.el (exwm-workspace--init): Create frames as invisible, then make them visible only once their OverrideRedirect property has been set. * exwm-randr.el (exwm-randr--refresh): New frame parameter `exwm-geometry'. * exwm-layout.el (exwm-layout--set-frame-fullscreen): New function. The Emacs code is buggy, see https://github.com/ch11ng/exwm/issues/39 https://github.com/ch11ng/exwm/pull/42 2015-08-24 Chris Feng Only manage windows mapped as the direct children of root window (close #38) Sometimes Emacs create child windows of virtual roots. This commit ensures EXWM will not manage them. 2015-08-17 Chris Feng Merge branch 'move-window-fix' of https://github.com/pipcet/exwm into pipcet-move-window-fix 2015-08-17 Philip Improve code robustness. * exwm-layout.el (exwm-layout-unset-fullscreen) (exwm-layout-set-fullscreen): Use `user-error' rather than `cl-assert'. * exwm-input.el (exwm-input--set-focus): Silently accept unknown ids. (exwm-input--grab-keyboard) (exwm-input--release-keyboard): Silently ignore calls for windows that have no buffer. * exwm-manage.el (exwm-manage--kill-client): Don't throw error when trying to kill a vanished window. 2015-08-17 Philip fix buffer renaming per https://github.com/ch11ng/exwm/pull/30 2015-08-16 Philip Fix bug when moving a window to the current workspace * exwm-workspace.el (exwm-workspace-move-window): Run reparenting code when moving a window to the current workspace. 2015-08-16 Chris Feng Provide hooks run when the floating state of a window changes (close #28) 2015-08-14 Chris Feng Honor `value-mask` field in ConfigureRequest event Some applications (e.g. JNLP) don't set correct values for fields not mentioned in `value-mask`. This commit corrects this bug together with another Java AWT specific problem. 2015-08-13 Chris Feng Fix input focus stealing This was fixed in b755296 but broken by 04e4269. 2015-08-13 Chris Feng Fix multi-screen bugs * RandR module is now made optional; users can enable it with `exwm-randr-enable`. * Correct the calculation of sizes/coordinates at various places. * Input focus is now tracked with (Emacs) window instead of buffer since the latter can be ambiguous in multi-screen settings. 2015-08-13 Chris Feng Minor fixes for emacsclient 2015-08-12 Chris Feng Improve input focus switch mechanism This commit should fix most input focus bugs (especially those related to floating windows). The actual settings of input focus are delayed to exclude redundant event. Dead code since this commit is removed. This commit also fixes a bug for non-floating windows converted form floating state. The workaround for `ido-mode` is also improved to properly handle `exwm-mode` buffers. 2015-08-11 Chris Feng Center floating windows by default This commit makes a floating window centered to its leading window if it has a valid WM_TRANSIENT_FOR property set. Other it's placed at the center of the screen. 2015-08-11 Chris Feng Fix buffer switch problems * Prevent switching to floating windows or windows on other workspaces * Provide a workaround for `ido-mode` (can be enabled with `(exwm-enable-ido-workaround)`) 2015-08-11 Chris Feng Remove redundant code caused by the concurrency of events (contd, 2) * Remove locks that are no longer required * Also fix #20 (inactive workspace frame steals input focus) 2015-08-10 Chris Feng Ignore repeated `MappingNotify` events For some reason, `MappingNotify` events are generated quite frequently and greatly impact the performance. This commit disables the complete refresh of keyboard mapping. 2015-08-10 Chris Feng Remove redundant code caused by the concurrency of events (continued) Remove `exwm--with-current-id`, which was introduced to as a wrapper to `with-current-buffer` to do extra checks. Note that in functions run as hooks, the validation of window ID is still required as they are not synchronized with events. 2015-08-10 Chris Feng Fix emacsclient bugs `emacsclient` started with `-c` or `-t` argument create a new frame that shall not be used to manage X windows. Also fix some related input focus issues (with some remaining unfixed). Close #17. 2015-08-09 Chris Feng Remove redundant code caused by the concurrency of events With the introduction of ch11ng/xelb@6a7bccc, many weird behaviors should disappear. These include by not limit to * race conditions when managing a window (a workaround is provided in @14628a9) * race conditions when unmanaging a window This commit removes some corresponding code. 2015-08-09 Chris Feng Refresh when minibuffer grows (fix #10) The expansion of echo area is not handled however. 2015-08-08 Chris Feng Show moved window by default 2015-08-08 Chris Feng Correct layout refresh problems * Relax the conditions to refresh layout; this may introduce some overheads though * Fix the problem when `*scratch*` buffer is killed; close #12 * Enhance `exwm-reset` by forcing layout refresh in it. This should allow users to overcome some layout bugs 2015-08-08 Chris Feng Fix some input focus issues * Fix input focus lost after moving window to another workspace * Enhance `exwm-reset` to provide user a way to reset input focus when it's lost unexpectedly 2015-08-08 Chris Feng Fixes for manage/unmanage window * Make sure `exwm-manage--manage-window-queue` is cleaned * Improve input focus handling after unmanaging a window * Remove a redundant call to `exwm-layout--show` 2015-08-07 Chris Feng Fix race conditions when managing a window Since it takes some time for EXWM to create a buffer for a window (to do some checking for example), the window may send several MapRequest events before it's mapped. This commit should fix such issue. 2015-08-07 Chris Feng Fix input focus lost after closing window Also insert some debug messages. 2015-08-07 Chris Feng Various input fixes * Fix `exwm-reset` * Make input mode buffer local * Allow window to stay in `char-mode` while setting input focus to other window or switching to other workspace 2015-08-06 Chris Feng Check buffer mode in exwm-reset This should prevent users from misoperation. 2015-08-06 Chris Feng Fix fullscreen issues * Correct ConfigureNotify events sent to fullscreen windows. * Exit fullscreen mode before switching workspace. * Temporarily treat `xcb:Atom:_NET_WM_STATE_ABOVE` as `xcb:Atom:_NET_WM_STATE_FULLSCREEN` since a) "plugin-container" (Flash Player) seems only set this, and b) it's not normally used by applications. This makes fullscreen videos working in e.g. iceweasel. 2015-08-05 Chris Feng Drop intro to EXIM 2015-08-05 Chris Feng Various fixes * Prevent marking the end of a key sequence with a single `C-u'. * Enable `C-u' prefix for key simulation since it's not possible for users to define simulation keys starting with `C-u'. * Make Emacs idle only after the visual parts are updated to prevent from disturbing users. * Should use '?\s' instead of '? '. 2015-08-05 Markus S. Fix typos 2015-08-03 Chris Feng Add basic RandR support This implementation is analogous to that in i3-wm, which requires external tools to properly configure RandR first. 2015-07-26 Chris Feng Fix potential naming conflicts Buffers may share a same name (without the possible leading space) when created in different workspaces. 2015-07-19 Chris Feng Various fixes Remove wrong shift modifiers. Hide a Window when it's moved to another workspace. 2015-07-18 Chris Feng Various fixes for workspace Fixes for full screen, move window, etc. 2015-07-18 Chris Feng Add wiki link to README 2015-07-18 Chris Feng Improve move/resize The type of move/resize is consistent during one complete operation. So there is no need to judge it on every mouse motion. 2015-07-17 Chris Feng First commit