Commit graph

541 commits

Author SHA1 Message Date
Adrián Medraño Calvo
ca7623349e Leave `client' frame parameter in place
EXWM removed the `client' frame parameter from workspace frames,
perhaps in order to lead Emacs to ask for confirmation before
quitting.  This change leaves the `client' frame parameter in
place.  Emacs no longer asks for confirmation when killing the
emacsclient session.  A followup commit will correct this.

* exwm-workspace.el (exwm-workspace--add-frame-as-workspace)
(exwm-workspace--init-minibuffer-frame, exwm-workspace--init)
(exwm-workspace--exit, exwm-workspace--post-init): Remove special
handling for `client' frames.  They become workspaces just like
any other frame.
2021-12-09 00:00:00 +00:00
Adrián Medraño Calvo
1aa4ca781d Support for killing the X terminal
Check whether frames are alive upon teardown, as it might not be
the case when the terminal is killed as
`delete-terminal-functions' might be invoked after the terminal is
deleted.

* exwm-core.el (exwm--terminal): New variable holding the terminal
EXWM runs under.
(exwm-init, exwm-exit): Set and unset it.

* exwm.el (exwm--on-delete-terminal): New function for exiting
EXWM when the terminal is deleted.
(exwm-init): Use it.

* exwm.el (exwm--confirm-kill-terminal, exwm-init): Ask for
confirmation before deleting terminal.

* exwm-workspace.el (exwm-workspace--fullscreen-workspace): New
function.  Ensure the frame is alive.
(exwm-workspace--add-frame-as-workspace): Use it.
(exwm-workspace--exit-minibuffer-frame): Cancel
`exwm-workspace--display-echo-area-timer'.
(exwm-workspace--exit-minibuffer-frame): Ensure the minibuffer
frame is alive.
(exwm-workspace--exit): Ignore dead workspace frames.
2021-12-09 00:00:00 +00:00
Adrián Medraño Calvo
a11bb099fb Refactor re-creation of last frame
* exwm-workspace.el (exwm-workspace--get-next-workspace): Return
nil when there's only one frame.
(exwm-workspace--on-delete-frame)
(exwm-workspace--remove-frame-as-workspace): Create a workspace
when removing the last one, for X windows to be moved to.
2021-12-09 00:00:00 +00:00
Adrián Medraño Calvo
62ffde76aa Refactor `exwm-workspace--get-remove-frame-next-workspace'
* exwm-workspace.el (exwm-workspace--prompt-delete)
(exwm-workspace--set-desktop): Stop explicitly moving X windows to
other workspace; dealt with by
`exwm-workspace--remove-frame-as-workspace'.
(exwm-workspace--get-remove-frame-next-workspace): Remove
function.  Refactored into `exwm-workspace--get-next-workspace'
and `exwm-workspace--remove-frame-as-workspace'.
(exwm-workspace--get-next-workspace): Add function.
(exwm-workspace--remove-frame-as-workspace): Move X windows to
next workspace.
2021-12-09 00:00:00 +00:00
Adrián Medraño Calvo
10bd12234e Bump version to 0.26 2021-11-10 00:00:00 +00:00
Adrián Medraño Calvo
08f20ea0b9 Fix previous commit "Remove duplicate code"
* exwm-layout.el (exwm-layout-unset-fullscreen):
`xcb:Atom:_NET_WM_STATE_FULLSCREEN' must be excised before
invoking `exwm-layout--show'.
2021-11-10 00:00:00 +00:00
Adrián Medraño Calvo
5098708c92 Correct wrong variable name
* exwm-workspace.el (exwm-workspace--on-delete-frame): Correct
misstyped name of variable `exwm-workspace--client-p-hash-table'.
2021-11-02 00:00:00 +00:00
Adrián Medraño Calvo
571ca227e7 Remove duplicate code
* exwm-layout.el (exwm-layout-unset-fullscreen): Remove double
removal of `xcb:Atom:_NET_WM_STATE_FULLSCREEN' from
`exwm--ewmh-state'.
2021-10-30 00:00:00 +00:00
Adrián Medraño Calvo
1bc66b6438 Merge branch 'mattbeshara.github.com/less-consy-workspace--client-p' into externals/exwm 2021-10-30 00:00:00 +00:00
Adrián Medraño Calvo
52a0b1c556 Merge branch 'tumashu.github.com/master' into externals/exwm 2021-10-30 00:00:00 +00:00
Adrián Medraño Calvo
deabe9c2df Bump version to 0.25 2021-10-30 00:00:00 +00:00
Adrián Medraño Calvo
c1206ac665 Update copyright year to 2021 2021-10-29 00:00:00 +00:00
Adrián Medraño Calvo
835a7add7c New maintainer 2021-10-29 00:00:00 +00:00
Matt Beshara
d0b0b38c87 Explicitly remove workspace frames from client-p cache when deleted
* exwm-workspace.el (exwm-workspace--on-delete-frame): Clean up
hash table entries upon removing a workspace.
2021-10-25 12:05:09 -04:00
Matt Beshara
8905e85d34 Rename variable using ‘exwm-workspace’ package prefix; add docstring
* exwm-workspace.el (exwm-workspace--client-p-hash-table): Rename
`exwm--client-p-hash-table'.
2021-10-25 12:05:09 -04:00
Matt Beshara
182ffbed6c Use a hash table to cache result of ‘exwm-workspace--client-p’
* exwm-workspace.el (exwm--client-p-hash-table): New variable.
(exwm-workspace--client-p): Use `exwm--client-p-hash-table' to
store which workspace frames are client frames instead of
frequently invoking `frame-parameter'.
2021-10-25 12:05:09 -04:00
Adrián Medraño Calvo
1863361674 Merge branch 'tumashu.github.com/master' into externals/exwm 2021-10-25 11:51:15 -04:00
Feng Shu
3d648ef1c4 Add variable indicating XIM buffers
* exwm-xim.el (exwm-xim-buffer-p): New variable.
(exwm-xim--handle-forward-event-request): Add exwm-xim-buffer-p
2021-10-25 11:42:33 -04:00
Chris Feng
0368127976 Make button events working with winner-mode
* exwm-input.el (exwm-input--fake-last-command): Extracted for reuse.
(exwm-input--on-ButtonPress, exwm-input--on-KeyPress-line-mode): Use
it.
2020-07-12 00:00:00 +00:00
Chris Feng
edb930005b Fix fullscreen states
* exwm-layout.el (exwm-layout-set-fullscreen,
exwm-layout-unset-fullscreen): Use `exwm--id' for interactive use.
(exwm-layout-unset-fullscreen): Mandatorily clear fullscreen states.
2020-06-14 00:00:00 +00:00
Chris Feng
9f28621277 Bump version to 0.24 2020-05-24 00:00:00 +00:00
Chris Feng
624a30212c Clarify the use of `exwm-config-default'
* exwm-config.el (exwm-config-example): Renamed from
`exwm-config-default' to make it clear it's just an example.
2020-05-10 00:00:00 +00:00
Chris Feng
7f4b9cdb0f Make return key work in exwm-xim
* exwm-xim.el (exwm-xim--handle-forward-event-request): Send all key
events to Emacs while invoking an input method (don't rely on its
keymap definition).
2020-05-10 00:00:00 +00:00
Chris Feng
921b0e3efe Merge branch 'medranocalvo/upcase-menu-item' into externals/exwm 2020-05-10 00:00:00 +00:00
Chris Feng
ab1d02af53 Merge branch 'medranocalvo/prevent-jump-back-workspace' into externals/exwm 2020-05-10 00:00:00 +00:00
Chris Feng
c0931b5c66 Merge branch 'medranocalvo/input-mode-change-hook' into externals/exwm 2020-05-10 00:00:00 +00:00
Adrián Medraño Calvo
1d0df9144e ; Upcase menu item 2020-05-06 00:00:00 +00:00
Adrián Medraño Calvo
c7c42582b7 Prevent jumping back to previous workspace
* exwm-workspace.el (exwm-workspace-switch): Focus out old frame
	before switching to the new one to prevent jumping back to
	previous workspace.
2020-05-06 00:00:00 +00:00
Adrián Medraño Calvo
ce2625d050 Run hook upon input mode change
* exwm-input.el (exwm-input-input-mode-change-hook): Add new hook
	for code to run upon input mode change.
	(exwm-input--grab-keyboard, exwm-input--release-keyboard): Run it.
2020-05-06 00:00:00 +00:00
Chris Feng
21a7341972 Merge branch 'medranocalvo/abort-recursive-edit-on-workspace-switch' into externals/exwm 2020-05-05 00:00:00 +00:00
Adrián Medraño Calvo
007916c647 Fix window manager name
* exwm.el (exwm--init-icccm-ewmh): Correct _NET_WM_NAME to the
	name of the window manager on the _NET_SUPPORTING_WM_CHECK.
2020-04-15 00:00:00 +00:00
Adrián Medraño Calvo
373eda99bd Stop aborting recursive edit upon switching workspaces.
* exwm-workspace.el (exwm-workspace-switch): Stop aborting
	recursive edit upon switching workspaces.  Users should handle it
	just like in regular Emacs (possibly customizing
	`enable-recursive-minibuffers').
2020-04-15 00:00:00 +00:00
Adrián Medraño Calvo
cddb3429d2 Abort recursive edit before switching workspaces
* exwm-workspace.el (exwm-workspace-switch): Abort recursive edit
	before switching to other workspace.  This avoids the usual
	`set-window-configuration' calls (e.g., by `eval-expression') to
	switch *us back to the previous workspace.
2020-04-15 00:00:00 +00:00
Chris Feng
95d6aa96cf Merge branch 'Curiosidad-Racional/patch-1' into externals/exwm 2020-03-29 00:00:00 +00:00
Chris Feng
3dbf1b1bed Add support for _NET_WM_STATE_HIDDEN
* exwm-layout.el (exwm-layout--set-ewmh-state): New function for
setting _NET_WM_STATE (according to local state).
* exwm.el (exwm--init-icccm-ewmh): Declare the support for this atom.
2020-03-29 00:00:00 +00:00
Chris Feng
5f9ba9772f Additional fix for winner-mode
* exwm-input.el (exwm-input--on-KeyPress-line-mode): Check incomplete
key presses (which generate no valid events) before running
`pre-command-hook' and `post-command-hook'.
2020-03-29 00:00:00 +00:00
Curiosidad-Racional
dc5cc1dead
Fixed fail update when current buffer differs from window
Local variable `exwm--input-mode' from different buffer when current buffer don't contains #id window.

`with-current-buffer' changes buffer after `cl-case' with local `exwm--input-mode'
2020-03-21 13:51:09 +01:00
Chris Feng
ed0f63327d Make exwm-mode buffers work with winner-mode
* exwm-input.el (exwm-input--noop): New placeholder command.
(exwm-input--on-pre-command, exwm-input--on-post-command): Ignore this
command.
(exwm-input--on-KeyPress-line-mode): Set `last-command' to make
winner-undo start over from the newest config; run
`post-command-hook' to make winner-mode save configs; run
`pre-command-hook' in case required by some other package.
2020-03-01 00:00:00 +00:00
Chris Feng
48db94f48b Add solid background support to systemtray
* exwm-systemtray.el (exwm-systemtray-background-color): New user
option for configuring systemtray background color.
(exwm-systemtray--init): Configure background color for systemtray.
2020-02-02 00:00:00 +00:00
Chris Feng
36d2f0056e Refactor color-related code
* exwm-core.el (exwm--color->pixel): New function for converting color
to TrueColor pixel.
* exwm-floating.el (exwm-floating--border-pixel)
(exwm-floating--border-colormap, exwm-floating--init-border): Removed.
(exwm-floating-border-color, exwm-floating--set-floating): Use
`exwm--color->pixel' and only support TrueColor.
2020-02-02 00:00:00 +00:00
Chris Feng
27a884e947 Update copyright year to 2020 2020-02-02 00:00:00 +00:00
Chris Feng
65ec749bb0 Fix moving Emacs frames
* exwm.el (exwm--on-ClientMessage): Avoid moving workspace frames;
Move floating X window when trying to move the floating frame.
2019-12-15 00:00:00 +00:00
Chris Feng
8b05c2a30d Eliminate a compile warning
* exwm-workspace.el (exwm-workspace-move-window): Replace the
obsolete `run-window-configuration-change-hook'.
2019-12-08 00:00:00 +00:00
Chris Feng
6a3e9b2c64 Avoid redundant input focus transfer
* exwm-input.el (exwm-input--set-focus): Check for current focused
X window before making an input focus transfer.
(exwm-input--on-buffer-list-update): Remove the `this-command' check.
2019-12-01 00:00:00 +00:00
Chris Feng
3420cd24d1 Add support for accessing keymaps in char-mode
* exwm-input.el (exwm-input-invoke-factory): New macro for generating
new commands that invoke corresponding prefix keys.
2019-11-03 00:00:00 +00:00
Chris Feng
1772b98452 Loosen the requirements for input focus update
* exwm-input.el (exwm-input--on-buffer-list-update): No more check
on current buffer (the check on buffer name was dropped in a1cf0d9b8).
2019-10-27 00:00:00 +00:00
Chris Feng
3c8b395058 Fix `exwm-input-set-simulation-key'
* exwm-input.el (exwm-input--read-keys): Return nil on empty input so
that `exwm-input-set-simulation-key' can ignore it.
(exwm-input-set-simulation-key): Improve prompt.
2019-10-13 00:00:00 +00:00
Steven Allen
5a43dbecc7 Add minibuffer-keyboard-quit to the default pre-post-command-blacklist
* exwm-input.el (exwm-input-pre-post-command-blacklist): Add
`minibuffer-keyboard-quit' to the blacklist. This is invoked when the user
aborts a the minibuffer with C-g.
2019-10-07 00:00:00 +00:00
Steven Allen
f14bd2a110 Set the current buffer before handling key events
There's no guarantee that the global current buffer matches the selected
window's buffer. For example, the following  will output "*Messages*" regardless
of the actual current buffer:

  (progn
    (run-at "1 sec" nil (lambda ()
                          (with-current-buffer (get-buffer "*Messages*")
                            (sit-for 5))))
    (run-at "2 sec" nil (lambda () (message (buffer-name)))))

* exwm-input.el (exwm-input--on-KeyPress): Set the current buffer to selected
window's current buffer.
2019-10-06 08:28:03 +09:00
Chris Feng
1e9be0de38 Fix detection of `exwm-workspace--window-y-offset'
* exwm-workspace.el (exwm-workspace--update-offsets): Explicitly
request the geometry of the container for the first workspace as it
may not align with the top of the root X window.
2019-10-02 00:00:00 +00:00