我正在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是否有帮助!
至少对于xterm
,您可以通过打印转义序列来更改当前字体。语法为ESCAPE ] 50 ; FONTNAME BEL
。
这里是我用于此目的的脚本的缩写;我称它为xfont
(实际的错误检查更多):
#!/usr/bin/perl
use strict;
use warnings;
print "\e]50;@ARGV\a";
我不知道还有哪些其他终端仿真器可以识别此序列。特别是,我发现即使screen
会话位于screen
窗口中,它也无法在xterm
下运行。
注意,您必须指定字体("10x20"
,"9x15"
)的名称,而不是其大小。
编辑:我应该更加注意标签。在C ++中,它将类似于:
std::cout << "\x1b]50;" << font_name << "\a" << std::flush;
更新:使用xterm
,如果您使用的是TrueType字体,则此功能将无效。另外,Dúthomhas在评论中建议:
我知道这很旧,但是所有terminfo字符串都应使用
putp()
[或tputs()
],即使在C ++中也是如此。
putp( (std::string{ "\33]50;" } + font_name + "\a").c_str() );
最好的办法是使用粗体。终端模仿真实的基于文本的终端,因此它一次不支持不同的字体。