Я пишу консольное приложение, в котором используется клавиша F1 (для справки). К сожалению, хотя Konsole (из KDE) не использует этот ключ, Gnome Terminal его использует, поэтому клавиша F1 становится недоступной для моего приложения. Я не думаю, что есть способ определить, отображается ли уже клавиша F1 в графическом интерфейсе (Gnome Terminal), но если есть, ответ на этот вопрос устранит этот вопрос. :)
Итак, мой следующий лучший вариант - попытаться определить, работаю ли я внутри Gnome Terminal. Есть какой-нибудь способ это сделать? Меня в первую очередь интересует почерпнуть это из Ruby, но если это можно сделать с помощью переменных оболочки, среды или виртуальной файловой системы (/ proc, / dev и т. д.), Этого будет достаточно.
Я надеюсь на надежный способ сделать это, но я могу согласиться на подходы «наилучшего предположения», такие как поиск переменных окружения для подсказок, которые могут позволить мне разумно предположить, что Gnome Terminal является терминалом-оболочкой.
Дополнительная информация: другие ключи также «украдены» Gnome Terminal. Я собираюсь показать какое-то информативное сообщение об альтернативных ключах для пользователей Gnome.

Googleage показал, что я могу положиться на то, что Gnome Terminal установит для переменной среды COLORTERM значение 'gnome-terminal'.
Поскольку v3.13 gnome-terminal удалил настройку переменной COLORTERM, следовательно, это не решение для новых версий gnome-terminal.
В более новой версии gnome-terminal, где $COLORTERM недоступен, вы можете безопасно проверить наличие $VTE_VERSION.
Обычно вы используете информацию о termcap или terminfo. Это говорит вам, с каким терминалом вы работаете, а также какие ключи.
Это выбор пользователя, и поскольку Gnome Terminal сообщает о себе, вероятно, как о разновидности x-term, как это, вероятно, делает Konsole, у пользователя, вероятно, есть способ создать нажатие клавиши F1. Поэтому я подозреваю, что терминальные возможности этих двух будут указаны как эквивалентные.
Это исследование Коды выхода функциональных клавиш может быть интересно для вас без фактического объяснения того, как, если это вообще возможно, можно заставить терминал gnome производить печатную машину F1. Думая о терминале Mac OS X, который я использовал давно, он ловил PageUp и PageDown для полосы прокрутки, в то время как Command-PageUp и Command-PageDown передавали их в терминал.
@dlamblin: эта ссылка информативна, но в конечном итоге не помогает понять, может ли Gnome Terminal легко разрешить пользователю отправлять F1 (или эквивалентную кодовую последовательность). Держу пари, вы можете вручную нажать какую-нибудь последовательность, например «Esc O P».
Довольно грубый метод, если вы хотите делегировать это оболочке - в противном случае на 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.
Я знаю, это определенно "пиратская халтура";)
почти отлично, пришлось немного адаптировать github.com/mpapis/mpapis_test/blob/master/is_parent_process. sh
fwiw, это настройка в gnome-terminal; пользователи могут перейти в Edit -> Keyboard Shortcuts в меню gnome-terminal и изменить или удалить привязку клавиш F1.
Хотя это правда, мне слишком много работы, чтобы ожидать ее от потенциального пользователя. Хотели бы вы и дальше использовать приложение, которое требовало от вас этого, как часть вашего нестандартного опыта? :)
Я просто проверяю $ TERM для выбранного эмулятора терминала, а затем добавляю псевдоним для создания нового терминала в текущем каталоге.
if [[ $TERM == 'xterm' ]] ; then
alias nw='gnome-terminal --working-directory=$PWD'
fi
Для zsh:
[[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $$ -o ppid=) -o cmd=):t} == gnome-terminal* ]]
gnome-terminal использовался для установки $COLORTERM, но он был удален (в 3.12.0-67-g1d5c1b6).
Проголосовали за обнаружение того самого коммита, который изменил COLORTERM :)
Я только что протестировал его, и не было
COLORTERM, но он работал со скриптом, похожим на этот из @Fusion