Большинство современных терминалов являются производными xterm или rxvt и поддерживают те же escape-последовательности, которыми мы пользовались раньше. Некоторые фирменные терминалы, идущие вместе с различными версиями Unix, имеют свои собственные escape-последовательности.
aixterm понимает escape-последовательности xterm.
Эти терминалы устанавливают $TERM=iris-ansi и используют escape-последовательности:
ESCP1.yстрокаESC\ Устанавливает заголовок окна
ESCP3.yстрокаESC\ Устанавливает имя иконки
Терминалы Irix также поддерживают последовательности xterm для установки заголовка окна и имени иконки раздельно, но не для установки и того и другого вместе.
cmdtool и shelltool устанавливают $TERM=sun-cmd и используют последовательности:
ESC]lстрокаESC\ Устанавливает заголовок окна
ESC]LстрокаESC\ Устанавливает имя иконки
dtterm устанавливает $TERM=dtterm и понимает как последовательности xterm, так и Sun cmdtool (проверено на Solaris 2.5.1, Digital Unix 4.0, HP-UX 10.20).
hpterm устанавливает $TERM=hpterm и использует последовательности:
ESC&f0kдлинаDстрока Устанавливает строку длиной в качестве заголовка окна
ESC&f-1kдлинаDстрока Устанавливает строку длиной в качестве имени иконки
Простая программа на C, вычисляющая длину строки и выводящая ее, выглядит примерно так:
#include <string.h> int main(int argc, char *argv[]) { printf("\033&f0k%dD%s", strlen(argv[1]), argv[1]); printf("\033&f-1k%dD%s", strlen(argv[1]), argv[1]); return(0); } |
Можно написать простой скрипт, использующий ${#string} (zsh, bash, ksh) или ${%string} (tcsh) для вычисления длины строки. Для zsh:
case $TERM in hpterm) str="\e]0;%n@%m: %~\a" precmd () {print -Pn "\e&f0k${#str}D${str}"} precmd () {print -Pn "\e&f-1k${#str}D${str}"} ;; esac |