My Avatar

Fingerkkk

世事洞明皆学问

bdf点阵的等宽化修改和powerline破解

2023年10月23日 星期一

终端字体一直习惯用点阵,小字体下也保持着很高的可读性,对于大量的文字信息输出长时间查看可以减少对眼睛的负担。矢量字体小字体下的可读性和点阵无法相提并论,字号加大后如网页那样的矢量是有优势的但是这样又会导致终端一页输出的信息量大大减少,终端使用起来就少了掌控全局的感觉。

Zpix是一款个人制作的点阵字体,除了商用其他都可以免费使用。用了几年最近发现作者又开始维护更新了,多了个ttf版本可以在字号高于12px时显示矢量模拟的点阵,还多了一些改进和纠错,bdf就是纯点阵只有12px。

本来想更新下,ttf用在网页上正常。bdf安装后firefox字体列表里有却无法使用,不管是内置的字体设置或是用css指定都没反应,alacritty设置成bdf版倒是有效但是字体宽度有问题。之前用的bdf版是修改过的alacritty和firefox都可以正常使用,连vim和zsh的prompt的powerline字体支持都有,但是时间太久我都忘了当初怎么改的。

都打算放弃了就用旧版的不升级了,忽然灵光一现想起来似乎是用fontfrge整合terminus的powerline版本实现的。一翻折腾下又走了不少弯路终于想起来全过程重新修改patch了zpix。这中间的问题弯路和解决方法都记录下来。

首先要解决的将zpix改成等宽适应终端显示,用Terminus Powerline版的拉丁文点阵覆盖zpix,用等宽西文覆盖zpix后在alacritty下使用就没问题了。注意只需要下载12px的常规体就可以因为zpix没有其他字号点阵也没有粗体点阵。

  1. 用fontforge打开zpix.bdf
  2. 文件-导入-选择ter-powerline-x12n.bdf-确定overwrite

为了与zpix.ttf共存需要改下名字。

  1. 菜单栏-元素-字体信息
  2. 前三栏都改掉,比如“ZpixP”、“ZpixP”、Zpix Powerline
  3. 确定
  4. 生成新的bdf字体,菜单栏-文件-生成字体,弹出的窗口已经选好了“无轮廓字体”、“BDF”、“12”等
  5. 点击“Generate”,分辨率默认75,确定就生成了

在fontforge里乱折腾了一阵都失败了箭头字符始终位置不对与左侧有空隙,后来在自己保存git clone文件夹内发现个fontpatch才想起来当初是用脚本自动patch的。但是几年前的python2版本现在arch都是python3了又去找了个新的Font-patch脚本

脚本下载下来之后对上面生成的bdf字体执行如下命令就可以生成patch字体了。

1
fontforge -script 脚本的路径 字体的路径

其实第一步导入terminus后firefox就可以正常识别新字体了。现在将patch脚本生成的新字体复制到/usr/share/fonts/misc下,再fc-cache -vf生成新缓存就可以使用了。

进入git clone文件夹后powerline会显示状态符号,有个大加号✚U+271A调用的矢量字体显示和点阵不搭配。查看了下zpix和terminus都没有这个字符,就想把普通加号+复制过去,结果复制过去fontforge显示这个字符有了生成字体却又消失了。

搜索了下直接copy-paste是无效的

  1. 先选中源字符普通加号+,菜单栏-编辑-复制宽度
  2. 滚动到目标字符位置U+271A,选中它,菜单栏-编辑-粘贴到
  3. 再回到源字符位置,选中+号,菜单栏-编辑-复制
  4. 下拉到目标字符位置U+271A,选中,菜单栏-编辑-粘贴
  5. 生成新字体

总结下就是要先粘贴宽度再粘贴字符才有效。