跳至內容
出自 Arch Linux 中文维基

EXWM 是一款基於 Emacs窗口管理器

安裝

確保已安裝 emacs。還需要 xorg-xinit

在 Emacs 中安裝 EXWM: M-x package-install RET exwm RET

編輯 xinitrc 並添加:

exec emacs

在 emacs 初始化(init)文件中添加

(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 可以管理瀏覽器、vlc 等 X 窗口。您可以使用所有正常的 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" blog 中的 cset 宏,它可以在不重啟 EXWM 的情況下重新定義 exwm-input-global-keys。要使用 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 軟體包處理多顯示器問題。在調用 (exwm-enable) 之前,您需要安裝 xrandr 並在 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 中搜索。

用 emacs 替換任一文件中的 openbox-lxde

[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"))

該功能會將最近的歷史記錄存儲到磁碟中,提示您保存、丟棄或更改未保存緩衝區中的更改,然後啟動註銷管理器。你可以將此功能綁定到 emacs 中的任意鍵上。

疑難解答

火狐瀏覽器屏幕撕裂

在某些程序中,特別是 Firefox 中,您可能會遇到屏幕撕裂現象。您可以試試

  • 在首選項 > 高級 > 使用平滑滾動中關閉平滑滾動。
  • 安裝(並激活)Compton 或其他合成管理器:Xorg#合成


令人困惑的緩衝區名稱

您可能會看到緩衝區名稱被命名為 「*EXWM*」。EXWM 允許緩衝區自行命名。要允許緩衝區自行命名,請在 dotemacs 中添加以下內容:

;; Make buffer name more meaningful
(add-hook 'exwm-update-class-hook
          (lambda ()
          (exwm-workspace-rename-buffer exwm-class-name)))

參見