about summary refs log tree commit diff
path: root/exwm-workspace.el
AgeCommit message (Collapse)AuthorFilesLines
2016-08-15 Do not set _NET_WORKAREAChris Feng1-7/+2
* 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-12 Fix _NET_DESKTOP_VIEWPORTChris Feng1-5/+0
* 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 Raise all docks/panels when switching workspaceChris Feng1-12/+13
* 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 Check for _NET_WM_STATE_FULLSCREEN on managingChris Feng1-4/+11
* 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 Always put the desktop at bottomChris Feng1-3/+17
* 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 Fix CreateWindow attributesChris Feng1-15/+34
; 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-09 Update timestamp for WM_TAKE_FOCUS ClientMessageChris Feng1-0/+9
* 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-01 Fix emacsclient issuesChris Feng1-26/+30
* 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 Fix restarting issuesChris Feng1-19/+36
* 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 ; Eliminate compile warningsChris Feng1-4/+9
2016-07-31 Fix restarting issuesChris Feng1-5/+10
* 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 Add restart supportChris Feng1-33/+32
* 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 ; * exwm-workspace.el (exwm-workspace-switch): Input focus should be setChris Feng1-1/+1
; on the frame where the target window resides.
2016-07-30 set fullscreen-frame-count to 0 on exitingTaichi Uemura1-0/+1
2016-07-30 Fit the *Completions* bufferChris Feng1-1/+11
* 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 Fix input focus transfer between workspacesChris Feng1-13/+0
* 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-26 Always update input focus on entering minibufferChris Feng1-3/+1
* 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-25 Minor fixes for past few commitsChris Feng1-4/+3
* 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 Fix issues with deleting the last workspaceChris Feng1-8/+10
* 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 Add minibuffer toggle commandChris Feng1-0/+12
* 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 Improve the performance of workspace creationChris Feng1-5/+9
* 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 Fix input focus issues revealed by recent commitsChris Feng1-0/+1
* 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 Fix workspace creation and deletionChris Feng1-42/+86
* 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 Minor fixesChris Feng1-4/+18
* 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 Minor cleanupsChris Feng1-17/+10
; Eliminate compile warnings. ; Rename frame parameter 'exwm--urgency' to 'exwm-urgency'. ; Simplify expressions.
2016-07-19 Add support for attachable/detachable minibufferChris Feng1-41/+108
* 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 Fix an bug for emacsclientChris Feng1-8/+4
* exwm-workspace.el (exwm-workspace--init): Always create one initial workspace by default.
2016-07-19 Fix a workspace switch issueChris Feng1-4/+10
* exwm-workspace.el (exwm-workspace--switch-map-nth-prefix): Add more checking conditions.
2016-07-19 Merge branch 'medranocalvo/dynamic-workspaces' into externals/exwmChris Feng1-249/+537
2016-07-19 Adapt dynamic workspace for RandR moduleChris Feng1-4/+11
* 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 Adapt dynamic workspace for floating moduleChris Feng1-7/+13
* 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 Improve the handling of workspacesChris Feng1-10/+65
* 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 Fix various minor issuesChris Feng1-51/+99
; 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 Fix 2 dock-related issuesChris Feng1-12/+16
* 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 * exwm-workspace.el (exwm-workspace--init): Rebalance parentheses.Chris Feng1-2/+2
2016-07-17 Remove `exwm-worspace-number'Adrián Medraño Calvo1-36/+63
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 Support adding and removing workspacesAdrián Medraño Calvo1-145/+223
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 Support moving workspacesAdrián Medraño Calvo1-1/+15
* exwm-workspace.el (exwm-workspace-move-workspace): New function to move a workspace to a certain position.
2016-07-17 Support swapping workspacesAdrián Medraño Calvo1-0/+22
* exwm-workspace.el (exwm-workspace-swap-workspaces): New function to interchange the position of two workspaces.
2016-07-17 Factor out prompt for workspaceAdrián Medraño Calvo1-21/+14
* 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 Work with workspace frames instead of indicesAdrián Medraño Calvo1-94/+103
* 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 Move defvars to the topAdrián Medraño Calvo1-2/+2
* exwm-workspace.el (exwm-workspace--current) (exwm-workspace-current-index): Do it.
2016-07-17 New function exwm-workspace--workspace-pAdrián Medraño Calvo1-1/+5
* 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 Add helper for counting number of workspacesAdrián Medraño Calvo1-12/+17
* 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 Add `exwm-workspace--position' helperAdrián Medraño Calvo1-3/+10
* 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 Apply minibuffer in own frame configuration to created framesAdrián Medraño Calvo1-2/+16
* 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 Minor cleanupAdrián Medraño Calvo1-2/+1
* exwm-workspace.el (exwm-workspace--update-workareas): Use `make-list' instead of looping. 2016-07-16 Adrián Medraño Calvo <amcalvo@amclap>
2016-07-16 Add RandR support for docks and reuse workareasChris Feng1-113/+125
* 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 Add multi-dock support and fix fullscreen issues with dockChris Feng1-34/+71
* 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-14 Fix various stability issuesChris Feng1-1/+1
* 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.