rebol document

Приложение 3 - Консоль

Руководство пользователя REBOL / Core
Основное содержание
Отправьте нам отзыв

Содержание:

1. Командная строка
2. Индикатор результата
3. Вызов истории
4. Индикатор занятости
5. Расширенные операции с консолью
5.1 Последовательности ввода с клавиатуры
5.2 Последовательности вывода терминала

1. Командная строка

Приглашение командной строки по умолчанию - ">>". Вы можете изменить приглашение с помощью такого кода, как:

system/console/prompt: "Input: "

Тогда приглашение станет:

Input:

Подсказка может быть блоком, который оценивается каждый раз. Эта строка печатает текущее время:

system/console/prompt: [reform [now/time " >> "]]

Это приведет к появлению запроса:

10:30 >>

2. Индикатор результата

Индикатор результата по умолчанию - "==" и может быть изменен с помощью такой строки, как:

system/console/result: "Result: "

Эти настройки можно передать user.r, чтобы сделать их постоянными.

3. Напоминание истории

Каждая строка, введенная в REBOL в командной строке, сохраняется в блоке истории, и ее можно вызвать позже, используя клавиши со стрелками вверх и вниз. Например, однократное нажатие стрелки вверх вызывает предыдущую строку ввода.

Доступ к блоку истории, содержащему все строки ввода, осуществляется из объекта системной консоли:

probe system/console/history

Вы можете сохранить блок истории в виде файла:

save %history.r system/console/history

и его можно перезагрузить позже с помощью:

system/console/history: load %history.r

Эти строчки можно вводить user.r для сохранения и перезагрузки вашей истории между сессиями REBOL.

4. Индикатор занятости

Когда REBOL ожидает завершения сетевой операции, на экране появляется индикатор занятости, указывающий на то, что что-то происходит. Вы можете изменить индикатор с помощью такой строки:

system/console/busy: "123456789-"

Когда REBOL работает в тихом режиме, индикатор занятости отображаться не будет.

5. Расширенные операции с консолью

Консоль предоставляет возможность «виртуального терминала», которая позволяет выполнять такие операции, как перемещение курсора, адресация курсора, редактирование строки, очистка экрана, ввод управляющих клавиш и запрос положения курсора.

Последовательности управления с консоли соответствуют стандарту ANSI. Эти функции предоставляют вам возможность писать собственные терминальные программы, не зависящие от платформы, такие как текстовые редакторы, почтовые клиенты или эмуляторы telnet.

Функции консоли применимы как к вводу, так и к выводу. При вводе функциональные клавиши будут преобразованы в многосимвольные escape-последовательности. На выходе можно использовать многосимвольные escape-последовательности для управления отображением текста в окне консоли. И входная, и выходная последовательности начинаются с escape-символа ANSI, 27 десятичного числа (1B в шестнадцатеричном формате). Следующий символ в последовательности указывает управляющие клавиши на входе или операцию управления терминалом на выходе.

Управляющие символы ANSI чувствительны к регистру и обычно требуют символа верхнего регистра.

5.1 Последовательности ввода с клавиатуры

Последовательности ввода для функциональных клавиш перечислены в таблице ниже (в системах и оболочках, которые их поддерживают, таких как Linux, BSD и т.д.).

Чтобы получить эти последовательности в виде потока необработанных символов, отключите режим обработки строки входного порта:

set-modes system/ports/input [lines: false]

Теперь вы можете получить ввод из порта (с помощью COPY или READ-IO) или использовать такую ​​функцию, как INPUT, для получения каждого символа:

while [
    code: input
    code <> 13  ; ENTER
][
    probe code
]

Вот несколько общих кодов входных функций ANSI:

Функциональная клавиша

Escape Code

REBOL Block

F1

ESC O P

[27 79 80]

F2

ESC O Q

[27 79 81]

F3

ESC O R

[27 79 82]

F4

ESC O S

[27 79 83]

F5

ESC [ 1 5 ~

[27 91 49 53 126]

F6

ESC [ 1 7 ~

[27 91 49 55 126]

F7

ESC [ 1 8 ~

[27 91 49 56 126]

F8

ESC [ 1 9 ~

[27 91 49 57 126]

F9

ESC [ 2 0 ~

[27 91 50 48 126]

F10

ESC [ 2 1 ~

[27 91 50 49 126]

F11

ESC [ 2 2 ~

[27 91 50 50 126]

F12

ESC [ 2 3 ~

[27 91 50 51 126]

Home

ESC [ 1 ~

[27 91 49 126]

End

ESC [ 4 ~

[27 91 52 126]

Page-up

ESC [ 5 ~

[27 91 53 126]

Page-down

ESC [ 6 ~

[27 91 54 126]

Insert

ESC [ 2 ~

[27 91 50 126]

Up

ESC [ A

[27 91 65]

Down

ESC [ B

[27 91 66]

Left

ESC [ D

[27 91 68]

Right

ESC [ C

[27 91 67]

5.2 Последовательности выходных символов

Существует несколько вариантов последовательностей выходных символов управления терминалом. Некоторым кодам команд предшествует число (отправленное в формате ASCII), указывающее, что операция должна выполняться указанное количество раз. Например, команде перемещения курсора могут предшествовать два числа, разделенных точкой с запятой, чтобы указать позицию строки и столбца, к которым нужно перейти. Командные символы курсора (требуется верхний регистр) включены в следующую таблицу:

Последовательность вывода

Описание

(1B)

Используйте этот escape-код перед следующими кодами

D

Перемещает курсор на одну позицию влево

C

Перемещает курсор на одну позицию вправо

A

Перемещает курсор на одну позицию вверх

B

Перемещает курсор на одну позицию вниз

n D

Перемещает курсор на n пробелов влево

n C

Перемещает курсор на n пробелов вправо

n A

Перемещает курсор на n пробелов вверх

n B

Перемещает курсор на n пробелов вниз

r ; c H

Перемещает курсор в строку r, столбец c *

H

Перемещает курсор в верхний левый угол (домой) *

P

Удаляет один символ справа в текущем местоположении

n P

Удаляет n символов справа в текущем местоположении

@

Вставляет одно пустое пространство в текущее местоположение

n @

Вставляет n пробелов в текущее местоположение

J

Очищает экран и перемещает курсор в верхний левый угол (домой) *

K

Очищает от текущей позиции до конца текущей строки

6n

Помещает текущую позицию курсора во входной буфер

7n

Помещает размеры экрана во входной буфер

Верхний левый угол определяется как строка 1, столбец 1

В следующем примере курсор перемещается на десять правых пробелов:

print "^(1B)[10CHi!"
Hi

В этом примере курсор перемещается на семь левых пробелов и очищается оставшаяся часть строки:

cursor: func [parm [string!]][join "^(1B)[" parm]
print ["How are you" cursor "7D" cursor "K"]
How a

Чтобы узнать текущий размер окна консоли, вы можете использовать этот пример:

cons: open/binary [scheme: 'console]

print cursor "7n"
screen-dimensions: next next to-string copy cons
33;105R
close cons

В приведенном выше примере открывается консоль, отправляется управляющий символ во входной буфер и копируется возвращаемое значение. Он считывает значение (размеры экрана), которое возвращается после управляющего символа, и закрывает консоль. Возвращаемое значение - высота и ширина, разделенные точкой с запятой (;), за которой следует R. В приведенном выше примере экран имеет высоту 33 и ширину 105.

Автопрокрутка

Печать символа в правом нижнем углу некоторых терминалов приведет к появлению новой строки, которая будет прокручивать экран. Других не будет. Это несоответствие между типами консольных терминалов необходимо учитывать при написании скриптов REBOL, предназначенных для кроссплатформенности.


Updated 8-Apr-2005 - Copyright REBOL Technologies - Formatted with MakeDoc2
REBOL.com Documents Manual Dictionary Library Feedback