2011-08-16 78 views
7

我正在C++(Ubuntu 11.04)中开发一个有趣的小项目,程序是基于文本的(全部在Gnome终端中)。我正在使用ncurses库来更改字体颜色,但我也希望将不同大小的文本打印到终端,并且无法弄清楚如何使用ncurses执行此操作。有没有办法做到这一点(也许与ncurses,或与不同的库)?理想情况下,我希望它是独立于终端的,但如果它是一种只能在Gnome中工作的解决方案,或者只能在Ubuntu中工作,或者其他限制,那么这比没有好!用C++更改终端字体大小

感谢您一如既往的帮助。


我试过基思汤普森的建议,但不能得到它的工作。这里是我的代码:

cout << "\x1b]50;" << "10x20" << "\a" << flush; 
cout << "test"; 

它只是显示为在终端首选项中指定的相同字体大小。我正在使用:GNOME Terminal 2.32.1,如果有帮助的话!

回答

7

至少对于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; 
+0

感谢您的快速回复。你的回答看起来很有希望,但我无法实现它:/。也许我错过了一些基本的东西。 – navr91

+0

也许Gnome终端不识别相同的转义序列。尝试启动一个xterm窗口('xterm&')并从那里尝试。运行'xlsfonts'获取可用字体列表(我的系统上有几千个)。或'xlsfonts | egrep'^ [0-9] + x [0-9] + $''为WIDTHxHEIGHT字体名称列表(我有14个)。如果它在xterm中可用,但不在Gnome终端中,那么就有一个特定于GNOME的解决方案。 (或者它可能不可能;如果Gnome实现了这个功能,我希望它使用与'xterm'相同的语法。) –

+0

我无法在xterm中使用它:/。我甚至试过你的perl例子:'print'\ e] 50; 10x20 \ a“;打印“test”;'和gnome和xterm中的字体大小相同。也许这是最近发生了变化的事情。你在什么操作系统/终端上运行你的xfont系统? – navr91

1

你可以做的最好的是使用粗体字体。终端模拟真实的基于文本的终端,因此它一次不支持不同的字体。