Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 [ 170 ] 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

15.4. Определение размера терминала или окна 527

POSIX::Termios (или можно предположить 9600 бит/с). Ошибки, возникающие при работе с POSIX::Termios, перехватываются с помощью eval:

use Term Cap,

SOSPEED = 9600, eval {

require POSIX,

my Stermios = POSIX Termios->new(),

$termios->getattr,

SOSPEED = $termios->getospeed,

Sterminal = Term Cap->Tgetent({OSPEED=>$OSPEED}), $terminal->Tputs( cl , 1, STDOUT),

Или выполните команду clear:

system( clear ),

Комментарий

Если вам приходится часто очищать экран, кэшируйте возвращаемое значение Тегш::Сар или команды clear:

Sclear = $terminal->Tputs( cl ), Sclear = clear ,

Это позволит очистить экран сто раз подряд без стократного выполнения clear: print Sclear,

!> Смотри также-

Man-страницы с/еаг(1) и termcap{\) (если они есть); документация по стандартному модулю Тегт;:Сар; документация по модулю Тегш::ЫЬ с CPAN.

15.4. Определение размера терминала или окна

проблема

Требуется определить размер терминала или окна. Например, вы хотите отформатировать текст так, чтобы он не выходил за правую границу экрана.

Решение

Воспользуйтесь функцией ioctl (см. рецепт 12.14) или модулем Term::ReadKey с CPAN:

use Term ReadKey,

(Swohar, Shchar, Swpixels, Shpixels) = GetTerminalSizeO,



Sratio = ($width-10)/Smax; # Символов на единицу

foreach (@values) {

printf("%8.If %s\n", $ , "." X (Sratio.$ ));

> Смотри таюке-

Документация по модулю Term;;ReadKey с CPAN; рецепт 12.14.

15.5. Изменение цвета текста

Проблема

Вы хотите выводить на экране символы разных цветов. Например, цвет может использоваться для выделения текущего режима или сообщения об ошибке.

Решение

Воспользуйтесь модулем Terffl::ANSIColor с CPAN для передачи терминалу последовательностей изменения цвета ANSI;

use Term:lANSIColor;

print color("red"), "Danger, Will Robinson!\n", color("reset"); print "This is just normal text.\n";

print colored("<BLINK>Do you hurt yet?</BLINK>", "blink");

Или воспользуйтесь вспомогательными функциями модуля Term;:ANSIColor; use Term:lANSIColor qw(:constants);

print RED, "Danger, Will Robinson!\n", RESET;

Комментарий

Функция GetTerminalSize возвращает четыре элемента: ширину и высоту в символах, а также ширину и высоту в пикселях. Если операция не поддерживается для устройства вывода (например, если вывод был направлен в файл), возвращается пустой список.

Следующий фрагмент строит графическое представление lvalues при условии, что среди элементов нет ни одного отрицательного:

use Term::ReadKey;

(Swidth) = GetTerminalSizeO;

die "You must have at least 10 characters" unless Swidth >= 10; Smax = 0;

foreach (©values) {

Smax = $ if Smax < S ;



Комментарий

Модуль Term::ANSIColor готовит служебные последовательности, которые опознаются некоторыми (хотя далеко не всеми) терминалами. Например, в color-xterm этот рецепт работает. В обычной программе xterm или на терминале vt100 он работать не будет.

Существуют два варианта использования модуля: либо с экспортированными функциями со1ог($АТРИБУТ) и colored($ТЕКСТ, $АТРИБУТ), либо с вспомогательными функциями (такими, как BOLD, BLUE и RESET).

Атрибут может представлять собой комбинацию цветов и модификаторов. Цвет символов принимает следующие значения; black, red, green, yellow, blue, magenta (черный, красный, зеленый, желтый, синий, малиновый). Цвет фона принимает значения оп Ыаск, on red, on green, on yellow, on blue, on magenta, on cyan и on white (черный, красный, зеленый, желтый, синий, малиновый, голубой и белый). Допускаются следующие модификаторы: clear, reset, bold, underline, underscore, blink, reverse и concealed (очистка, сброс, жирный, подчеркивание, подчеркивание, мерцание, инверсия и скрытый). Clear и reset являются синонимами (как и underline с underscore). При сбросе восстанавливаются цвета, действовавшие при запуске программы, а при выводе скрытого текста цвет символов совпадает с цветом фона.

Атрибуты могут объединяться:

print colore red on black"), "venom lack\n"; print color("red on yellow"), "kill that fellow\n";

print color("green on cyan blink"), "garish!\n"; print color("reset");

Этот фрагмент можно было записать в виде:

print colored("venom lack\n", "red on black");

print colored("kill that fellow\n", "red", "on yellow");

print colored("garish!\n", "green", "on cyan", "blink"); или:

use Term::ANSIColor qw(:constants);

print BLACK, ON WHITE, "black on white\n"; print WHITE, ON BLACK, "white on black\n"; print GREEN, ON CYAN, BLINK, "garish!\n"; print RESET;

где BLACK - функция, экспортированная из Тегш::АК51Со1ог.

Не забывайте вызвать print RESET или со1ог(" reset") в конце программы, если вызов colored не распространяется на весь текст. Если этого не сделать, ваш терминал будет раскрашен весьма экзотическим образом. Сброс даже можно включить в блок END:

END { print color("reset") }

чтобы при завершении программы цвета были гарантированно сброшены.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 [ 170 ] 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242