标题几乎说明了一切。曾几何时,在我 13 岁以下的时候,我的哥哥在 BorlandPascal 做了一件让我吃惊的事情。他定义了一种表 [8][8],其值为 1 和 0,分别表示前景和背景。拥有几个这样的表,他可以以某种方式重新定义默认的 ASCII 字符,使其看起来像这些表中的样子。我不知道它是如何完成的,但它确实有效。
我的问题是:我可以在 ncurses 中做类似的事情吗,如果可以的话怎么做?
标题几乎说明了一切。曾几何时,在我 13 岁以下的时候,我的哥哥在 BorlandPascal 做了一件让我吃惊的事情。他定义了一种表 [8][8],其值为 1 和 0,分别表示前景和背景。拥有几个这样的表,他可以以某种方式重新定义默认的 ASCII 字符,使其看起来像这些表中的样子。我不知道它是如何完成的,但它确实有效。
我的问题是:我可以在 ncurses 中做类似的事情吗,如果可以的话怎么做?
最简洁的答案是不。ncurses 所做的是生成由终端解释的ANSI 转义码。没有更改字体的代码。(虽然有一些扩展,但没有常用的终端支持它们,ncurses 也不支持。)并且没有通过某种侧通道与终端通信的通用方式来更改字体。但在某些特定情况下可能有办法。
例如,如果您可以直接访问 Linux 控制台,您可以做各种各样的事情,就像在 Borland Pascal 中一样。但它可能会更混乱,更不令人印象深刻。
正如所选答案所解释的,NCurses 无法呈现自定义字形。ncurses 仅通过转义码(清除和重写行以实现交互)来操作终端屏幕状态。
但是应该注意的是,很可能通过自定义字体在终端中使用自定义字形。
这就是 Powerline 所做的(vim、tmux 和朋友的流行终端 UI 状态行):https ://github.com/powerline/fonts
通过修补字体,您可以将字形注入终端正在使用的现有字体中,然后您可以通过 ncurses 访问和呈现任何其他字符。
当然,这不是理想的解决方案,但是通过对字体进行一些自动修补和仔细测试,它可以构建使用自定义字形的应用程序——<em>当您真的需要比 ncurses 更具表现力的 UI 工具时可以提供。
进一步阅读:https ://apw-bash-settings.readthedocs.io/en/latest/fontpatching.html