На этом шаге мы рассмотрим возможности редактора системы 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 символы и пробелы под курсором и справа от него будут замещаться на новые вводимые символы. Это самый простой способ первоначального ввода текста. Ошибочные символы могут быть исправлены путем простой замены их на правильные с клавиатуры, а текст может быть "затерт" путем замещения его пробелами.
В режиме Insert символы и пробелы под курсором и справа от него сдвигаются вправо, освобождая слева от себя место для новых вставляемых перед ними символов. Например, текст (CONS BETA) может быть изменен на (CONS ALPHA BETA) путем вставки ALPHA перед BETA.
В режиме 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-программах имен, приведенных в этой таблице.
Ctrl-X | ||
Ctrl-O C | Ctrl-U C | |
Ctrl-O D | Ctrl-U D | |
Esc Y | ||
RUBOUT | Ctrl-H | |
Ctrl-Q RUB | Ctrl-X K | |
Ctrl-Q T | RUBOUT | |
Ctrl-Y | ||
Ctrl-G | Ctrl-D | |
Ctrl-Q Y | ||
Ctrl-K | ||
Ctrl-T | Ctrl-X D | |
Esc T | Ctrl-Z K | |
Ctrl-X | Ctrl-N | |
Ctrl-J | Ctrl-J | |
Ctrl-Q C | Ctrl-X > | |
Ctrl-P | Ctrl-Q | |
Esc L | Ctrl-Z ! | |
Esc ! | Ctrl-Z E | |
Ctrl-L | Ctrl-L | |
Ctrl-Q F | Ctrl-S | |
Ctrl-N | Ctrl-O | |
Ctrl-V | Ctrl-X I | |
Ctrl-Q K | ||
Ctrl-Q V | ||
Ctrl-Q P | ||
Ctrl-Q B | ||
Ctrl-S | Ctrl-B | |
Ctrl-Q S | Ctrl-A | |
Esc A | Ctrl-Z P | |
Esc S | Ctrl-Z B | |
Ctrl-Q I | ||
Esc E | Ctrl-Z ( | |
Ctrl-A | Ctrl-X B | |
Ctrl-O E | Ctrl-U E | |
Ctrl-O B | Ctrl-U B | |
Ctrl-O M | Ctrl-U M | |
Esc C | Ctrl-Z ] | |
Ctrl-M | Ctrl-M | |
Ctrl-K A | Ctrl-X A | |
Ctrl-O R | Ctrl-X R | |
Ctrl-Q A | Ctrl-X % | |
Ctrl-D | Ctrl-F | |
Esc X | Ctrl-Z D | |
Ctrl-Q D | Ctrl-E | |
Esc F | Ctrl-Z N | |
Esc D | Ctrl-Z F | |
Ctrl-I | Ctrl-I | |
Esc Z | Ctrl-Z ) | |
Ctrl-F | Ctrl-X F | |
Ctrl-K S | Ctrl-X S | |
Ctrl-K D | ||
Ctrl-W | ||
Ctrl-R | Ctrl-X V | |
Ctrl-Z | ||
Ctrl-C | Ctrl-V | |
Ctrl-Q W | Ctrl-X 2 | |
Ctrl-Q R | Ctrl-X < | |
Esc R | Ctrl-Z [ | |
Ctrl-Q E | ||
Ctrl-U | Ctrl-Y | |
Ctrl-E | Ctrl-P | |
Ctrl-O W | Ctrl-X W |
В таблице 2 в алфавитном порядке приведены глобальные переменные редактора и краткое определение их значений.
Если вы будете использовать редактор muLISP при разработке программ, не давайте переменным или константам в ваших программах имен, приведенных в таблице.
Текст над указателем. | |
Номер исходной колонки текущего окна. | |
Номер исходной строки текущего окна. | |
Текст под указателем. | |
Количество колонок в текущем окне. | |
Положение курсора в колонке в текущем окне. | |
Положение курсора в строке в текущем окне. | |
Последний уничтоженный текст. | |
Номер последней колонки блока текста. | |
Номер последней строки блока текста. | |
Номер текущей строки окна вычисления LISP. | |
Имя последнего отредактированного файла. | |
Строка-результат последнего поиска/замещения. | |
Колонка-результат последнего поиска/замещения. | |
Текущее значение "Find string". | |
T, если тип Insert, NIL, если тип Replace. | |
Колонка-результат последнего перемещения. | |
Строка-результат последнего перемещения. | |
Список символов слева от указателя. | |
Номер колонки указателя в тексте. | |
Номер строки указателя в тексте. | |
Текущее значение "Replace string". | |
Список символов справа от указателя. | |
Количество строк в текущем окне редактора. | |
Список Р-имен, выдаваемых на дисплей. | |
Номер первой колонки блока текста. | |
Номер первой строки блока текста. | |
Номер колонки в статус-окне. | |
Не NIL тогда и только тогда, когда возвращается текущий тип. | |
Номер строки в статус-окне. | |
Не NIL тогда и только тогда, когда возвращается имя файла. | |
Не NIL тогда и только тогда, когда текст изменялся. | |
Не NIL тогда и только тогда, когда строка текста распакована. |
В таблице 3 в алфавитном порядке приведены глобальные константы редактора, их значения по умолчанию и краткие описания их использования.
Если вы будете использовать редактор при разработке программ, не давайте переменным или константам в ваших программах имен, приведенных в этой таблице.
(\( \) | | <tab>) | Символы, ограничивающие атомы. | |
| | | Пустой символ. | |
T | Параметры мерцающего изображения. | |
LSP | Расширение файла по умолчанию. | |
\( | Левые скобки . | |
"" | Пустая строка. | |
66 | Строка печатной страницы. | |
\) | Правые скобки. | |
<tab> | Tab-символ. | |
(| | <tab>) | Пробельные символы. | |
(\, \: \; | | <tab>) | Символы, ограничивающие слова. |
На следующем шаге мы рассмотрим правила работы с экраном дисплея в muLISP85.
Загрузка и сохранение редактора
Опции главного меню
Команды клавиатуры
Команды управления курсором
Команды управления экраном дисплея
Команды ввода текста
Команды уничтожения текста
Команды блоков
Команды поиска и замены
Команды списковых структур
Команды сохранения файлов
Команды окна
Теория операций
Функции команд редактора
Глобальные переменные редактора
Глобальные константы редактора