EXWM
安装
确保您已安装 emacs。您还需要 xorg-xinit。
在 Emacs 中安装 EXWM:M-x package-install RET exwm RET
。
编辑 xinitrc 并添加
exec emacs
在您的 emacs 初始化文件中,添加
(require 'exwm) (require 'exwm-config) (exwm-config-example)
以使用默认设置。如果您想使用自己的设置,请使用 (exwm-enable)
代替 (exwm-config-example)
(并且您不需要 (require 'exwm-config)
)。
也可以在服务器模式下启动 emacs,并从命令行启动 EXWM。请参阅 https://github.com/ch11ng/exwm/issues/284。
配置
EXWM 是一个完整的 X 窗口管理器,因此 Emacs 管理 X 窗口,例如您的浏览器、vlc 等。您可以使用所有常用的 Emacs 窗口命令来控制窗口位置。在 X 窗口(即不是“普通”Emacs 缓冲区)中,某些命令会被 EXWM 捕获,而不会传递给程序。这些键存储在 exwm-input-prefix-keys
中。或者,您可以通过自定义 exwm-input-global-keys
来设置全局命令。如果您更愿意在 elisp 中设置 exwm-input-global-keys
而不是使用自定义功能,请注意您可能需要重启 EXWM(并在启用 exwm 之前设置 exwm-input-global-keys
)。或者,您可以尝试使用来自 "or emacs" 博客的 cset
宏,它应该可以用于重新定义 exwm-input-global-keys
而无需重启 EXWM。要使用 s-& 作为键盘快捷键来启动程序(例如 firefox),您可以这样做
(setq exwm-input-global-keys `(,(kbd "s-&") . (lambda (command) (interactive (list (read-shell-command "$ "))) (start-process-shell-command command nil command))))
多显示器
EXWM 可以通过(可选的)exwm-randr
软件包处理多显示器。您需要安装 xrandr 并在调用 (exwm-enable)
之前在您的 emacs 配置文件中启用 exwm-randr。您需要将 “DP-1” 和 “DP-2” 的值调整为您计算机使用的值;在命令行中不带参数调用 xrandr
以查看可用的输出。
(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)
系统托盘
EXWM 支持系统托盘,但默认情况下未启用。要启用它,请在您的 dotemacs 文件中的 (exwm-enable)
之前放置以下内容
(require 'exwm-systemtray) (exwm-systemtray-mode 1)
您可能需要在之后调整高度;可以使用 exwm-systemtray-height
变量调整高度。
在 LXDE 中嵌入
EXWM 可以代替 openbox 使用,让您仍然可以使用 LXDE 会话管理工具。
在执行此操作之前,请确保您已设置好 emacs 的初始化文件以运行 EXWM(请参阅上文)
lxsession 使用在 ~/.config/lxsession/LXDE/desktop.conf
中定义的窗口管理器(默认为 Openbox)。如果此文件不存在,它会在 /etc/xdg/lxsession/LXDE/desktop.conf
中搜索。
将任一文件中的 openbox-lxde
替换为 emacs
[Session] window_manager=emacs
lxsession-logout
您可以在 emacs 中创建以下函数,以便从 LXDE 会话中干净地注销、关机或重启
(defun exwm-logout () (interactive) (recentf-save-list) (save-some-buffers) (start-process-shell-command "logout" nil "lxsession-logout"))
这会将您的 recentf 历史记录存储到磁盘,提示您保存、丢弃或比较未保存缓冲区中的更改,然后启动注销管理器。您可以将此函数绑定到 emacs 中的任何键。
故障排除
Firefox 中的屏幕撕裂
您可能会在某些程序(尤其是 Firefox)中遇到屏幕撕裂。您可以尝试
令人困惑的缓冲区名称
您可能会看到缓冲区名称被命名为“*EXWM*”。这使得在缓冲区之间切换时感到困惑。.EXWM 允许缓冲区自行命名。要允许缓冲区自行命名,请将以下内容放入您的 dotemacs 中。
;; Make buffer name more meaningful (add-hook 'exwm-update-class-hook (lambda () (exwm-workspace-rename-buffer exwm-class-name)))