我正在开发一个库,该库需要识别正在运行的终端仿真器以输出特定于仿真器的转义码序列。
例如,iTerm 2 使用以下专有序列:
ESC ] 50 ; CurrentDir=/path/to/dir BEL
ConEmu使用 以下专有序列:
ESC ] 9 ; 9 ; C:\path\to\dir BEL
现在,我需要查询终端(使用环境变量或使用转义序列)以输出正确的终端特定代码。
如何可靠地检测和识别我正在运行的终端仿真器?
答案取决于...
好吧,您可以尝试检查环境变量,例如ConEmuServerPID。但这可能不可靠,因为a)当您的进程实际上在ConEmu之外运行时,该变量可能以某种方式从父进程继承b)在某些情况下可能未设置该变量,例如当您在某处SSH时
ESC [ > c
您可以请求带有报告的终端“版本” ESC > 0 ; 136 ; 0 c
。但当然,这136
并不是 ConEmu 的保证。
此外,您可以使用ANSI 序列来执行IsConEmu GuiMacro。但是,您很可能无法在 ssh-ing 时检查结果。
您可以调用ConEmuC.exe -IsConEmu,但不能在 ssh 中这样做。