Москва, 1988
5. ПОСТАНОВКА РЕДАКТОРА red. ПОДКЛЮЧЕНИЕ НОВЫХ ТИПОВ ТЕРМИНАЛОВ
5.1. Описание терминала в базе описаний терминалов | |
5.2. Адресация курсора. |
ПРИЛОЖЕНИЕ 1. Справочная информация по red. Краткое описание команд
ПРИЛОЖЕНИЕ 2. Изображение команд редактора при вводе макроопределения
Экранный редактор red работает под управлением операционной системы ДЕМОС и предназначен для просмотра и изменения текстовых файлов ДЕМОС в экранном режиме. Он имеет следующие особенности:
При работе red использует весь экран терминала. На экране выделяется несколько различных областей. Основную часть занимает "окно" отображения файла, обведенное рамкой, самая нижняя строка оставляется для ввода "параметров команд"
редактора и для выдачи сообщений. В этой же строке высвечивается номер строки и имя редактируемого файла (рисунок 1).
При необходимости "окно" можно поделить на несколько меньших окон и изобразить в них разные файлы или разные части одного файла. Каждое "окно" показывает часть закреп-
ленного за ним файла.
Для перемещения курсора внутри окна используются клавиши со стрелками и надписями <RETURN> (<ВК>), <HOME>, <TAB>; при наборе текста на текстовой клавиатуре он просто вводится в файл в место, указываемое курсором. Для более сложных операций служат "команды" редактора red, которые вводятся с помощью функциональной клавиатуры и, в частности, позволяют:
Экран тeрминала ѓ'ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ' ѓљ ---------------------------------------- ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ : <окно> : ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ : : ѓљ ѓљ ---------------------------------------- ѓљ ѓљ Арг:<параметры> Файл:a Стр: 10 ѓљ ѓ"ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ›ѓ" Рис. 1
Команды редактора вводятся при помощи функциональных клавиш и обозначаются в данном документе так:
<НАЗВАНИЕ КОМАНДЫ>.
Для редактирования файла имя , начиная со строки номер, необходимо набрать команду:
red имя [номер]
red
red -
red -[-ключи][+ключи] остальные параметры
В данном разделе описаны правила ввода команд и использования клавиатуры при работе с редактором red, а также изображение символов из файла на экране терминала. Для ввода команд редактора, как правило, используется дополнительная цифровая клавиатура, которая размещена справа от основной клавиатуры. Так, команда <+PAGE> вводится нажатием клавиши 7, а команда <ARG> - клавишей 1. Если предполагается использовать для работы с red терминал, который имеет полный набор прописных и строчных русских и латинских букв и дополнительную клавиатуру, никаких сложностей с вводом не возникает - терминал позволяет вводить все символы кода КОИ-8 и использовать дополнительную клавиатуру для ввода команд. В этом случае можно переходить к чтению следующего параграфа. Некоторые сложности возникают при работе на терминалах, не
имеющих полного набора символов либо дополнительной цифровой клавиатуры.
При вызове red может оказаться, что редактору не доступны характеристики вашего тeрминала. В этом случае перед первым вызовом редактора введите команду (в интерпретаторе csh):
setenv TERM Тип_терминала
Редактор рассчитан на работу с текстами, содержащими строчные и прописные русские и латинские буквы в коде КОИ-8, допускаются также символы с кодами, не имеющими графического изображения. В зависимости от возможностей терминала, некоторые символы файла могут изображаться на экране в виде двух и более символов:
строчные буквы | - прописными буквами |
прописные буквы | - \прописная буква |
\ | - \\ |
~ (тильда) | - \^ (\`надчерк') |
` (обратная кавычка) | - \' |
} (закр.фигурная скобка) | - \) |
{ (откр.фигурная скобка) | - \( |
| (вертикальная черта) | - \! |
@kkk
@#
Ввод текста с клавиатуры практически не зависит от типа терминала.
Для управления редактированием, просмотра файлов и других действий используются команды редактора red, которые идентифицируются командами, вводимыми с клавиатуры. Команды вводятся нажатием 1 или 2-х управляющих или функциональных клавиш. В зависимости от конкретного терминала, они могут вводиться одним из нескольких способов:
Редактор показывает участок редактируемого файла на экране терминала в "окне". Имя файла, который нужно редактировать первым, указывается в параметрах вызова red. Можно перейти к другому файлу, воспользовавшись командой <USE>. Кроме того, редактор автоматически подключает псевдо-файл "#", в котором запоминаются все отмеченные или исключенные строки.
"Окно" можно разделить на несколько меньших "окон" с помощью команды <M-PORT>, отобразив в каждом участок того или иного файла (рис.2). Для упрощения переключения с файла на файл любое "окно" может быть связано также с "альтернативным файлом". Команда <USE> без параметров меняет местами основной и альтернативный файлы в текущем окне. При входе в редактор альтернативным является файл /usr/lib/re.std, содержащий краткое описание редактора.
Для уничтожения окон служит команда <ARG><M-PORT>. Изменения, произошедшие в файле, повторяются одновременно во всех "окнах", связанных с ним.
Среди всех "окон" имеется "текущее", в котором находится курсор. Левые и правые символы-ограничители несут следующую информацию:
слева: ; - данной строки в файле нет;
Пример "окон" ..................................... .-----------------------------------. .! !! !. .! текущее !! еще одно !. .! "окно" !! "окно" !. .! !! !. .!длинная строка>! !. .! !! !. .! !! !. .; !! !. .; !! !. .-----------------------------------. .arg: file: a line 10 . ..................................... Рис. 2
! - строка есть в файле и "окно" начинается с 1 колонки файла; < - "окно" начинается не с 1 колонки файла, а сдвинуто по файлу вправо; справа: ! - в строке нет информации справа от окна; > - строка продолжается за правую границу "окна".
В процессе редактирования часто возникает необходимость временно запомнить точку редактирования, текст или набор команд и затем многократно их использовать. Для этого в редакторе red служат переменные. Имеется 26 переменных с именами от a до z (имя состоит из одной латинской буквы), в которых можно хранить следующую информацию:
Режимы работы редактора red определяется несколькими ключами, каждый из которых идентифицируется буквой латинского алфавита и может быть включен или выключен. Ключи устанавливаются по умолчанию (в зависимости от возможностей терминала и переменных окружения SHELL) и могут быть изменены пользователем. Включенные ключи означают следующее:
e | - на терминале нет русских букв; |
l | - на терминале нет строчных букв; |
t | - при записи строк заменять начальные пробелы табуляциями; |
w | - разрешено изменение текущего файла; |
i | - режим вставки; |
s | - разрешено пользоваться аппаратными функциями сдвига текста на экране; |
f | - запрет сдвига экрана при достижении курсором его границы при вводе; |
a | - специальный режим АВТОСДВИГ, при котором по команде <RETURN> курсор устанавливается не на 1-ю колонку экрана, а на ту колонку, с которой был начат ввод текста последний раз (эта колонка указывается в нижней строке окна специальным курсором). |
red [-[-ключи][+ключи]] остальные аргументы
red --t a.mx
setenv REDKEYS [-ключи][+ключи]
<ARG>[-ключи][+ключи]<RETURN>
Редактор red обеспечивает двойную защиту от потери информации. Во первых, при записи файла старое содержимое сохраняется под именем старое_имя.b. Во вторых, редактор при работе ведет протокол работы в файле /tmp/rettnn.name, где nn - два последних символа имени терминала, а name - идентификатор пользователя. Если произойдет сбой машины либо редактора, можно повторить сеанс командой:
red -
Команды red идентифицируются командными последовательностями и могут быть введены как с параметрами, так и без параметров:
<КОМАНДА> <ARG>параметры<КОМАНДА>
В случае команды с параметрами сначала вводится команда <ARG>, затем параметры и затем соответствующая команда. Так, например, для подвода к 100 строке необходимо:
<ARG>100<GOTO>
* * * указание курсором * * *
Пример указания области .................................. . окно . . нач.положение . . 1*************** . . **область******* . . **действия****** . . ****************2 . . кон. . . положение . .................................. .................................. . окно . . нач.положение . .*****1**************************. .*******область****на всю********. .*******действия****ширину*******. .*****2**************************. . кон. . . положение . .................................. .................................. . окно . . нач.положение . . 1***************2 . . кон. . . положение . .................................. (символ 1 входит в область, 2 - нет) Рис. 3
При случайном нарушении изображения на экране терминала его можно восстановить, нажав:
CTRL/L или <ARG>r<RETURN>
При нажатии на соответствующую клавишу курсор перемещается на одну позицию:
<стрелка вверх> | - вверх; |
<стрелка вниз> | - вниз; |
<стрелка вправо> | - вправо; |
<стрелка влево> | - влево. |
<HOME> | - курсор переходит в левый верхний угол окна видения; |
<RETURN> | - курсор переходит на начало следующей строки. Если строка была последней, "окно" перемещается вниз по файлу. Если оно начиналось не с 1 колонки файла, оно сдвинется на первую колонку; |
<ARG>команда<RETURN> | - ввод директивы редактора ; |
<TAB> | - табуляция; курсор перемещается на очередную позицию табуляции. По умолчанию это - 9, 13, 25, 33, 31, 49, 57, 65 и 73 колонки; |
<B-TAB> | - табуляция назад. Полностью аналогично <TAB>, но курсор движется назад. По умолчанию - клавиша `.'; |
<SET-TAB> | - устанавливает новую позицию табуляции в текущей колонке. По умолчанию вводится нажатием на 2 клавиши - `2'`5'; |
<ARG><SET-TAB> | - снимает позицию табуляции в текущей колонке; |
Если в редактируемый файл разрешена запись, то символы,
набираемые на клавиатуре, попадают в текущий файл так, как это изображается на экране. При достижении курсором правой границы экрана он автоматически сдвигается на 30 колонок вправо. При достижении курсором 72 колонки файла выдается предупредительный звуковой сигнал.
Для вставки символов служит режим вставки "INSERT". В этом режиме при наборе символов строка раздвигается. Для включения и выключения режима служит команда:
<INSERT> | - включить/выключить режим вставки. По умолчанию это - клавиша `5'; |
Для уничтожения символов внутри строки служат две команды:
<DEL-CH> | - уничтожается текущий символ, правая часть строки сдвигается влево на 1 позицию. По умолчанию - клавиша `6'; |
<B-SPACE> | - отменяет предыдущий символ; в режиме вставки строка уплотняется. Действует и при вводе параметров. По умолчанию - клавиши `DEL' или `BackSpace'. |
Нетекстовыми (неграфическими) являются символы с кодами
0-037, 0177-0277,, 0377. Для их ввода в файл служит специальный "ESCAPE"-символ, который преобразует следующий за ним символ в нетекстовый.
Для ввода символа с кодом 0-037 необходимо:
<ARG>>имя<RETURN> | Текущее положение курсора запоминается в переменной "имя". Затем эта переменная может быть использована в командах <OPEN>, <CLOSE>, <PICK>, <GOTO>. |
В редакторе строки текста считаются пронумерованными подряд, начиная с 1. Для подвода к нужной строке служит команда <GOTO> (по умолчанию клавиша `4').
<GOTO> | - подвод к началу файла; |
<ARG><GOTO> | - подвод к концу файла; |
<ARG>N<GOTO> | - подвод к строке номер "N" (N - целое число); |
<ARG>$имя<GOTO> | - подвод к месту в файле, запомненному под именем "имя" ("имя" - одна латинская буква); |
Страницей считается часть файла, умещающаяся в текущем окне на экране.
<+PAGE> | - перемещает окно на 1 страницу вниз по файлу; по умолчанию клавиша `7'; |
<-PAGE> | - перемещает окно на 1 страницу вверх; по умолчанию клавиши `2'`7'; |
<ARG>N<-PAGE> | - перемещает окно вниз (вверх) на N страниц. |
<ARG>N<+LINE> | - вперед на N строк; |
<ARG>N<-LINE> | - назад на N строк; |
<+LINE> | - вперед на 1 строку, если терминал поддерживает аппаратный сдвиг текста на экране, или на 8 строк в противном случае; |
<-LINE> | - назад на 1 строку (8, если нет аппаратного сдвига) ; |
<ARG><+LINE> | - Сдвинуть "окно" вниз так, чтобы текущая строка стала первой на экране; |
<ARG><+LINE> | - Сдвинуть "окно" вверх так, чтобы текущая строка стала последней на экране; |
<RIGHT> | - сдвинуть "окно" вправо на 30 колонок; по умолчанию `2'<стрелка вправо>. |
<LEFT> | - сдвинуть "окно" влево на 30 колонок; по умолчанию `2'<стрелка влево>. |
<ARG>N<RIGHT> | - сдвинуть "окно" вправо на N колонок; |
<ARG>N<LEFT> | - сдвинуть "окно" влево на N колонок; |
Окно можно двигать по файлу с помощью клавиш со стрелками: если не установлен ключ f (по умолчанию) и курсор "упирается" в границу окна, при очередном нажатии на клавишу движения курсора окно сдвинется в нужную сторону.
Команды <+/-SEARCH> (по умолчанию `3' и `2'`3') вызывают поиск заданного образа в файле соответственно вперед или
назад от текущего места. Для указания текста, который нужно найти, служат команды:
3.6. Контекстный поиск (<+SEARCH>, <-SEARCH>)
<ARG>текст<+SEARCH>
<ARG>текст<-SEARCH> | производится поиск указанного текста в файле вперед (назад) от текущего положения в файле. Если текст найден, это место в файле высвечивается на экране и курсор устанавливается на начало найденного текста, иначе выдается предупредительное сообщение:
"search key not found" ("Текст не найден") |
Команда <USE> (CTRL/D, или `-') служит для переключения редактора с файла на файл. Для перехода к редактированию нового файла служит команда:
<ARG>имя<USE> | начать редактировать файл имя. |
"Create (y/n)?" ("Создать(y/n)?") в случае положительного ответа создается новый файл.
<SAVE> | - запись текущего файла в архив (`2'`-' или CTRL/V по умолчанию). При этом исходный вариант файла переименовывается в "старое имя.b". После выполнения <SAVE> без параметров для повторения сеанса в случае сбоя необходимо восстановить исходное состояние файла из файла имя.b, поскольку изменилось исходное состояние редактируемых файлов. |
<ARG>имя<SAVE> | Происходит запись текущего файла в файл "имя". |
<ARG>+w<RETURN> | - запретить изменение текущего файла; |
<ARG>-w<RETURN> | - разрешить изменение (и запись, если она разрешена) редактируемого файла. |
Команда <OPEN> (раздвинуть) позволяет вставить пробелы между колонками, строками или в середину группы строк.
<OPEN> | - перед текущей строкой вставляется пустая строка; по умолчанию `8' или PF2. |
<ARG>n<OPEN> | - перед текущей строкой вставляется "n" пустых строк (где "n"-целое положительное число); |
<ARG><OPEN> | - текущая строка делится на две части, начиная с текущей колонки; |
<ARG>указание_курсором<OPEN>
<ARG>$имя<OPEN> | - в отмеченное курсором (или курсором и точкой, запомненной в "имя") место вставляются пробелы (или пустые строки, если отмечена группа строк целиком). Правила указания части файла с помощью курсора подробно приведены в описании команды <ARG>. |
<CLOSE> | - уничтожить текущую строку; по умолчанию `2'`8' или PF3. |
<ARG>n<CLOSE> | - уничтожить "n" строк, начиная с текущей; |
<ARG><CLOSE> | - склеить текущую строку со следующей, причем следующая строка приклеивается начиная с текущей колонки; |
<ARG>указание_курсором<CLOSE>
<ARG>$имя<CLOSE> | - уничтожается указанный кусок текста либо группа строк целиком. Правила указания с помощью курсора приведены в разделе <ARG>. |
<ARG><PUT> | - текст, убранный последней командой |
<CLOSE> | - вставляется в текущее место файла. |
<ARG>#<USE> | Псевдо-файл "#" можно просмотреть, введя эту команду |
<USE> | Для возврата в прежний файл. |
<ARG>>имя<CLOSE> | - текст, убранный последней командой <CLOSE>, запоминается в переменной "имя". |
Для копирования текста используются две команды. Команда <PICK> (выбрать) позволяет записать в буфер вставок кусок текста, который затем может быть вставлен в произвольное место по команде <PUT>. Выбранный текст попадает в конец псевдо-файла "#" и может быть просмотрен (<ARG>#<USE>) или выбран заново:
На экране терминала можно создавать новые "окна" и уничтожать старые. Для этого служит команда <M-PORT> (создать
"окно", клавиши `2'`4'). Новое "окно" создается в уже имеющемся путем деления его на две части. Если курсор находится в первой строке "окна", то оно делится по вертикали. Если курсор стоит в первой колонке окна, то деление происходит по горизонтали. В остальных случаях выдается сообщение об
ошибке. Примеры приведены на рисунках 4 и 5.
Максимальное число окон на экране равно 10.
Деление по горизонтали До команды После команды ------------------ ------------------ ! ! ! старое ! ! ! ! окно ! !*-курсор ! !----------------! ! старое ! ! новое ! ! окно ! ! окно ! ! ! ! ! ! ! ! ! ------------------ ------------------ Рис. 4
Деление по вертикали До команды После команды ------------------ ------------------- ! *-курсор ! ! !! ! ! ! ! старое !! новое ! ! ! ! !! ! ! старое ! ! окно !! окно ! ! окно ! ! !! ! ! ! ! !! ! ! ! ! !! ! ------------------ ------------------- Рис 5.
<CH-PORT> (по умолчанию `0')
Последовательность команд редактора вместе с любым текстом, если их приходится часто повторять, может быть присвоена "переменной" редактора red. Для записи макроопределения служит команда:
<ARG>d имя<RETURN>
Mac:
<LineFeed>$имя
В редакторе имеется возможность изменить действие функциональных и управляющих клавиш терминала. При этом клавиша может обозначать как любую команду редактора, так и выполнение макрокоманды. Для этого служит команда:
<ARG>k<RETURN>
Enter <new key>:
Enter <command> or <macro name>:
Такие полезные операции над текстами, как сортировка, выравнивание параграфов текста, структуризация текстов программ на "Си" и другие, выполняются командами операционной системы ДЕМОС. Редактор red позволяет использовать такие команды для переработки части файла с помощью команды <EXEC>. Например, для контекстной замены int на short в очередных 10 строках файла служит команда:
<ARG>10l rpl "int" "short"<EXEC>
После этого в очередных 10 строках произойдет замена текста int на short, которую выполнит команда ДЕМОС "rpl", написанная специально для red. Можно вызывать любые команды, которые могут использоваться как фильтр. Например:
cb | - улучшение читаемости программы на Си, |
sort | - сортировка |
<ARG><ч.п> <команда> <с.п.><EXEC> либо <ARG>-<ч.c.><команда> <с.п.><EXEC> либо <ARG><ч.с.>l <команда> <с.п.><EXEC> где <ч.п.> - число параграфов, <ч.с.> - число строк, <с.п.> - список параметров.
Причем <число строк> или <список параметров> могут отсутствовать.
Программа rpl вызывается командой <EXEC> и требует два аргумента. Она заменяет в указанных строках все вхождения
первого аргумента на второй аргумент. Если какой-либо аргумент содержит пробелы, он должен быть взят в кавычки. rpl распознает регулярные выражения в первом аргументе по тем же правилам, что и редактор ed в контексте поиска, с тем отличием, что вместо символа . используется @ для обозначения
одного произвольного символа.
С помощью команды <EXEC> можно вставить в любое место файла группу файлов, набрав:
Для того, чтобы окончить работу в red, записав все изменения в архив, служит команда:
Операционная система интерпретирует символы CTRL/S,
CTRL/Q (приостановить передачу, продолжить передачу), CTRL/N, CTRL/O (русский регистр, латинский регистр), а также символ "прерывание" (interrupt) - CTRL/C. Одиночное нажатие символа "прерывание" прерывает вывод на экран или операцию контекстного поиска и переводит редактор в режим ввода параметров. Двойное нажатие символа "прерывание" в случае, если редактор не успел перейти в режим ввода параметров, приводит к аварийному завершению работы без записи измененных файлов. В режиме приема с клавиатуры символ "прерывание" интерпретируется как команда <ARG>. В режиме повторения прерванного сеанса нажатие символа "прерывание" прерывает повторение и
переводит редактор в режим ввода с терминала.
Сообщения редактора высвечиваются в нижней строке экрана.
Они делятся на сообщения о режимах работы и сообщения об
ошибках. В зависимости от установленной версии редактора
диагностики выдаются на русском или английском языке. Ниже
будут приводиться оба варианта диагностики.
Первый (необязательный) аргумент формата определяет число строк либо параграфов за текущей строкой в файле, которые будут обрабатываться командой. Параграфы - это группы непустых строк, разделенные одной или несколькими пустыми строками. Целое неотрицательное число указывает число параграфов. если число отрицательно или за ним следует буква l -
оно указывает число строк. Если первый аргумент опущен, то имеется в виду 1 параграф текста. Таким образом, -15 или 15l задают 15 строк текста, а 2 - 2 параграфа.
Второй аргумент - имя команды операционной системы, за которым могут идти ее аргументы, разделенные пробелами. Для включения пробелов в аргумент можно использовать кавычки ".
Действие <EXEC> состоит в том, что вызывается указанная команда операционной системы с указанными параметрами. На стандартный ввод ей подаются заданные строки. Если команда выполнилась нормально, то указанные строки в файле заменяются на стандартный вывод команды. Старые строки помещаются в CLOSE-буфер.
3.12.1. Контекстная замена (rpl)
Например, команда:
<ARG>100l rpl "^ *" " "<EXEC>
исключит все группы пробелов в начале следующих 100 строк.
для обозначения самих символов $, &, @, ^, * перед ними
необходимо ставить \ (обратную черту).
3.12.2. Примеры использования команды <EXEC>
<ARG>0 cat <список файлов><EXEC>
Если при вводе программ на языке Си в отдельных функциях
не оставлять пустых строк, а сами функции разделять пустыми
строками, то можно улучшить читаемость текста любой функции,
подведя курсор к ее началу и набрав:
<ARG>cb<EXEC>
3.12.3. Выход из редактора (<EXIT>)
<EXIT>
По умолчанию это две клавиши: <LineFeed>,<Del>. Если нужно
выйти из редактора, не записывая изменения в архив, необходимо набрать:
<ARG>a<EXIT>
где "a" - строчная латинская буква "a".
Команду <EXIT> можно ввести и так: <ARG>q<RETURN>, для
выхода без записи нужно набрать: <ARG>qa<RETURN>.
3.13. Прерывание выдачи. Аварийный выход из редактора
4. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ
Сообщения о режимах работы:
Ред:<имя> | use:<имя> | идет чтение файла <имя>; |
Зап:<имя> | save:<имя> | идет запись файла <имя>; |
+Поиск:<текст>
-Поиск:<текст> | +search:<текст>
-search:<текст> | идет поиск текста <текст> вперед или назад; |
Выполнение | executing.. | идет выполнение внешней команды; |
Режим вставки | insertmode | установлен режим вставки; |
Указание курсором | cursor defined | идет указание участка текста для команд <PICK> или <CLOSE>; |
Создать(y/n)? имя | Create (y/n)? имя | если вы действительно хотите создать новый файл <имя>, то введите "y"; |
Строки указаны меткой | lines defined by tag | предыдущей командой указана часть строк файла (от курсора до запомненной в переменной метки), которая будет передана очередной команде как параметр; |
Прямоугольник указан меткой | square defined by tag | предыдущей командой указана часть файла (от курсора до запомненной в переменной метки), которая будет передана очередной команде как параметр; |
Часть строки указана меткой | columns defined by tag | предыдущей командой указана часть строки (от курсора до метки, присвоенной переменной), которая будет передана очередной команде как параметр. |
Аргумент должен быть числом | argument must be numeric | аргумент команды должен быть числовым; |
Аргумент должен быть положительным | argument must be positive | аргумент должен быть положительным; |
Буфер вставок пуст | nothing in the pick buffer | введена команда <PUT>, но ни разу не выполнялась команда <PICK>; |
Close буфер пуст | nothing in the close buffer | введена команда <ARG><PUT>, но ни разу не выполнялась команда <CLOSE>; |
А что искать? | nothing to search for | не задан образ для контекстного поиска; |
Текст не найден | search key not found | образ для поиска не найден; |
Здесь нельзя создать окно | can't put a window there | при создании нового "окна" курсор должен быть в первой строке "окна" или на первой колонке; |
Не могу создать столько | can't make any more ports | превышено допустимое число "окон" (10); |
Слишком много файлов | too many files... | превышено максимально допустимое число файлов (10); |
Вы не можете изменить этот файл | you can't modify this file | файл нельзя изменять, так как запись в него запрещена. |
Редактор red ничего не знает о терминалах, на которых он
работает. Необходимую для работы информацию он получает от
операционной системы. Операционная система знает тип терминала и устанавливает его в переменную TERM интерпретатора SHELL или CSH.
Свойства терминалов описаны в файле /etc/termcap. Терминалы характеризуются набором функциональных возможностей,
кодами команд и способом выполнения различных операций.
Список терминалов, описание которых уже занесено в систему,
приведен в начале файла "/etc/termcap".
Элементы файла termcap состоят из символьных полей, разделенных символом ":"(двоеточие). Первый элемент указывает имена, под которыми терминал известен в системе. имена разделены символом (вертикальная черта). Как правило, последнее имя является полным названием терминала, а предыдущие имена - его сокращениями, которые используются, в частности, в файле /etc/ttytype. Подробную информацию можно найти в следующих разделах оперативной документации по ОС ДЕМОС:
environment(5) tset(1) ttys(5) ttytype(5) termcap(5)
Описание каждого типа терминалов в файле /etc/termcap
состоит из ряда полей, разделенных символом ":". Если описание переносится на новую строку, то в конце предыдущей ставится ":\", и новая строка начинается с символа ":".
Все характеристики имеют двухсимвольные коды.
Характеристика может иметь одну из трех форм записи:
:<имя>: | характеристика описывает наличие или отсутствие какой-либо возможности (логический тип); |
:<имя>#<число>: | это численная характеристика (например, размер экрана); |
:<имя>=<задержка><строка>: | значением является строка символов, причем <задержка> может отсутствовать. |
имя характеристики | тип | обязат. | только для red | значение характеристики | |
Группа 1. Описывает размеры экрана терминала |
|||||
co | чис | + | - | число колонок в строке | |
li | чис | + | - | число строк на экране | |
Группа 2. Описывает способ управления курсором на экране |
|||||
am | лог | - | - | терминал имеет автоматический перевод строк | |
bs | лог | - | - | код 010 вызывает возврат на 1 позицию назад | |
rt | стр | - | - | возврат на начало строки | |
bc | стр | - | - | код "курсор назад", если не 010 | |
cm | стр | - | - | адресация курсора * | |
cl | стр | + | - | очистка экрана | |
do | стр | * | - | курсор вниз | |
up | стр | * | - | курсор вверх | |
nd | стр | * | - | курсор вправо | |
ho | стр | * | - | курсор в начало экрана | |
Группа 3. Описывает инициализацию дисплея и дополнительные его характеристики |
|||||
is | стр | - | - | инициализация терминала | |
fs | стр | - | + | конец работы в редакторе возврат в начальное состояние | |
cu | стр | - | + | код "светлый квадрат" (как правило, \177.) | |
nb | лог | - | + | нет звукового сигнала | |
Группа 4. Возможности терминала по отображению символов |
|||||
UC | лог | - | - | терминал имеет только прописные буквы | |
LC | лог | - | - | терминал имеет прописные строчные буквы | |
CY | лог | - | + | терминал имеет русские и латинские буквы | |
Группа 5. Дополнительные редактирующие возможности терминала |
|||||
al | стр | - | - | вставка пустой строки | |
dl | стр | - | - | исключение строки | |
ic | стр | - | - | вставить символ | |
dc | стр | - | - | исключить символ | |
cd | стр | - | - | очистить экран от курсор до конца | |
ce | стр | - | - | очистка конца строки | |
sr | стр | - | - | прокрутить текст вниз | |
sf | стр | - | - | прокрутить текст вверх | |
ns | лог | - | - | нет сдвижки текста (нет roll) | |
cs | стр | - | - | изменение области прокрутки текста* | |
Группа 6. Коды, вырабатываемые основными управляющими клавишами |
|||||
kd | стр | + | - | код клавиши стрелка вниз | |
ku | стр | + | - | -- // -- стрелка вверх | |
kl | стр | + | - | -- // -- стрелка влево | |
kr | стр | + | - | -- // -- стрелка вправо | |
kh | стр | + | - | -- // -- "home" | |
Группа 7. Коды клавиш, используемых для выполнения команд редактора |
|||||
kN |   | - | - | команда <-PAGE> | |
kP |   | - | - | команда <+PAGE> | |
kB |   | - | - | команда <B-TAB> | |
kF |   | - | - | команда <+LINE> | |
kR |   | - | - | команда <-LINE> | |
Группа 8. Коды, вырабатываемые функциональными клавишами PF1-5 |
|||||
k1 | стр | - | - | команда <ARG> | |
k2 | стр | - | - | команда <OPEN> | |
k3 | стр | - | - | команда <CLOSE> | |
k4 | стр | - | - | команда <INSERT> | |
k5 | стр | - | - | команда <DCHAR> | |
Группа 9. Коды, вырабатываемые дополнительной функциональной клавиши |
|||||
f. | стр | - | + | Коды, вырабатываемые дополнительной функциональной клавиатурой. | |
f- | стр | - | + | ||
f0 | стр | - | + | ||
f1 |   |   |   | ||
... | |||||
f9 | стр | - | + | ||
Группа 10. |
|||||
tc=<имя> |   |   |   | означает, что остальные характеристики совпадают с характеристиками терминала <имя> | |
<имя>@ |   |   |   | отмена характеристики <имя> | |
hR | стр | - | + | Имя файла с кратким описанием команд (выдается пользователю) | |
Группа 11. Описывает работу с псевдографическими символами |
|||||
Gs | стр | - | + | Включение псевдографического набора символов | |
Ge | стр | - | + | Выключение псевдографики | |
Gt | стр | - | + | Набор символов псевдографики |
Способ адресации курсора для данного терминала описывается характеристикой "cm" строчного типа. Кроме символов, которые просто передаются на терминал, в строке могут встречаться специальные последовательности вида %X, которые при выводе заменяются на номер колонки или номер строки по правилам, определяемым символом X (аналогично работает формат в printf). Если рассматривать строку "cm" как формат вывода, то параметрами функции вывода являются номер строки и позиции, на которые должен быть установлен курсор. Коды типа "%" имеют следующий смысл:
%d | - то же, что и для программы "printf", причем нумерация колонок и столбцов начинается с 0; |
%2 | - эквивалентно %2d; |
%3 | - эквивалентно %3d; |
%. | - эквивалентно %c; |
%+x | - сложить код символа "x" с соответствующим значением (номером строки или колонки), затем выдать ее по "%."; |
%r | - обратный порядок номеров строки и позиции. вывод не производится; |
%i | - номера строки и колонки отсчитывать с 1 (вместо 0); |
%% | - дает один символ "%". |
cm=3^a%.%.
Терминалы, которые используют коды вида "%.", должны
иметь характеристики "bs" (или "bc") и "up", то есть иметь
возможность перемещать курсор назад на 1 позицию и вверх на
одну строку. Это необходимо, так как редактор не выдает
при адресации курсора символы \t, \n, ^D и \r: система может
изменить или уничтожить эти символы.
Редактор red предназначен для редактирования и просмотра
файлов в экранном режиме. Он позволяет просматривать на
экране терминала один или несколько файлов, редактировать
файлы с использованием управляющих клавиш терминала и команд
редактора, переносить информацию из файла в файл и проводить
другие операции редактирования.
Ввод команд осуществляется с помощью функциональных клавиш терминала. На большинстве терминалов для этого используется дополнительная цифровая клавиатура, расположенная справа для основной. Особое значение имеет клавиша `2', которая изменяет значение следующей клавиши. Если дополнительная цифровая клавиатура отсутствует или не имеет режима генерации управляющих кодов, используется клавиша <перевод строки> (<LineFeed>), например вместо `1' вводят
<LineFeed>`1', а вместо `2'`4' - <LineFeed><LineFeed>`4'.
В описании приведены: краткое название команды, полное
название команды, ввод с клавиатуры (через "," перечислены
возможные варианты ввода, запись ^C означает CTRL+C):
В данном разделе очень кратко были изложены правила описания терминала в файле /etc/termcap. Обычно при появлении нового терминала бывает целесообразно для его описания использовать описание какого-либо другого терминала либо использовать краткое описание с параметром "tc=...". Однако скорее всего все ваши терминалы уже имеются в /etc/termcap,
что избавит от необходимости разбираться в не очень простых
правилах описания терминалов.
ПРИЛОЖЕНИЕ 1. Справочная информация по red
Редактор вызывается с помощью команды red в одном из следующих форматов:
red [-ключи] имя_файла [номер_строки]
Начать редактирование файла "имя_файла", установив окно
на строку номер_строки; если номер не указан, высвечивается
начало файла.
red [-ключи]
Продолжить редактирование с того состояния, в котором
был завершен предыдущий сеанс работы с данного терминала.
red [-ключи] -
Повторить сеанс редактирования файлов после сбоя сис-
темы или редактора.
red [-ключи] -r файл_протокол
Повторить сеанс редактирования, считав протокол из ука-
занного файла.
Краткое описание команд
<ARG> - ВВОД АРГУМЕНТА: `1', <LineFeed><Пробел>
Начало ввода аргумента. Аргументом может быть строка символов или указание области на экране терминала (область определяется начальным и конечным положениями курсора и представляет собой либо прямоугольник на экране, если начальная и конечная колонки не совпадают, либо несколько строк, если начальная и конечная колонки совпадают). Ввод аргумента завершается вводом команды, к которой этот аргумент относится. |
передвинуть курсор на следующую (предыдущую) позицию табуляции. |
Без аргумента - переход на начало файла. Аргумент - номер строки; пустой аргумент - конец файла. |
Сдвиг экрана влево/вправо. |
Возможный аргумент - число страниц, на которые экран перемещается по текущему файлу. |
Аргумент - число строк; пустой аргумент - вывести текущую строку в верхнюю (нижнюю) строку окна (перемещением окна по файлу). Клавиши <Forward> и <Backward> (надписи могут быть и иными) обозначены в описании терминала в системе как "kF" и "kR". |
Аргумент - текст, который нужно найти в файле. |
Включает/выключает режим вставки; |
Вставить пустую строку; аргумент - число строк либо область на экране, в которую нужно вставить пробелы. |
Убрать строки либо область на экране. Убранная информация попадает в буфер убранных строк. |
Запомнить строки либо область на экране. |
Взятая ранее информация помещается в текущее место на экране. Команда с пустым аргументом используется, чтобы вставить информацию из буфера убранных строк. |
Отрабатывается по команде <OPEN> с пустым аргументом. (`1'<PF2>). |
Отрабатывается по команде <CLOSE> с пустым аргументом. (`1'<PF3>). |
Аргумент - имя файла (если не совпадает со старым). |
Команда без аргумента переходит к альтернативному файлу (по умолчанию - файл подсказок). |
Аргумент - имя файла, который будет высвечиваться в новом окне. Курсор должен быть либо в крайней левой позиции экрана либо на верхней строке экрана. Команда с пустым аргументом выполняет отмену последнего заведенного окна. |
сменить текущее окно (если открыто более чем одно окно). |
Аргумент: "[число[l] ] команда [аргументы]". "команда" выполняется как фильтр над текстом в очередных "число" абзацах (если указана буква l, то строках) файла. Абзац - группа непустых строк файла, разделенная одной или несколькими пустыми строками. |
Аргумент "a" блокирует запись измененных файлов. Команда может также вводиться как <АРГ>q[a]<Возврат каретки>. |
Где И - имя макропеременной (одна буква), <Команда> - либо <Возврат каретки> (тогда запоминается текущее место в файле), либо <GET> (запоминается буфер вставки), либо <CLOSE> (запоминается буфер убранных строк). Макро затем можно использовать в командах <GOTO>, <PUT>, а также в командах, аргументом которых может быть область на экране (в этом случае вводится область от текущего положения курсора до запомненной метки), указав в качестве аргумента "$И". |
Концом ввода служит команда <ВЫХОД>. |
При этом, если в ответ на запрос переопределяемой команды введено имя макро (одна буква), при нажатии этой клавиши выполняется данное макро. |
По этой команде вводится специальный символ и следующий управляющий символ вводится в файл, а не трактуется редактором как команда. |
Далее приведена кодировка команд для наиболее распространенных терминалов. Если на вашем терминале обозначения на управляющей клавиатуре не совпадают с ними, необходимо уточнить кодирование команд редактора у системных программистов. На схемах клавиатуры сверху написано название команды, которая исполняется по данной клавише. Посередине - надпись на клавише. Снизу написано название команды, которая исполняется, если предварительно нажать клавишу `2'.
Команды для Электроника-15-ИЭ-0013 управляющая клавиатура цифровая клавиатура --------------------------- ---------------------------- | | & | USE | | +PAGE | OPEN | PICK | | i~~ | I | V_| | | -7- | -8- | -9- | | | +LINE | SAVE | | -PAGE | CLOSE | PUT | --------------------------- ---------------------------- | | HOME | | | GOTO | INSERT | DCHAR | | <-- | & | --> | | -4- | -5- | -6- | | LEFT | | RIGHT | | M-PORT | CH-TAB | | --------------------------- ---------------------------- | BSPACE | I | | | ARG | "УСТ" | +SEARC | | <-I | V | I-> | | -1- | -2- | -3- | | | -LINE | | | | "ОТМ" | -SEARC | --------------------------- | ESCAPE | B-TAB | | OPEN | INSERT | CLOSE | | -0 - | -,- | | = | .. | = | | CH-PORT | EXEC | --------------------------- ---------------------------- EXIT -"ПС""ЗБ" TAB - "ГТ" Рис 6
Команды для VDT52100 и VT-340 -------------------- ------------------ || | | | | | "d l" | "i l" | |"return"|"erase"| -------------------- ------------------ | | | | "d c" | "i c" | -------------------- | | | "h o m e" | -------------------- Ввод остальных команд: <+PAGE> - `8' <+LINE> - ^T <-PAGE> - `8' <-LINE> - ^W - <СтрелкаВлево> - <СтрелкаВправо> - `4' <+SEARCH> - ^R - `4' - ^F - `0' - ^G - ^A - ^P - `5' - ^B - ^U <-SEARCH> - ^E - `-'
Команды для ВТА 2000.3 При нажатии на клавиши 0-9, ".","," необходимо одновременно нажать клавишу "УПР". ------------------------------------- | ARG | B-SPACE| HOME | / | | *** | ***00 | & | *** | | *00 | | +---- | / | ------------------------------------- | +PAGE | OPEN | PICK | & | | -7- | -8- | -9- | I | | -PAGE | CLOSE | PUT | +LINE | ------------------------------------- | GOTO | INSERT | DCHAR | I | | -4- | -5- | -6- | V | | M-PORT | CH-TAB | | -LINE | ------------------------------------- | ARG | "уст" | +SEARC | | | -1- | -2- | -3- | --> | | | "отм" | -SEARC | RIGHT | ------------------------------------- | ESCAPE | B-TAB | | | -0 - | -,- | <-- | | CH-PORT | EXEC | LEFT | ------------------------------------- Рис. 8
Команды для ВТА 2000.1 При нажатии на клавиши 0-9, ".","," необходимо одновременно нажать клавишу "УПР". ------------------------------------------ | ARG | | |INSERT |B-SPACE| |"чистка | ***** | **::: | ***> | <*** | | экрана"| ***:: | | | | ------------------------------------------ | HOME | | | & | OPEN | | & | | | I | * | | +---- | | | +LINE | V | ------------------------------------------ | +PAGE | OPEN | PICK | I | CLOSE | | -7- | -8- | -9- | V | & | | -PAGE | CLOSE | PUT | -LINE | * | ------------------------------------------ | GOTO |INSERT | DCHAR | | | | -4- | -5- | -6- | ---> | | | M-PORT |CH-TAB | | RIGHT | | ------------------------------------------ | ARG |"уст" |+SEARC | | | | -1- | -2- | -3- | <--- | | | |"отм" |-SEARC | LEFT | | ------------------------------------------ | ESCAPE | B-TAB | | | | -0 - | -,- | | | | CH-PORT | EXEC | | | ------------------------------------------ Рис. 9
МЕРА-7958,VDT-STATION,VDT-52129
lt ^F tab ^] rt ^E escape ^@ up ^A +line ^T dn ^B -line ^W rn ^C +page ^N home ^D -page ^Q tab ^G goto ^O b-tab ^H left ^S right ^Y ch-port ^M +search ^R del-ch ^U -search ^X b-space нет open ^K arg ^_ close ^^ insert ^\ pick ^I save ^V put ^Z use ^L m-port ^J exec ^P