Шаг 31.
Редактор системы muLISP85

    На этом шаге мы рассмотрим возможности редактора системы muLISP85.

Загрузка и сохранение редактора
Опции главного меню
Команды клавиатуры
Команды управления курсором
Команды управления экраном дисплея
Команды ввода текста
Команды уничтожения текста
Команды блоков
Команды поиска и замены
Команды списковых структур
Команды сохранения файлов
Команды окна
Теория операций
Функции команд редактора
Глобальные переменные редактора
Глобальные константы редактора



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

    Если объема памяти недостаточно, исходный файл, сгенерированный с помощью редактора muLISP, может быть считан в систему muLISP без редактора, поэтому память под прикладные программы не занимается. В текущей версии редактора отредактированный текст полностью записывается в память. Это накладывает ограничения на максимальный размер исходных файлов, которые могут редактироваться с помощью редактора muLISP - 50 Кбайт.

   

Загрузка и сохранение редактора.

    Редактор muLISP предоставляется системой как исходный файл EDIT.LSP. Данный файл может быть считан и сохранен как SYS-файл. Самым простым путем загрузки файла EDIT.LSP является ввод команды:


            MULISP EDIT.LSP

    Данная команда загружает muLISP, выдает на экран дисплея стандартное сообщение muLISP, а затем приступает к чтению EDIT.LSP. После нескольких секунд ввода система спрашивает, с каким редактором хочет работать пользователь: с WorldStar-like или Emacs-like. Если у пользователя нет другого мнения, рекомендуется выбрать опцию WordStar-like.

    Как только появится подсказка в виде знака доллара, введите команду:


              (SAVE EDIT),
сохраняющую редактор в виде последнего загруженного SYS-файла с именем EDIT.SYS.

    Сохранив один раз файл EDIT.SYS, в ходе дальнейшей работы с muLISP для загрузки и работы редактора вы можете использовать команду:


              MULISP EDIT
Если же muLISP уже был загружен, введите команду:

              (LOAD EDIT)

вслед за знаком доллара; команда обеспечит загрузку редактора и начало его работы. Однако следует отметить, что команда LOAD вызывает перезапись текущей среды muLISP, включая все определения функций, свойств и т.д.

    Если вы должны загрузить редактор в существующую среду, выполните команду:


              (RDS EDIT)
К оглавлению

   

Опции главного меню.

    Редактор muLISP очищает экран, рисует рамку и выдает на экран основное меню:


               Edit, Print, Screen, Lisp, Quit:
Затем система ждет, пока пользователь не выберет одну из опций путем ввода первой буквы ее имени (E, P, S, L или Q).

    Перечислим назначение основных пунктов меню:



К оглавлению

   

Команды клавиатуры.

    Редактор muLISP - экранно-ориентированный редактор общего назначения; он последовательно выдает на экран дисплея "окно" или "картинку" с текстом. Следовательно, пользователь может внести какие-либо изменения и сразу же посмотреть результат.

    Так как редактор написан на языке muLISP, то пользователь может по необходимости дополнить систему. При вводе управляющего символа вызывается соответствующая функция, выполняющая нужную пользователю операцию. Обычно данная функция может быть переопределена для выполнения какой-либо требуемой задачи.

    Общая стратегия работы с редактором muLISP может быть выражена двумя шагами:

    Редактор muLISP может иметь либо тип WordStar-like, либо тип Emasc-like. Для упрощения последующих описаний будем считать, что редактор имеет тип WordStar-like.

К оглавлению

   

Команды управления курсором.

    Команды управления курсором предназначены для перевода курсора в ту точку текста, где предполагается внести изменения.

    Управление курсором (блоком светящихся линий, указывающих, где появится следующий введенный символ) осуществляется с помощью управляющих символов. Для большинства консолей управляющие символы вводятся путем нажатия клавиши Ctrl, и одновременно - соответствующей буквы.

    Управление курсором выполняется, в основном, по правилу знака "+", т.е. для стандартных клавиатур положение ключа соответствует направлению, по которому передвигается курсор.

    Данное правило иллюстрирует следующая диаграмма (рис.1):


Рис.1. Управление курсором

    Стрелками обозначено направление, по которому будет передвигаться курсор при вводе соответствующего контрольного символа. Длина стрелок обозначает относительную величину перемещения курсора.

    Слово - это последовательность символов в тексте, ограниченная пробелом, запятой, двоеточием, точкой с запятой, началом или концом строки.

    Отметим, что для данных четырех команд подразумевается, что текст на экране - это одна длинная последовательность символов. Следовательно, команды, которые обычно перемещают курсор вправо, автоматически сдвигают его вниз, в начало следующей строки, как только будет достигнут правый конец текущей строки. Команды, обычно перемещающие курсор влево, автоматически сдвигают его вверх на конец предыдущей строки, как только будет достигнут левый конец текущей строки.

    Если ниже курсора также имеется строка текста, то Ctrl-J перемещают курсор в начало данной строки текста. В противном случае эти команды перемещают курсор вниз на строку и автоматически отмечают абзац согласно количеству открытых и закрытых скобок и исходной линии курсора.

    Значительно реже используются команды управления курсором, которые инициируются путем ввода пары символов. В общем случае пары команд, начинающиеся с Ctrl-Q, усиливают действие команд, обозначенных вторым символом пары. Следовательно, Ctrl-Q, D перемещает курсор в правый конец текущей строки, Ctrl-Q, S - в левый конец текущей строки, Ctrl-Q, Х - в нижний конец экрана, Ctrl-Q, E - в верхний конец экрана.

    Ctrl-Q, I перемещает курсор влево в "предыдущую" позицию табуляции.

    Ctrl-Q, P перемещает курсор в ту позицию, в которой он находился до того, как были выполнены команды перемещения, такие, как Ctrl-Q, X или Ctrl-Q, E.

К оглавлению

   

Команды управления экраном дисплея.

    В каждый конкретный момент на экране дисплея может быть показана только часть текста. Если редактор получает команду переместить курсор в ту часть текста, которая на экране отсутствует, текст "сворачивается" либо вверх (т.е. по направлению к концу файла), либо вниз (по направлению к началу файла), а на экране появляется текст с того места, на которое по команде переместится курсор.



К оглавлению

   

Команды ввода текста.

    Существуют два режима ввода текста: режим Replace (замена) и режим Insert (вставка).



К оглавлению

   

Команды уничтожения текста.

    В режиме Replace самым простым способом уничтожить текст является замещение его пробелами или другими символами. Ниже приведены команды уничтожения, работающие при любом типе.

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

    Текст, который был уничтожен последним командой Ctrl-Y или командами уничтожения блоков или структур, может быть восстановлен с помощью Ctrl-U. Данная команда дает возможность восстановить текст, уничтоженный по ошибке, и, кроме того, облегчает процесс перемещения или копирования строки текста.

    Чтобы переместить строку, переведите курсор на данную строку и введите Ctrl-Y; строка уничтожится. Если строка перед этим копировалась, введите Ctrl-U. Затем переведите курсор в то место, куда нужно вставить строку, и введите Ctrl-U.

К оглавлению

   

Команды блоков.

    Команды блоков позволяют перемещать, копировать, уничтожать блок текста, а также считывать его из файла или записывать в файл. Двухсимвольные команды, начинающиеся на Ctrl-О, инициируют команды блоков. Второй символ команд является мнемоническим. Спустя несколько секунд после ввода Ctrl-О на экран дисплея выдается подсказка, если пользователь еще не успел ввести второй символ команды.

    Аналогично, для типа редактора WordStar двухсимвольные команды, начинающиеся с Ctrl-K, также могут инициировать команды блоков. Однако второй символ команд не всегда является мнемоническим.



К оглавлению

   

Команды поиска и замены.

   



К оглавлению

   

Команды списковых структур.

    Команды списковых структур позволяют перемещать, копировать, уничтожать, считывать из файла и записывать в файл S-выражения.

    Двухсимвольные команды, начинающиеся с ESC, инициируют команды списковых структур. Если muLISP работает на IBM PC, то можно использовать также клавишу Alt. Второй символ пары ESC или Alt является мнемоническим.



К оглавлению

   

Команды сохранения файлов.

    Данные команды позволяют сохранять текст или отказываться от сохранения. Двухсимвольные команды, начинающиеся с Ctrl-К, инициируют эти команды.

    Через несколько секунд после ввода Ctrl-К на экран дисплея выдается подсказка, если пользователь не успел ввести второй символ команды.



К оглавлению

   

Команды окна.

    Ctrl-Q, W позволяет изменить размеры окна текста и его форму на время редактирования файла. Команда выдает на экран дисплея подсказку:


            Full, Vertical, Horizontal
и ждет, пока пользователь не выберет одну из опций (F, V или Н).

К оглавлению

   

Теория операций.

    Так как редактор написан на языке muLISP, то программист, имеющий опыт программирования, может изменить существующие функции редактора или даже добавить новые. Однако выполнение таких сложных изменений, как изменение команд клавиатуры или добавление к редактору новых команд, требует от программиста понимания того, как происходит процесс сохранения текста и как можно пользоваться в редакторе функциями обработки текста и указателями текста.

    Под указателем в дальнейшем будет пониматься позиция в тексте между символом, на котором располагается курсор, и символом непосредственно слева от него.

    Текст сохраняется редактором в виде списка элементов, Р-именами которых являются последовательности символов строки текста.



К оглавлению

   

Функции команд редактора.

    В таблице 1 в алфавитном порядке приведены функции команд редактора и соответствующие им управляющие символы клавиатуры для редакторов обоих типа (WordStar-like и Emacs-like).

    Если вы будете использовать редактор muLISP при разработке программ, не давайте вашим функциям в muLISP-программах имен, приведенных в этой таблице.

Таблица 1. Комбинации "горячих" клавиш
Функция
Тип WordStar
Тип Emasc
BOTTOM-ROW
Ctrl-X  
COPY-BLOCK
Ctrl-O C Ctrl-U C
DEL-BLOCK
Ctrl-O D Ctrl-U D
DEL-DEFN
Esc Y  
DEL-LEFT-CHAR
RUBOUT Ctrl-H
DEL-LEFT-END
Ctrl-Q RUB Ctrl-X K
DEL-LEFT-WORD
Ctrl-Q T RUBOUT
DEL-LINE
Ctrl-Y  
DEL-RIGHT-CHAR
Ctrl-G Ctrl-D
DEL-RIGHT-END
Ctrl-Q Y  
DEL-RIGHT-LINE
  Ctrl-K
DEL-RIGHT-WORD
Ctrl-T Ctrl-X D
DEL-SEXP
Esc T Ctrl-Z K
DOWN-LINE
Ctrl-X Ctrl-N
DOWN-LINE-INDENT
Ctrl-J Ctrl-J
END-TEXT
Ctrl-Q C Ctrl-X >
ESCAPE-CHAR
Ctrl-P Ctrl-Q
EVAL-LISP
Esc L Ctrl-Z !
EVAL-SEXP
Esc ! Ctrl-Z E
FIND-NEXT
Ctrl-L Ctrl-L
FIND-STRG
Ctrl-Q F Ctrl-S
INSERT-LINE
Ctrl-N Ctrl-O
INSERT-MODE
Ctrl-V Ctrl-X I
JUMP-END
Ctrl-Q K  
JUMP-FIND
Ctrl-Q V  
JUMP-LAST
Ctrl-Q P  
JUMP-START
Ctrl-Q B  
LEFT-CHAR
Ctrl-S Ctrl-B
LEFT-END
Ctrl-Q S Ctrl-A
LEFT-LIST
Esc A Ctrl-Z P
LEFT-SEXP
Esc S Ctrl-Z B
LEFT-TAB
Ctrl-Q I  
LEFT-UP-LIST
Esc E Ctrl-Z (
LEFT-WORD
Ctrl-A Ctrl-X B
MARK-END
Ctrl-O E Ctrl-U E
MARK-START
Ctrl-O B Ctrl-U B
MOVE-BLOCK
Ctrl-O M Ctrl-U M
NEXT-DEFN
Esc C Ctrl-Z ]
NEW-LINE
Ctrl-M Ctrl-M
QUIT-EDIT
Ctrl-K A Ctrl-X A
READ-BLOCK
Ctrl-O R Ctrl-X R
REPL-STRG
Ctrl-Q A Ctrl-X %
RIGHT-CHAR
Ctrl-D Ctrl-F
RIGHT-DOWN-LIST
Esc X Ctrl-Z D
RIGHT-END
Ctrl-Q D Ctrl-E
RIGHT-LIST
Esc F Ctrl-Z N
RIGHT-SEXP
Esc D Ctrl-Z F
RIGHT-TAB
Ctrl-I Ctrl-I
RIGHT-UP-LIST
Esc Z Ctrl-Z )
RIGHT-WORD
Ctrl-F Ctrl-X F
SAVE-EDIT
Ctrl-K S Ctrl-X S
SAVE-FILE
Ctrl-K D  
SCROLL-DOWN-LINE
Ctrl-W  
SCROLL-DOWN-SCRN
Ctrl-R Ctrl-X V
SCROLL-UP-LINE
Ctrl-Z  
SCROLL-UP-SCRN
Ctrl-C Ctrl-V
SPLIT-WINDOW
Ctrl-Q W Ctrl-X 2
START-TEXT
Ctrl-Q R Ctrl-X <
THIS-DEFN
Esc R Ctrl-Z [
TOP-ROW
Ctrl-Q E  
UNDELETE
Ctrl-U Ctrl-Y
UP-LINE
Ctrl-E Ctrl-P
WRITE-BLOCK
Ctrl-O W Ctrl-X W

К оглавлению

   

Глобальные переменные редактора.

    В таблице 2 в алфавитном порядке приведены глобальные переменные редактора и краткое определение их значений.

    Если вы будете использовать редактор muLISP при разработке программ, не давайте переменным или константам в ваших программах имен, приведенных в таблице.

Таблица 2. Глобальные переменные редактора
Переменная
Определение
*ABOVE-POINT*
Текст над указателем.
*BASE-COL*
Номер исходной колонки текущего окна.
*BASE-ROW*
Номер исходной строки текущего окна.
*BELOW-POINT*
Текст под указателем.
*COLUMNS*
Количество колонок в текущем окне.
*СURSOR-COL*
Положение курсора в колонке в текущем окне.
*CURSOR-ROW*
Положение курсора в строке в текущем окне.
*DELETED-TEXT*
Последний уничтоженный текст.
*END-COL*
Номер последней колонки блока текста.
*END-ROW*
Номер последней строки блока текста.
*EVAL-ROW*
Номер текущей строки окна вычисления LISP.
*FILE-NAME*
Имя последнего отредактированного файла.
*FIND-COL*
Строка-результат последнего поиска/замещения.
*FIND-ROW*
Колонка-результат последнего поиска/замещения.
*FIND-STRG*
Текущее значение "Find string".
*INSERT*
T, если тип Insert, NIL, если тип Replace.
*LAST-COL*
Колонка-результат последнего перемещения.
*LAST-ROW*
Строка-результат последнего перемещения.
*LEFT-POINT*
Список символов слева от указателя.
*POINT-COL*
Номер колонки указателя в тексте.
*POINT-ROW*
Номер строки указателя в тексте.
*REPL-STRG*
Текущее значение "Replace string".
*RIGHT-POINT*
Список символов справа от указателя.
*ROWS*
Количество строк в текущем окне редактора.
*SCREEN*
Список Р-имен, выдаваемых на дисплей.
*START-COL*
Номер первой колонки блока текста.
*START-ROW*
Номер первой строки блока текста.
*STAT-COL*
Номер колонки в статус-окне.
*STAT-INS*
Не NIL тогда и только тогда, когда возвращается текущий тип.
*STAT-ROW*
Номер строки в статус-окне.
*STAT-WINDOW*
Не NIL тогда и только тогда, когда возвращается имя файла.
*TEXT-DIRTY*
Не NIL тогда и только тогда, когда текст изменялся.
*UNPACKED*
Не NIL тогда и только тогда, когда строка текста распакована.

К оглавлению

   

Глобальные константы редактора.

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

    Если вы будете использовать редактор при разработке программ, не давайте переменным или константам в ваших программах имен, приведенных в этой таблице.

Таблица 3. Перечень констант
Константа
Значение
Описание
*ATOM-DELIMITER*
(\( \) | | <tab>) Символы, ограничивающие атомы.
*BLANK*
| | Пустой символ.
*BLINK-PAPEN*
T Параметры мерцающего изображения.
*DEFAULT-TYPE*
LSP Расширение файла по умолчанию.
*LPAR*
\( Левые скобки .
*NUL-STRG*
"" Пустая строка.
*PAGE-LINES*
66 Строка печатной страницы.
*RPAR*
\) Правые скобки.
*TAB*
<tab> Tab-символ.
*WHITESPACE*
(| | <tab>) Пробельные символы.
*WORD-DELIMITER*
(\, \: \; | | <tab>) Символы, ограничивающие слова.

К оглавлению

    На следующем шаге мы рассмотрим правила работы с экраном дисплея в muLISP85.




Загрузка и сохранение редактора Опции главного меню Команды клавиатуры Команды управления курсором Команды управления экраном дисплея Команды ввода текста Команды уничтожения текста Команды блоков Команды поиска и замены Команды списковых структур Команды сохранения файлов Команды окна Теория операций Функции команд редактора Глобальные переменные редактора Глобальные константы редактора




Предыдущий шаг Содержание Следующий шаг