3

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

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

我希望有一种可靠的方法来做到这一点,但我可以满足于“最佳猜测”方法,比如 grep 环境变量寻找线索,让我合理地假设 Gnome 终端是包装终端。

额外信息:其他密钥也被 Gnome 终端“偷走”。我打算为 Gnome 用户显示一些关于备用键的信息性消息。

4

6 回答 6

9

Googleage 透露我也许可以依靠 Gnome 终端将 COLORTERM 环境变量设置为“gnome-terminal”。

于 2008-11-03T05:36:50.230 回答
5

对于 zsh:

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

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

于 2014-10-17T15:49:46.210 回答
1

通常你使用 termcap info aka terminfo。这会告诉您正在使用哪种终端以及键是什么。

这是用户的选择,并且由于 Gnome 终端报告自己可能是一种 x-term,正如 Konsole 可能所做的那样,用户可能有一种方法来创建 F1 按键。因此,我怀疑两者的终端能力将被报告为等效。

功能键转义码的调查可能会让您感兴趣,但实际上并没有解释如何使 gnome 终端(如果可能的话)产生 F1 按键。想想我很久以前使用的 Mac OS X 终端,它捕获 PageUp 和 PageDown 作为滚动条,而 Command-PageUp 和 Command-PageDown 将它们传递到终端。

于 2008-11-03T05:39:35.950 回答
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”

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

于 2008-11-03T09:24:48.040 回答
1

fwiw,这是 gnome-terminal 中的设置;用户可以转到 gnome-terminal 菜单中的 Edit -> Keyboard Shortcuts 并更改或删除 F1 键绑定。

于 2008-12-28T08:36:55.047 回答
0

我只需检查我选择的终端仿真器的 $TERM,然后添加一个别名以在当前目录中生成一个新终端。

if [[ $TERM == 'xterm' ]] ; then
  alias nw='gnome-terminal --working-directory=$PWD'
fi
于 2011-02-28T09:22:23.740 回答