Как я могу обнаружить терминал Gnome? - PullRequest
2 голосов
/ 03 ноября 2008

Я пишу консольное приложение, которое использует клавишу F1 (для справки). К сожалению, хотя Konsole (из KDE) не использует этот ключ, Gnome Terminal использует его, поэтому клавиша F1 становится недоступной для моего приложения. Я не думаю, что есть способ определить, назначена ли уже клавиша F1 на стороне GUI (терминал Gnome), но если так, то ответ на этот вопрос устранит этот вопрос. :)

Ergo, мой следующий лучший выбор - попытаться определить, работаю ли я в терминале Gnome. Есть ли способ сделать это? В первую очередь мне интересно узнать это из Ruby, но если это можно сделать с помощью переменных оболочки или среды или виртуальной файловой системы (/ proc, / dev и т. Д.), То этого будет достаточно.

Я надеюсь на надежный способ сделать это, но я могу согласиться с подходами "наилучшего предположения", такими как поиск переменных среды для подсказок, которые позволяют мне разумно предположить, что Gnome Terminal является терминалом обертки.

Дополнительная информация: другие ключи также «украдены» терминалом Gnome. Я намерен показать какое-то информативное сообщение об альтернативных ключах для пользователей Gnome.

Ответы [ 6 ]

9 голосов
/ 03 ноября 2008

Google показало, что я могу положиться на Gnome Terminal, установив для переменной среды COLORTERM значение 'gnome-terminal'.

4 голосов
/ 17 октября 2014

для зш:

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

gnome-терминал использовал для установки $COLORTERM, но это было отброшено (в 3.12.0-67-g1d5c1b6).

1 голос
/ 28 декабря 2008

fwiw, это настройка в gnome-терминал; пользователи могут перейти к меню «Правка» -> «Сочетания клавиш» в меню терминала gnome и изменить или удалить привязку клавиш F1.

1 голос
/ 03 ноября 2008

Довольно грубый метод, если вы хотите делегировать его оболочке - в противном случае, в 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»

Я знаю, это определенно "взломать как пират";)

1 голос
/ 03 ноября 2008

Обычно вы используете информацию termcap, также называемую terminfo. Это говорит о том, с каким терминалом вы работаете, а также о том, какие ключи.

Это выбор пользователя, и, поскольку Gnome Terminal сообщает о себе как о, вероятно, своего рода х-термине, как, вероятно, делает Konsole, у пользователя, вероятно, есть способ создать нажатие клавиши F1. Поэтому я подозреваю, что возможности обоих терминалов будут указаны как эквивалентные.

Это исследование кодов выхода из функциональной клавиши может быть интересным без реального объяснения того, как, если это вообще возможно, можно сделать терминал гнома для производства нажатия F1. Думая о терминале Mac OS X, который я использовал давным-давно, он перехватывал PageUp и PageDown для полосы прокрутки, в то время как Command-PageUp и Command-PageDown передавали их через терминал.

0 голосов
/ 28 февраля 2011

Я просто проверяю $ TERM для эмулятора терминала по своему выбору, а затем добавляю псевдоним для порождения нового терминала в текущем каталоге.

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