我如何检测Gnometerminal?

我正在编写一个使用F1键的控制台应用程序(以获取帮助)。 不幸的是,虽然Konsole(KDE)不使用这个键,但是Gnometerminal却是这样,所以我的应用程序无法访问F1键。 我不认为有一种方法可以检测F1键是否已经映射到GUI端(Gnome Terminal),但是如果有的话,这个问题的答案将会消除这个问题。 🙂

Ergo,我的下一个最好的select是尝试检测我是否在Gnometerminal内运行。 有没有办法做到这一点? 我主要感兴趣的是从Ruby中收集这个,但如果可以通过shell或环境variables,或虚拟文件系统(/ proc,/ dev等)来完成,那就足够了。

我希望有一个可靠的方法来做到这一点,但我可以解决“最好的猜测”的方法,如grep环境variables的线索,可以让我合理地认为侏儒terminal是包装terminal。

额外信息:其他键也被Gnometerminal“偷走”。 我打算展示一些关于Gnome用户替代密钥的信息。

Googleage已经显示我可以依靠Gnome Terminal将COLORTERM环境变量设置为'gnome-terminal'。

对于zsh:

 [[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $$ -o ppid=) -o cmd=):t} == gnome-terminal* ]] 

gnome-terminal用于设置$COLORTERM ,但是这已经被删除(在3.12.0-67-g1d5c1b6中)。

通常你使用termcap信息又名terminfo。 这告诉你正在使用什么样的终端,以及密钥是什么。

这是用户的选择,而且由于Gnome终端可能会自称为x-term,因此Konsole可能会这样做,用户可能会创建F1按键。 因此,我怀疑这两者的终端能力是否相同。

功能密钥逃逸代码的调查可能会让你感兴趣,但实际上并没有解释如何甚至有可能使gnome终端产生F1新闻。 想到Mac OS X的终端,我用了很久的时间,为滚动条捕获PageUp和PageDown,而Command-PageUp和Command-PageDown把它们传递给终端。

一个相当粗糙的方法,如果你觉得把这个委派给shell – 否则,在C或C ++中,你将不得不通过你的/ proc,如果你有一个:

 ps x | grep `ps o ppid,fname | grep bash | grep -v grep | head -1 | awk '{print $1}'` | grep 'gnome-terminal' | wc -l 

如果从你自己的程序运行,例如通过system(),你可以用'grep'程序的名字而不是'bash'

我知道,这绝对是“像海盗一样的黑客”;)

fwiw,这是gnome-terminal中的一个设置; 用户可以在gnome-terminal菜单中进入编辑 – >键盘快捷键,并更改或删除F1键盘绑定。

我只是检查我所选择的终端模拟器的$ TERM,然后添加一个别名,用于在当前目录中产生一个新的终端。

 if [[ $TERM == 'xterm' ]] ; then alias nw='gnome-terminal --working-directory=$PWD' fi