是否有一个角色会占据终端线路的整个高度?

时间:2012-11-18 03:36:08

标签: unix unicode terminal

我正在制作棋盘游戏Blokus的命令行版本,我想让棋子占据一条线的全高。我尝试使用Unicode字符█(U + 2588),但它在行中留下了垂直间隙,如下所示:

enter image description here

有谁知道我怎么能占用全线?

2 个答案:

答案 0 :(得分:7)

根据定义,这些字符应该填充整个字符单元格。如果不是,则您使用的字体可能存在问题。 (例如,您的默认字体可能没有该字符,因此终端必须使用具有不同指标的替代字体。)

您可以通过输入反向视频模式("\x1b[7m")并输出空格字符,然后在您进行切换("\x1b[0m")时“假装”一个块字符来解决此问题。完成。

答案 1 :(得分:6)

U + 2588应该在终端中占据一条线的全高,但由于字体问题,它并不总是这样做。

块元素字符在Unicode字符的第15.8节Geometrical symbols中描述:“传统块元素设计用于填充每个显示单元格的某些定义部分,或者用一些定义的着色程度填充每个显示单元格。 [...]在模拟终端应用程序时,实现块元素字符的字体应设计成相邻的 像U + 2588完整块这样的字符的字形创建了实心图案,它们之间没有间隙。“

但是,fonts that support U+2588并不总是正确实现它。因此,您应该检查是否可以将字体设置为具有U + 2588正确字形的字体,例如DejaVu Sans。

如果您在比简单终端更复杂的环境中使用U + 2588和朋友,例如模拟简单终端的软件,或者在文字处理器中,您可能还有另一个问题。即使U + 2588在以字体正确实现时,也会占据字体的整个高度,但它通常不会占据的整个高度。通常行高比字体高度(字体大小)大,你需要采取额外的措施使它们相同(使文本“固定”)。