Вопрос

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

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

Я надеюсь на надежный способ сделать это, но я могу согласиться на «наилучшее предположение» Подходы, такие как поиск переменных окружения для подсказок, которые позволят мне разумно предположить, что 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-терминал использовал для установки $ COLORTERM , но это было удалено (в 3.12.0-67-g1d5c1b6).

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

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

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

Довольно грубый метод, если вы хотите делегировать его оболочке - в противном случае, в 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 (), вы можете использовать вместо 'bash' имя 'grep'

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

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

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

if [[ $TERM == 'xterm' ]] ; then
  alias nw='gnome-terminal --working-directory=$PWD'
fi
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top