我正在编写一个使用F1键的控制台应用程序(求助)。不幸的是,虽然Konsole(KDE)不使用此密钥,Gnome终端会这样做,因此我的应用程序无法访问F1密钥。我不认为有一种方法可以检测F1键是否已经在事物的GUI端映射(Gnome Terminal),但是如果有,那么答案将消除这个问题。 :)

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

我希望有一个可靠的方法来做到这一点,但我可以满足于“最好的猜测”。像是为了让我合理地假设Gnome Terminal是包装终端的方法,可以使用环境变量来获取线索。

额外信息:其他密钥也被“窃取”由Gnome Terminal。我打算为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 Terminal可能会报告自己可能是一种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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top