跳转至内容

fbpad

来自 ArchWiki

fbpad 是一个小型帧缓冲终端,它通过单个字符标签管理多个终端。它非常轻量级,用 C 语言编写,并使用自己的字体格式 tinyfont,这避免了 xorg 字体依赖。fbpad 可选支持 256 色、粗体字体以及将帧缓冲内容保存到内存,所有这些结合起来,使 fbpad 成为许多用途的 X 服务器的可行替代方案。

安装

安装 fbpad-gitAUR 包,该包默认导入 fbpad 的“bold”和“scrsnap”分支,分别添加了 256 色、粗体字体以及保存帧缓冲内容的功能。fbpad 通过 config.h 文件进行自定义,对 config.h 文件的编辑会在重新编译 fbpad 后(使用命令 makepkg --skipinteg -i)纳入 fbpad。

配置

用户在使用前,最有可能需要编辑 config.h 中的字体(稍后会详细介绍)、SHELLMAILEDITOR 的定义,以替换为他们偏好的程序。

dwm 用户应该可以轻松适应 fbpad。fbpad 特定的按键绑定由修饰键触发,该键硬编码为 Alt 键,就像 dwm 一样。Alt+jAlt+k 在打开的标签页中的终端之间切换,Alt+o 切换到最后打开的标签页,Alt+p 显示打开的标签页列表,仅举几例。熟悉手动修补源代码的用户可以编辑 fbpad.c 文件来编辑/添加按键绑定。

如果您经常重新编译 fbpad,您可能会希望能够在不手动重新启动的情况下重新加载 fbpad。以下代码将在登录后在 tty1 中启动 fbpad,并在您使用 Ctrl+Alt+q 退出 fbpad 时重新加载它。

if [[ $(tty) = /dev/tty1 ]]; then
  while true; do
    fbpad >/dev/null 2>&1
  done
fi

将此添加到您的 shellrc 文件末尾。

标签颜色

标签列表的默认背景硬编码为白色,空标签的前景为黑色,已满标签(每个标签可包含两个终端)的前景为绿色,未满标签的前景为蓝色。这种配色方案显然不适合所有人,但可以通过以下补丁轻松解决:

--- a/fbpad.c	2011-11-11 13:02:22.834825518 -0500
+++ b/fbpad.c	2011-11-11 13:04:07.016043271 -0500
@@ -110,7 +110,7 @@
 
 static void showtags(void)
 {
-	int colors[] = {15, 4, 2};
+	int colors[] = {8, 2, 9};
 	int c = 0;
 	int r = pad_rows() - 1;
 	int i;
@@ -128,7 +128,7 @@
 			nt++;
 		pad_put(i == ctag ? '(' : ' ', r, c++, FGCOLOR, BGCOLOR);
 		if (TERMSNAP(i))
-			pad_put(tags[i], r, c++, !nt ? BGCOLOR : colors[nt], 15);
+			pad_put(tags[i], r, c++, !nt ? 8 : colors[nt], BGCOLOR);
 		else
 			pad_put(tags[i], r, c++, colors[nt], BGCOLOR);
 		pad_put(i == ctag ? ')' : ' ', r, c++, FGCOLOR, BGCOLOR);

使用时,将“8”替换为空标签所需的颜色(两次),将“2”替换为未满标签所需的颜色,将“9”替换为已满标签所需的颜色,其中颜色 0-15 在 config.h 文件中定义。此补丁还将默认背景色设置为终端的背景色,作者认为这是一种更自然的选择。

请注意,第二个“8”是 fbpad 保存帧缓冲内容标签的颜色。如果您选择将 TAGS_SAVED 定义为 TAGS,那么您希望您的默认前景颜色和已保存标签的颜色相同,即两者都为“8”。否则,您可以将 TAGS_SAVED 定义为要保存的标签的连接字符串,并将第二个“8”更改为您希望用来指示已保存标签的颜色。作者自己出于方便保存了所有标签。

将补丁保存为 fbpad-tagcolor.diff,将 'fbpad-tagcolor.diff' 添加到您的 source 数组中,并在复制 config.h 文件的行之后,将以下行添加到 PKGBUILD 中:

patch -p1 -i "${srcdir}/${_gitname}-tagcolor.diff" || return 1

字体

fbpad 的字体格式是“tinyfont”,有一个实用程序 fbpad-mkfn-gitAUR,可以将 TTF 文件转换为 tinyfont 格式。您需要编辑 fbpad-mkfn 构建目录中的 config.h 文件,以指向您所需字体的 TTF 文件。例如,如果字体文件 MonteCarloFixed.ttf 位于 $HOME/.fonts 目录中,您需要将 config.h 的第 10 行编辑为如下所示:

{"/home/archie/.fonts/MonteCarloFixed12.ttf", 6},

如果您的用户名是“archie”,并且您希望创建的 Monte Carlo 字体的尺寸是 6。删除您看到的其他字体行,只保留这一行,除非您希望用另一个字体的字形来补充您的字体,在这种情况下,请为您的其他 TTF 字体添加类似上面的行。

然后,使用您的自定义设置重新构建并重新安装包。

安装 fbpad-mkfn 后,以下命令将创建一个 tinyfont 文件:

$ fbpad-mkfn > MyFont.tf

请记住编辑您的 config.h,将其指向您保存 MyFont.tf 的目录。如果您的字体也有粗体版本,请重复编辑 fbpad-mkfn config.h 文件的过程,这次在 ft2tf config.h 中指定粗体 TTF 文件的位置,使用 makepkg 进行构建,并将最终的粗体 tinyfont 位置添加到您的 fbpad config.h 中。

另请注意,某些字体可能需要修改 WIDTHDIFFHEIGHTDIFF 以获得正确的宽度和高度。

颜色支持

默认情况下,AUR 包会安装 fbpad 的自定义 terminfo,但您需要在您的 shellrc 中添加

export TERM=fbpad-256

以利用 256 色支持。显然,不在您的默认 shell 中启动的命令(例如 EDITORMAIL 的命令)将不会读取您的 shellrc 文件,因此您需要编辑 config.h 文件中它们的定义,以使 EDITORMAIL 的命令在父 shell 中运行。例如,本文的作者,他使用 zsh,将 MAIL 的默认命令从

#define MAIL		"mailx"

更改为

#define MAIL		"zsh -i -c mailx"

此外,为了使 ls 命令具有颜色,需要将“fbpad-256”添加到 ls 已知可以处理颜色的终端列表中。根据 README,在您的 shell 中运行以下命令:

$ dircolors --print-database | sed '/^TERM linux$/aTERM fbpad-256' >$HOME/.dircolors

并将 eval `dircolors ~/.dircolors` 添加到您的 shellrc 文件中,以便加载包含 fbpad-256 终端的自定义 dircolors 文件。

用法

以下是一些通用桌面需求如何在 fbpad 中实现的示例。

复制文本

由于 fbpad 中所有操作都无需鼠标,因此要复制文本,用户可以使用 Alt+s 命令对屏幕上的所有文本进行“屏幕截图”。这将把所有可见文本保存到文件 /tmp/scr 中。然后,如果您的 shell 支持使用 vim 编辑命令行(例如,zsh 中的 edit-command-line ZLE 函数),您可以将 /tmp/scr 文件作为新缓冲区在 vim 中打开,并使用其复制按键绑定将所需的文本粘贴到您的原始缓冲区中。Emacs 用户可能可以采用类似的方案来复制文本。

观看 YouTube

如果使用 MPlayer 并将视频输出驱动程序设置为 fbdev2,可以使用 youtube-viewerAUR 从 fbpad 中的命令行搜索 YouTube 并使用 MPlayer 观看。或者,可以将以下脚本作为外部浏览器添加到命令行网页浏览器 w3m 中,并通过您选择的媒体播放器从 YouTube 网站播放视频。下面的脚本使用了 fbff-gitAUR(一个由 fbpad 作者编写的轻量级媒体播放器)和 yturlAUR(一个简单的、非常 UNIX 风格的程序,仅用于将 YouTube URL 转换为可直接观看的 URL)。

youtube.sh
#!/bin/sh
video=$(yturl $1)
fbff -f $video > /dev/null 2>&1

将文件保存在您的 PATH 中,并通过打开 w3m,按 o 键编辑选项,并在“外部程序设置”下的“外部浏览器”字段中输入“youtube.sh”来将其添加为 w3m 的外部浏览器。按“OK”,您就完成了。现在,当您想观看视频时,打开 YouTube,按 M 键,视频将在 fbff 中立即开始流式传输。

以下是一些增强帧缓冲桌面可用性的程序的推荐:

  • dvtm - 动态虚拟终端管理器(可视为控制台的 dwm)
  • fbcatAUR - 帧缓冲截图抓取器
  • fbff-gitAUR - 基于 ffmpeg 的媒体播放器
  • fbpdf-gitAUR - 基于 MuPDF 的 PDF 阅读器,可选支持 DjVu 或通过 poppler 渲染
  • fbvAUR - 图片查看器
  • GNU Screen - 终端多路复用器
  • w3m - 命令行网页浏览器