跳转至内容

Stumpwm

来自 ArchWiki

StumpWM 是一个手动平铺、键盘驱动的 X11 窗口管理器,完全由 Common Lisp 编写。

作为经典软件 Ratpoison 的精神续作,StumpWM 增加了 Common Lisp 所有的灵活性和可黑客性,允许用户在窗口管理器运行期间对其源代码进行修改。它也被称为“窗口管理器界的 Emacs”。

摘自 StumpWM 官网

StumpWM 旨在实现高度可定制且视觉极简。它没有窗口装饰,没有图标,也没有按钮。它提供了各种钩子(hooks)来附加个人定制,以及可供调优的变量。
  • 黑掉优秀的黑客作品
  • 调试你的优秀作品
  • 自定义你的窗口管理器
就在它运行的时候。没错。凭借 100% Common Lisp 编写的窗口管理器,黑客行为永不止步。只需重新求值 (re-eval) 即可启动!

想看看实际效果?一位 StumpWM 用户创建了一个 视频

安装

一个可运行的 StumpWM 安装由 3 部分组成:

  • Common Lisp REPL
  • StumpWM Lisp 包及其依赖项
  • 作为入口的可执行文件

通过包管理器安装

安装 stumpwmstumpwm-gitAUR

如果你在没有 AUR 助手的情况下安装,应按以下顺序安装这些包:

安装完成后,在 ~/.xinitrc 中加入 exec stumpwm 并运行 startx。要退出,在默认配置下按下 C-t ;,然后输入 quit 并按回车。

这两个包都会在 /usr/share/xsessions 中安装一个 xsession 条目,因此如果你使用的显示管理器会检查该目录,你应该可以直接启动。

要查看常用键绑定列表,请按 C-t ?

通过 Roswell 安装

强烈建议使用 roswell 来管理你的 Lisp REPL。

这种方法可以使用 ql:update-all-dists 轻松地将 StumpWM 与其他 Lisp 包一起升级。

要在 roswell 中启动 REPL,请在终端运行 ros run;要安装 stumpwm,请在 REPL 内部运行 (ql:quickload :stumpwm)

为了通过登录管理器或 ~/.xinitrc 启动,必须创建一个可执行文件。使用 roswell 创建新项目:

ros init stumpwm

创建 stumpwm.ros

stumpwm.ros
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#

(progn 
  #+quicklisp (ql:quickload '(stumpwm) :silent t))

(defpackage :ros.script.stumpwm.3749863733
  (:use :cl))
(in-package :ros.script.stumpwm.3749863733)

(defun main (&rest argv)
  (declare (ignorable argv))
  (stumpwm:stumpwm))

然后将 stumpwm.ros 文件放置在任何你喜欢的地方,并将其作为这个极棒 WM 的入口点。

要将 stumpwm 添加到登录管理器,请在 /usr/share/xsessions/ 中创建 stumpwm.desktop

stumpwm.desktop
[Desktop Entry]
Encoding=UTF-8
Name=StumpWM
Comment=Login using StumpWM
Exec=/path/to/stumpwm.ros
Type=XSession

或者你也可以直接使用 ~/.xinitrc 启动

exec /path/to/stumpwm.ros

文档与支持

AUR 包、源代码以及在线页面中都包含一份 TeXInfo 手册。

此外还有一个 wiki,Libera Chat 上的 IRC 频道 #stumpwm,以及一个 邮件列表。更多信息请参阅 项目网站

配置

StumpWM 将其配置存储在 ~/.stumpwmrc 中,或者你可以使用 ~/.config/stumpwm/config

更改默认 X 光标形状

默认情况下,StumpWM 将光标保持为 XOrg 标准的 X 形状,热点在中心。你可以通过运行以下命令获得更常见的向左指针:

$ xsetroot -cursor_name left_ptr

你也可以将此内容放入你的配置文件中

(run-shell-command "xsetroot -cursor_name left_ptr")

鼠标点击切换窗口焦点

点击另一个窗口会将点击事件发送到该窗口,但它不会获得焦点,这意味着任何键盘输入仍将发送到当前拥有焦点的窗口。以下代码行使焦点转移到任何被点击的窗口。

(setf *mouse-focus-policy* :click)

启用 modeline (状态栏)

这将设置一个基础的 modeline,左侧显示组名后跟窗口名,右侧显示日期和时间。

首先设置窗口名称格式和整体 modeline 格式

(setf *window-format* "%m%n%s%c")
(setf *screen-mode-line-format* (list "[^B%n^b] %W^>%d"))

日期格式使用与 strftime(3) 相同的格式说明符,例如:

(setf *time-modeline-string* "%a %b %e %k:%M")

(可选)更改 modeline 自动更新的频率,单位为秒(当你对 StumpWM 执行操作如切换窗口时,它也会更新)。

(setf *mode-line-timeout* 2)

最后启用 modeline(这必须在设置完你想要的选项之后进行)

(enable-mode-line (current-screen) (current-head) t)

设置消息和 modeline 的字体

StumpWM 使用默认的 XOrg 字体,这可能很小且有像素感。你可以通过调用以下命令设置字体,例如:

(set-font "-xos4-terminus-medium-r-normal-*-20-*-*-*-*-*-*-*")

其中字符串是由 xorg-xfontsel 生成的。

有两个外部模块允许你使用 TTF 字体:ttf-fontssdl-fontssdl-fonts 是 SDL2_ttf 的一个非常薄的封装,而 ttf-fonts 则委托给另一个 Lisp 模块 —— clx-truetype —— 该模块使用 Lisp 原生的 TTF 解析器和渲染器。初步测试显示 sdl-fonts 性能更好且整体更稳定。

要使用 sdl-fonts,你需要在系统中安装 SDL2_ttf。以下代码演示了如何加载字体:

(load-module "sdl-fonts")
(defparameter *the-font* (sdl-fonts:load-font "/usr/share/fonts/TTF/DroidSansMono.ttf" 14))
(set-font *the-font)

对于 ttf-fonts,你需要安装 clx-truetype,它已不再包含在 QuickLisp 发行版中。可以在这里或备份仓库中获取副本,将其放入 ~/quicklisp/local-projects/ 目录下,然后运行:

(ql:quickload "clx-truetype")
(load-module "ttf-fonts")
(xft:cache-fonts) ;; Tell clx-truetype about the fonts you have installed. You really only need to do this once, but putting it here means you will not forget in the future.
(set-font (make-instance 'xft:font :family "DejaVu Sans Mono" :subfamily "Book" :size 11))
提示
注意 目前,该模块所需的 clx-truetype 包已从最新版本的 quicklisp 中移除。如果你想使用此模块,请确保回滚到旧版本或手动将其添加到 quicklisp。参阅相关讨论问题报告

调整

请参阅 wiki 以了解更多适用于 .stumpwmrc 的实用调优技巧。

此外,stumpwm-contrib 仓库包含许多有用的实用程序,可以通过 stumpwm-contrib-gitAUR 安装。例如,如果你是 emacs 用户,你会发现一个用于编辑 StumpWM 文件的 emacs minor mode(以及与 stumpish 程序交互的接口,详见下文)。

stumpish 是 STUMP 窗口管理器的交互式 Shell (Interactive SHell)。它是一个允许用户在终端(或使用 emacs 模式)中与运行中的 StumpWM 进行交互的程序。它随 StumpWM 一起安装在 /usr/bin/ 中。

故障排除

  • 如果你在配置多显示器时遇到问题,可能需要安装 'xorg-xdpyinfo' 包。
  • 如果你无法启动 stumpwm 并且在 REPL 中得到:
           debugger invoked on a SB-INT:SIMPLE-PARSE-ERROR in thread
       #:
       no non-whitespace characters in string "".
       Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
       (no restarts: If you did not do this on purpose, please report it as a bug.)
       (PARSE-INTEGER "" :START 0 :END NIL :RADIX 10 :JUNK-ALLOWED NIL)

可以通过删除 ~/.Xauthority 来解决。参阅 github 上的此问题

  • 如果你遇到 SBCL_HOME 被设置为 NIL 的问题,你可能需要手动设置它:
提示 你可以使用以下命令查找路径:

find / | grep sbcl.core

$ export SBCL_HOME=/usr/lib/sbcl/

然后你可能需要重新安装 stumpwm

  • 如果你在某些程序中无法使用鼠标滚轮滚动,请尝试将以下内容添加到
(setf (getenv "GDK_CORE_DEVICE_EVENTS") "1")

你的 .stumpwmrc 中(来源:[1]

  • 如果你在安装 StumpWM 之后才安装 Quicklisp,那么 Quicklisp 在 StumpWM 中将无法工作 —— 在这种情况下,请卸载并重新安装 StumpWM

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.