我正在编写一个使用F1键的控制台应用程序(求助)。不幸的是,虽然Konsole(KDE)不使用此密钥,Gnome终端会这样做,因此我的应用程序无法访问F1密钥。我不认为有一种方法可以检测F1键是否已经在事物的GUI端映射(Gnome Terminal),但是如果有,那么答案将消除这个问题。 :)
Ergo,我的下一个最好的选择是尝试检测我是否在Gnome终端内运行。有办法做到这一点吗?我主要感兴趣的是从Ruby中收集它,但如果可以通过shell或环境变量或虚拟文件系统(/ proc,/ dev等)完成,那就足够了。
我希望有一个可靠的方法来做到这一点,但我可以满足于“最好的猜测”方法,比如为了让我合理地假设Gnome Terminal是包装终端,可以让我合理地假设Gnome Terminal是环境变量。
额外信息:其他密钥也被Gnome Terminal“窃取”。我打算为Gnome用户显示一些关于替代密钥的信息。
答案 0 :(得分:9)
Googleage已经透露,我可能可以依赖Gnome Terminal将COLORTERM环境变量设置为'gnome-terminal'。
答案 1 :(得分:4)
对于zsh:
[[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $$ -o ppid=) -o cmd=):t} == gnome-terminal* ]]
用于设置$COLORTERM
的gnome-terminal,但已被删除(在3.12.0-67-g1d5c1b6中)。
答案 2 :(得分:1)
通常你使用termcap信息即terminfo。这告诉您正在使用什么类型的终端以及密钥是什么。
这是用户的选择,并且由于Gnome Terminal可能会报告自己可能是一种x-term,正如Konsole所做的那样,用户可能有办法创建F1按键。因此,我怀疑两者的终端能力将被报告为等效。
对Function Key Escape Codes的这项调查可能对你很有意义,但如果有可能,甚至可以解释如何使gnome终端产生F1印刷机。考虑到Mac OS X终端我使用了很长时间,它抓住了PageUp和PageDown用于滚动条,而Command-PageUp和Command-PageDown将它们传递给终端。
答案 3 :(得分:1)
一个相当粗略的方法,如果你想把它委托给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'
我知道,这肯定是“像海盗一样黑客”;)
答案 4 :(得分:1)
fwiw,这是gnome-terminal中的一个设置;用户可以去编辑 - >键盘快捷方式在gnome-terminal菜单中更改或删除F1键绑定。
答案 5 :(得分:0)
我只需检查我选择的终端模拟器的$ TERM,然后添加一个别名,用于在当前目录中生成一个新终端。
if [[ $TERM == 'xterm' ]] ; then
alias nw='gnome-terminal --working-directory=$PWD'
fi