2017-01-23 15 views
0

Я пишу программу, которая использует termcaps, и мне нужно знать, какой терминал я использую.
Я знаю, что могу получить TERM переменную через getenv("TERM"), но я могу запустить свою программу с помощью «$ env -i ./myprog», и TERM не будет установлен.Могу ли я безопасно установить переменную среды TERM?

Итак, как я могу определить, какой тип терминала использовать?
Могу ли я безопасно установить TERM переменной в xterm/xterm-256color в моей заявке?
Может ли это вызвать проблемы с переносимостью?
Есть ли способ сделать это (получить термин типа) безопасно?
У меня есть много руководств (getty - getttab - tty - ttys) и сообщений, но я не могу найти решения.

Я также беспокоюсь, потому что, если я запускаю оболочку (например, zsh или tcsh) У меня есть проблемы с некоторыми ключами.

Например запускающее zsh следующим образом:
$env -i zsh
будет вызывать проблемы со стрелками и любые клавиши, подразумевающих termcaps (даже Ctr-d).
Вместо этого bash и tcsh будут вести себя обычно на многих клавишах, но не на всех.

+1

Конструкция TERM-переменная существует точно определить тип терминала, которые будут использоваться , существует лишь один общий способ угадать тип терминала и установить TERM. Вы можете позволить пользователю выбрать терминал, если он отключен, или попытаться по умолчанию использовать 'vt100', поскольку это часто используется. – Ctx

+0

Я пытаюсь получить более переносимое, чем возможное приложение, поэтому я полагаю, что если я выберу установку по умолчанию vt100, у меня может возникнуть проблема портативности? – LotoLo

+0

Нет, это просто не будет работать, как ожидалось, если используемая эмуляция терминала несовместима с vt100. Портативный способ: Опираясь на настройку переменной среды TERM; если он не установлен, пользователь должен исправить свою среду. – Ctx

ответ

0

Это (несколько) безопасно установить TERM=vt100 по умолчанию (предложение Ctx), так как большинство эмуляторов терминала настроены так, чтобы имитировать. Однако я бы рекомендовал вам напечатать предупреждение в этом случае.

1

Если вы действительно используете termcap (а не некоторую минимальную реализацию, такую ​​как busybox), вероятно, вы используете систему, которая предоставляет tset, что может предложить пользователю выбор по умолчанию для TERM, который можно изменить.

Что-то вроде этого:

eval `tset -s vt100` 

в инициализации оболочки будет работать.

Фактически tset не ограничивается termcap-системами, но это то, с чего оно началось.

Дальнейшее чтение:

 Смежные вопросы

  • Нет связанных вопросов^_^