我正在做一个小项目,以便在C ++中使用(在Ubuntu 11.04中)并且该程序是基于文本的(全部在Gnome终端中)。我正在使用ncurses库来更改字体颜色,但我还想在终端上打印不同大小的文本,并且无法弄清楚如何使用ncurses。有没有办法做到这一点(可能与ncurses,或与不同的库)?理想情况下,我希望它是终端独立的,但如果它只是在Gnome中运行的解决方案,或者仅适用于Ubuntu,或者其他类似限制那么那就更好了!
感谢您一如既往的帮助。
我已经尝试过Keith Thompson的建议,但无法让它发挥作用。这是我的代码:
cout << "\x1b]50;" << "10x20" << "\a" << flush;
cout << "test";
它只显示为终端首选项中指定的相同字体大小。我正在使用:GNOME Terminal 2.32.1如果有帮助的话!
答案 0 :(得分:7)
至少对于xterm
,您可以通过打印转义序列来更改当前字体。语法为ESCAPE ] 50 ; FONTNAME BEL
。
这是我用于此的脚本(缩写版本);我称之为xfont
(真正的错误检查更多):
#!/usr/bin/perl
use strict;
use warnings;
print "\e]50;@ARGV\a";
我不知道哪个终端仿真器能够识别这个序列。特别是,我发现即使screen
会话位于screen
窗口中,它也无法在xterm
下运行。
请注意,您必须指定字体的名称("10x20"
,"9x15"
),而不是其大小。
std::cout << "\x1b]50;" << font_name << "\a" << std::flush;
答案 1 :(得分:1)
您可以做的最好是使用粗体字体。终端模拟基于真实文本的终端,因此它不会同时支持不同的字体。
答案 2 :(得分:0)
ncurses不会更改字体大小,但会使用视频属性(粗体,斜体)在字体内操纵样式。有些终端有记录的方式来更改其字体大小,这会影响整个窗口(使其对ncurses“不可见”)。
如前所述,xterm具有设置XTerm Control Sequences的Operating System Commands部分中记录的字体的功能:
Ps = 5 0 ⇒ Set Font to Pt. These controls may be disabled
using the allowFontOps resource. If Pt begins with a "#",
index in the font menu, relative (if the next character is a
plus or minus sign) or absolute. A number is expected but not
required after the sign (the default is the current entry for
relative, zero for absolute indexing).
The same rule (plus or minus sign, optional number) is used
when querying the font. The remainder of Pt is ignored.
A font can be specified after a "#" index expression, by
adding a space and then the font specifier.
If the TrueType Fonts menu entry is set (the renderFont
resource), then this control sets/queries the faceName
resource.
手册页将faceName作为字体系列名称。虽然可以尝试向其中添加 pixelsize 属性,但它可能无法正常工作。但是更改 faceName 是可行的(假设您已选择TrueType字体),例如,在当前计算机上使用以下脚本:
#!/bin/bash
setfont() {
read -p "$1:"
printf '\033]50;%s\007' "$1"
read -p "done!"
}
setfont "Bitstream Charter"
setfont "URW Gothic L"
我用fc-list
得到了那些名字。
使用xlsfonts
找到的名称,类似的脚本适用于位图字体。对于位图字体,有 font别名,例如9x15
,10x20
,12x24
,但是这些别名仅针对可能来自一千个结果的几种组合定义xlsfonts
。为此,请阅读X Logical Font Description Conventions文档。顺便说一下,那些有用的字体别名在任何地方都没有系统地记录。
这只会更改字符的外观,而不会更改大小。但是,阅读文档后,可以(使用 rxvt 的功能)使用数字逐步浏览字体菜单上的设置。该脚本对我有用,将字体向上更改一次,两次,向下更改两次(返回默认值),向上更改四种字体(到设置的结尾),然后返回:
#!/bin/bash
changesize() {
read -p "$1:"
printf '\033]50;#%s\007' "$1"
read -p "done!"
}
changesize +1
changesize +1
changesize -2
changesize +4
changesize -4
因为这使用了不是来自终端数据库的控制序列,所以程序中的 cout
或 printf
是合适的。对于来自终端数据库的字符串,您应该使用 putp
,因为它们可能包含填充信息,这些信息由putp
解释(并且直接打印到终奌站)。相反,某些随机控制序列可能可能会混淆 putp
。
填充记录在terminfo(5)
中。