      З а м е ч а н и я   п о   м а к р о с а м   Multi-Edit

   1. Макрос Стерника-Соколинского MAPKEY (составление таблицы те-
кущих назначений клавиш, Софтпанорама 3.8) очень полезен,  но пре-
доставлен в несколько непричесанном виде.  Во-первых, пропущен ряд
клавиш, в том числе Alt-` и Alt-серые стрелки.  Во-вторых, порядок
некоторых клавиш в таблице довольно необычен и вызван не более чем
стремлением упростить текст макроса.  Но самое неприятное то,  что
после работа MAPKEY  портится целая куча системных макропеременных
(Undo_Stat, Tab_Expand, Insert_Mode, Reg_Exp_Stat,  Refresh),  так
что, например, откат становится невозможен.
   Предлагаю исправленный текст MAPKEY.

   2. Замечательный макрос Романова  MACRO_LANG_HELP  (контекстная
подсказка по макроязыку, Софтпанорама 3.6) предполагает, что файлы
подсказок  MACRO.HLX  и  MECOMMAC.HLX   находятся   в   оглавлении
Multi-Edit. Однако (о чем не все знают) подсказки можно  хранить и
в подоглавлении HELP. Это разумно, так как  оглавление  Multi-Edit
перенаселено макросами. Чтобы MACRO_LANG_HELP  определил,  где ис-
кать файлы подсказок,  в начало его текста надо добавить следующие
строки:

   Def_Str(Help_Path);
   if File_Exists(ME_Path + 'HELP\MACRO.HLX') then
     Help_Path := ME_Path + 'HELP\';
   else
     Help_Path := ME_Path;
   end;

и все упоминания ME_PATH заменить на Help_Path.

   3. Все известные мне редакции Multi-Edit содержат ошибку: пута-
ют Shift и NumLock. Например, если у вас стандартный  вариант, где
сочетание Shift-Del  вызывает DELWORD  (удаление слова),  то точно
такие же печальные последствия вызывает попытка  нажать  точку  на
цифровой клавиатуре (при включенном NumLock). Поэтому  я  не реко-
мендую назначать  стандартные  макросы  сочетаниям  Shift-стрелки,
Shift-INS и т.д.  Для обхода ошибки нужен переходник вроде следую-
щего:

$Macro DelWordM FROM EDIT TO <ShftDel>;
  if Peek(0,$417) and $20 then     { проверка: нажат ли NumLock }
    Text('.');
  else RM('DelWord'); end;
End_Macro;

   4. Каждый,  кто составляет или  использует  макросы Multi-Edit,
рано или поздно сталкивается с проблемой:  полезных макросов  куда
больше, чем свободных клавиш.  Один из простейших путей выхода  из
этой ситуации - организация иерархии клавиш, т.е. разделение функ-
ций на важнейшие  (которым клавиши назначаются непосредственно)  и
менее важные,  доступные с помощью  двух  или нескольких  нажатий.
Например, у меня функция "запустить  редактируемый  SRC-текст  как
макро" вызывается нажатиями Ctrl-X и затем R.

   Ничего нового в такой системе нет,  она  использовалась  еще  в
WORDSTAR, Турбо-продуктах и т.п.  Но,  по моим  наблюдениям,  лишь
корифеи Multi-Edit  сделали себе нечто подобное.  Чтобы  облегчить
работу начинающих пользователей, предлагаю свои заготовки  - наст-
раивайте на свой вкус, и вам никогда не придется ломать голову над
тем, какие клавиши назначить новому макросу.

   Пример  двухуровневой  работы  -  макрос  действий  со  словами
WORDKIT.  Он вызывается нажатием Ctrl-W  и сначала выводит  плитку
(box) с подсказками.  Можно было бы использовать вертикальное меню
Multi-Edit,  но тогда  мы лишимся возможности  задавать  сочетания
вроде Ctrl-W-пробел,  да меню по существу  и не нужно,  поэтому  я
предпочел вывод плитки.  Затем надо нажать одну  из 13  допустимых
клавиш для выбора нужной функции (или ESC - отказ):

Capitalize...... сделать первую букву текущего слова заглавной,  а
                 остальные - строчными.
Export.......... занести текущее слово (число)  в окно калькулято-
                 ра; если число начинается символом "$" или закан-
                 чивается символом "h", оно считается шестнадцати-
                 ричным, иначе - десятичным.
Lower case...... сделать буквы текущего слова строчными.
Mark word....... отметить текущее слово как блок.
Replace words... замена слов, ограниченных с обеих сторон не алфа-
                 витно-цифровыми символами. Это  позволяет, напри-
                 мер, найти в программе все  вхождения  переменной
                 i, не обращая внимания на слова if, while и т.д.
Search words.... аналогично Replace, поиск без замены.
Upper case...... сделать буквы текущего слова заглавными.
Word list....... составить список всех слов данного файла.

LEFT............ поменять местами данное и предыдущее слова.
RIGHT........... поменять местами данное и следующее слова.
SPACE........... произвести разрядку текущего слова пробелами.
GREY PLUS....... "мягкий сдвиг" слов правее текущей позиции напра-
                 во;  при этом сдвиг происходит за счет серий про-
                 белов в тексте. Это удобно, например,  если  надо
                 вставить текст в третью графу таблицы, не сдвигая
                 по возможности четвертую и последующую графы.
GREY MINUS...... аналогично, "мягкий сдвиг" слов левее текущей по-
                 зиции налево.

   Например, нажатие Ctrl-W-U делает все буквы текущего слова заг-
лавными, а Ctrl-W-пробел выполняет разрядку букв в слове.

   Я предпочитаю английскую мнемонику кодов функций,  но вы вправе
спроектировать любую другую.

   Нажимать клавиши можно независимо от того,  на  каком  регистре
(латинице или кириллице) вы сейчас работаете, анализируется только
скэн-код клавиши. Например, Ctrl-W и Ctrl-Ц неотличимы.

   Аналогично организованы еще пять наборов (kits):

      Операции с текстом................... TEXTKIT, <CtrlT>
      Информационные справки............... INFOKIT, <CtrlI>
      Разные настройки..................... TOOLKIT, <CtrlK>
      Форматирование текста................ TFMKIT,  <CtrlF>
      Поддержка языков..................... LANGKIT, <CtrlX>

   Для иллюстрации возможностей предлагаемого подхода  приведу  их
состав.  Использованы макросы American Cybernetics, а также публи-
ковавшиеся  в Софтпанораме  разработки  Л.Альперовича,  Ю.Зубкова,
Е.Корзуна, А.Романова,  Г.Стерника, А.Энтелиса, мои собственные  и
народные (неизвестных авторов).


               О п е р а ц и и   с   т е к с т о м

Correct error... корректировка слова,  ошибочно  набранного  не на
                 том регистре (латинский вместо русского  или нао-
                 борот). Преобразуются (справа налево)  символы от
                 текущего положения до первого символа, не относя-
                 щегося к буквам соответствующего алфавита.
Kill tabs....... заменить все символы табуляции в текущем файле на
                 пробелы.
Prepare print... сформировать в тексте печатные листы.
Recode cyrillic. перекодировать файл  из одной кодировки кириллицы
                 в другую.
Syntax checker.. вызвать систему DiaCor  для проверки правописания
                 слов текущего текста.


           И н ф о р м а ц и о н н ы е   с п р а в к и

Dick free....... выяснить свободную память на диске
End-of-lines.... высветить  специальным  символом  концы  строчек,
                 чтобы обнаружить лишние пробелы  в  хвостах стро-
                 чек. Чтобы убрать индикацию, вызовите эту функцию
                 еще раз.
List windows.... справка по окнам, включающая и скрытые окна,  на-
                 пример, буфер и MECONFIG.DB. Можно  также перейти
                 в эти (обычно недоступные) окна.
Map of keys..... составить в отдельном окне справку по всем назна-
                 чениям клавиш.
Statistics...... вывод полезных сведений о текущем тексте:
       ┌─────────────────────────────────────────────────────────┐
       │ Общее число строк в тексте........772, измененных: 21   │
       │ Самая длинная строка..............96-я, ее длина: 68    │
       │ Число переводов листа (FormFeed)..0                     │
       │ Число строк, содержащих Tab.......12, первая из них: 15 │
       │ Файл занимает на диске............10275 байт(ов)        │
       │ Текущая длина (в памяти)..........10459 байт(ов)        │
       └─────────────────────────────────────────────────────────┘
User screen..... посмотреть экран ДОС, каким он был в момент стар-
                 та Multi-Edit.


                 Р а з н ы е   н а с т р о й к и

Change colors... выбор цветов текущего окна из шести вариантов.
Erase message... очистить область сообщений.
Tab............. установка режимов работы с символами табуляции.
Video toggle.... переключить на плотный режим экрана: 43 (EGA) или
                 50 (VGA) строчек на экране.  Повторный вызов этой
                 функции отменяет плотный режим.


            Ф о р м а т и р о в а н и е   т е к с т а

   После вызова любой функции этого  меню  загружается  форматтер,
назначаются клавиши пометки блока CtrlF11 и  CtrlF12, устанавлива-
ется режим DOCUMENT и определяется заданное  значение Right_Margin
(правая граница текста).

Adjust margins..... установить параметры  форматтера  -  граничные
                    колонки (l, r) и абзац (a) - в  соответствии с
                    рельефом текущего абзаца.
Change margins..... установить вручную параметры (l, r, a).
Free style......... установить l=0, a=0, r=66. Это  означает авто-
                    матическое форматирование согласно рельефу те-
                    кущего абзаца.
Global formatting.. форматировать весь  файл.  Сначала  установите
                    курсор на колонку абзаца!
Information........ справка о текущих параметрах форматтера (нули,
                    если он еще не загружен).
Reject formatting.. прекратить форматирование текущего файла.
Standard style..... установить l=1, a=4, r=66.


                 П о д д е р ж к а   я з ы к о в

   Предлагаемое меню зависит от расширения  текущего  файла.  Пока
поддерживаются  два  языка:  Clarion  (файлы  *.CLA)  и  макроязык
Multi-Edit (файлы *.SRC).

                 A.  Ф а й л ы   C l a r i o n .

Call editor.......... вызвать текстовый редактор  Clarion  для ре-
                      дактирования описаний экранов и  отчетов,  а
                      затем вернуться в Multi-Edit.
Generate header...... вставить заголовок программы.
Insert separator..... вставить разделительную строчку:  "!---...".
Load INCLUDE......... загрузить файл, указанный в текущей строчке.
Straighten comments.. выравнять комментарии на колонку 50.

             B.  М а к р о с ы   M u l t i - E d i t

Action map........... составить наглядную схему структуры текущего
                      макро. К сожалению, исполнитель этой функции
                      недоотлажен, и возможны ошибки,  если на од-
                      ной строчке записано несколько операторов.
Format macro......... форматировать структуру  текущего  макро.  И
                      здесь имеются ошибки.
Run current macro.... запустить  текущее  макро  (имя генерируется
                      автоматически из имени файла)


   Два текста (WORDKIT.SRC и TFMKIT.SRC) предлагаются как образцы.

   Практика использования описанной системы в нескольких организа-
циях показала, что работа с новыми функциями  удобна,  клавиши уп-
равления запоминаются за день, а клавиши нижнего уровня  вообще не
надо запоминать. Можно подключить практически неограниченное число
пользовательских макросов. Если вы хотите внедрить у себя подобную
систему, можете взять WORDKIT в качестве шаблона, он прост, бесхи-
тростен и легко поддается переделке.
                                                    Желаю успехов!
                                             Л.Г.Бунич  26.12.1991

