我正在创建一个使用SGR代码的gem。我发现自己的终端之间存在差异。例如。 \e[2m
在Ubuntu的gnome terminal
中制作了微弱的文字,但\e[2m
在Windows 8.1 Command Prompt With Ruby
中没有做任何事情。所以我的ruby程序需要知道它在那里运行的终端,利用(或不使用)某些sgr代码。
是否有一颗神奇的子弹,纯粹的红宝石或希望有宝石,以找出我们正在运行的终端?我的意思是任何终端,无论多么异国情调。我希望能够做到这一点,取决于我们运行我的宝石的终端(这是伪代码,MagicBullet
是一个属于宝石的类我希望你能引用我):
MagicBullet.identify #=> ['gnome-terminal', '6.3.2']
或者:
MagicBullet.identify #=> ['konsole', '4.5']
或者:
MagicBullet.identify #=> ['command-prompt', '13.37']
或者:
MagicBullet.identify #=> ['NeWT', '15.2']
有没有一种可靠的方法可以找到无论操作系统......这些信息感觉很容易获得......也许是一个宝石,它寻找属于已知终端列表的一系列OS信号/进程,类似的东西。我已尝试ENV['TERM']
,虽然在gnome-terminal中返回:xterm
,但我更倾向于返回:gnome-terminal
。在Command Prompt With Ruby
中,它返回nil
,考虑到所有非Linux(我认为)终端将返回nil
,这不是很有用。当然,我可以运行if !ENV['TERM']
,然后使用一组不同的逻辑来查找终端的名称,但这并不会让我觉得“肯定会”。它可能会与其他“异国情调”终端失败。
所以我想作为答案: