Stumpwm
StumpWM 是一个平铺式、键盘驱动的 X11 窗口管理器,完全用 Common Lisp 编写。
作为经典窗口管理器 Ratpoison 的继任者,StumpWM 增加了 Common Lisp 的所有灵活性和可 hack 性,允许用户在窗口管理器运行时对其源代码进行修改。它也被称为“WM 中的 emacs”。
摘自 StumpWM 的主页
- “StumpWM 致力于可定制且视觉上极简化。它没有窗口装饰、没有图标、也没有按钮。它确实有各种钩子来附加您的个人定制,以及可以调整的变量。
- 尽情 hack
- 调试你的杰作
- 自定义您的窗口管理器
- 在它运行时。没错。有了 100% Common Lisp 窗口管理器,hack 无止境。只需重新求值,然后 GO!”
想看看它的实际效果吗?一位 StumpWM 用户创建了一个视频。
安装
一个可运行的 StumpWM 安装包含 3 个部分
- Common Lisp REPL
- StumpWM Lisp 包及其依赖项
- 可执行文件作为入口点
通过软件包管理器安装
安装 stumpwm 或 stumpwm-gitAUR。
如果您在没有 AUR 助手的情况下安装,您应该按以下顺序安装这些软件包
- sbcl
- cl-alexandria-gitAUR
- clx-gitAUR
- cl-ppcre
- stumpwm 或 stumpwm-gitAUR
安装完成后,将 exec stumpwm
放入您的 ~/.xinitrc
并运行 startx
。要退出,使用默认配置按 C-t ;
,然后输入 quit 并按回车。
这两个软件包都将在 /usr/share/xsessions
中安装一个 xsession 条目,因此如果您使用检查该目录的显示管理器,您应该一切顺利。
有关常用快捷键列表,请按 C-t ?
。
通过 Roswell 安装
强烈建议使用 roswell 来管理您的 Lisp REPL。
此方法可以轻松地使用 ql:update-all-dists
升级 StumpWM 以及其他 Lisp 软件包。
要在 roswell 中启动 REPL,请在终端中运行 ros run
,要在 REPL 中安装 stumpwm,请运行 (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)
启用模式行
这将设置一个基本模式行,左侧显示组名,后跟窗口名称,右侧显示日期和时间。
首先设置窗口名称格式和整体模式行格式
(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")
可以选择更改模式行自行更新的频率,以秒为单位(当您使用 StumpWM 执行某些操作(如切换窗口)时,它也会更新)。
(setf *mode-line-timeout* 2)
最后启用模式行(这必须在您设置了您想要的选项之后进行)
(enable-mode-line (current-screen) (current-head) t)
设置消息和模式行的字体
StumpWM 使用默认的 XOrg 字体,这可能是小而像素化的。您可以通过调用以下命令来设置字体,例如:
(set-font "-xos4-terminus-medium-r-normal-*-20-*-*-*-*-*-*-*")
其中字符串由 xorg-xfontsel 生成。
另一种方法是使用 ttf-fonts
模块来设置自定义字体。请注意,结果的性能不是很好,并且它需要另一个 lisp 模块 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))
- 您需要安装 quicklisp 软件包才能使其工作。
- 您需要从 stumpwm-contrib 安装 ttf-fonts 模块(请参阅 #调整)。
调整
请参阅 wiki,了解有关 .stumpwmrc 的各种有用调整。
此外,stumpwm-contrib 存储库包含许多有用的实用程序,可以通过 stumpwm-contrib-gitAUR 安装。例如,如果您是 emacs 用户,您会找到一个用于编辑 StumpWM 文件(以及与程序 stumpish
交互,更多内容见下文)的 emacs minor mode。
stumpish
是 STUMP 窗口管理器交互式 Shell。它是一个允许用户从终端的舒适环境中(或使用 emacs 模式)与正在运行的 StumpWM 交互的程序。它与 StumpWM 一起安装在 /usr/bin/
中。
故障排除
- 如果您在配置多个显示器时遇到问题,您可能需要安装 'xorg-xdpyinfo' 软件包。
- 如果您无法启动 stumpwm 并收到
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)
在 REPL 中,可以通过删除 ~/.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