如何识别正在使用的终端仿真器?

时间:2019-02-18 12:52:17

标签: iterm2 xterm ansi-escape conemu vt100

我正在开发一个库,该库需要标识正在运行的终端仿真器,以便输出特定于仿真器的转义代码序列。

例如, iTerm 2 uses以下专有序列:

ESC ] 50 ; CurrentDir=/path/to/dir BEL

ConEmu uses以下专有序列:

ESC ]  9 ; 9 ; C:\path\to\dir BEL

现在,我需要查询终端(使用环境变量或使用转义序列)以输出正确的终端特定代码。

如何可靠地检测并识别正在运行的终端模拟器?

1 个答案:

答案 0 :(得分:0)

答案取决于...

好吧,您可以尝试检查环境变量,例如ConEmuServerPID。但这可能并不可靠,因为 a)当您的进程实际上在ConEmu之外运行时,该变量可能以某种方式从父进程继承 b)在某些情况下,例如当您在某处ssh时,可能未设置该变量

您可以使用ESC [ > c个报告ESC > 0 ; 136 ; 0 c请求终端“版本”。但是,当然,136并不是ConEmu的保证。

此外,您可以使用ANSI sequence执行IsConEmu GuiMacro。但是,很可能在ssh-ing时无法检查结果。

您可以致电ConEmuC.exe -IsConEmu,但不能在ssh中打电话。