EXWM
EXWM is a window manager based on Emacs.
Contents
Installing
Make sure you have emacs installed. You will also need xorg-xinit.
Install EXWM from within Emacs: M-x package-install exwm RET.
Edit xinitrc and add:
exec emacs
In your emacs init file, add:
(require 'exwm) (require 'exwm-config) (exwm-config-default)
to use the default settings. If you want to use your own settings, use (exwm-enable) instead of (exwm-config-default) (and you do not need to (require 'exwm-config)).
It's also possible to start emacs in server mode and to start EXWM from commandline. See https://github.com/ch11ng/exwm/issues/284.
Configuration
EXWM is a full X window manager, so Emacs manages X windows such as your browser, vlc, etc. You may use all the normal Emacs window commands to control window placement. In X windows (i.e. not "normal" Emacs buffers), some commands are caught by EXWM and not passed through to the program. These keys are store in exwm-input-prefix-keys. Alternatively, you can set global commands by using the exwm-input-set-key function. For example, to use s-& as a keyboard shortcut to launch a program (e.g. firefox), you can do:
(exwm-input-set-key (kbd "s-&")
(lambda (command)
(interactive (list (read-shell-command "$ ")))
(start-process-shell-command command nil command)))
Multi-monitor
EXWM can handle multi-monitor through the (optional) exwm-randr package. You will need to install xrandr and enable exwm-randr in your emacs configuration file before calling (exwm-enable). You will need to adjust the values of "DP-1" and "DP-2" to the values your computer uses; call xrandr at the command line with no arguments to see available outputs.
(require 'exwm-randr)
(setq exwm-randr-workspace-output-plist '(1 "DP-1"))
(add-hook 'exwm-randr-screen-change-hook
(lambda ()
(start-process-shell-command
"xrandr" nil "xrandr --output DP-1 --right-of DP-2 --auto")))
(exwm-randr-enable)
System tray
EXWM supports a system tray, but it is not enabled by default. To enable it, put the following before (exwm-enable) in your dotemacs file:
(require 'exwm-systemtray) (exwm-systemtray-enable)
You may need to adjust the height afterwards; this can be adjusted with the exwm-systemtray-height variable.
Compositing manager
EXWM includes a compositing manager, but it is not enabled by default. To enable it, load the followng:
(require 'exwm-cm) (exwm-cm-enable)
Alternatively, you may start/stop the compositing manager manually by omitting (exwm-cm-enable) and instead calling exwm-cm-start or exwm-cm-stop manually.
Troubleshooting
Screen tearing in Firefox
Try turning off smooth scrolling in Preferences > Advanced > Use Smooth Scrolling