[ESC] Editor's settings changer
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    (Файл, который обычно читают первым ;-))

                Проголосуйте, пожалуйста, за [ESC] на плагринге:
            http://plugring.farmanager.com/cgi-bin/voter.cgi?ID=364
                      Для вас пустяк, а мне приятно :-)


   Для поддержки разработки программы можно пожертвовать некоторую сумму. Вот
     мои кошельки в системе WebMoney.ru (www.wmtransfer.com): Z78747572179069
        (для USD), E876273527569 (для Euro), R538290555814 (для рублей).


   Есть у меня просьба к вам (не оглядывайтесь, именно к вам): не могли  бы  вы
(ваши знакомые  и  т.д.)  перевести  readme  и  lng  на  английский,  немецкий,
французский или любой другой, какой знаете, язык, а  затем  прислать  это  дело
мне, чтобы я включил это в поставку программы? Я никого  не  заставляю  и  лишь
надеюсь на то, что есть  люди, готовые подкрепить свои "пасибы" делом...


1. Что это за программа
2. Системные требования
3. Лицензия
4. Установка и удаление
5. Использование
6. Пользовательские макросы
7. Дополнительные возможности для сторонних разработчиков
   7.1. GetEditorSettings
   7.2. SetEditorOption
   7.3. Работа с макросами
   7.4. Имена героев ;-)
8. Где брать новые версии
9. Благодарности
10. FAQ

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Что это за программа

   [ESC] - это плагин для FAR, предназначенный  для  автоматического  изменения
настроек текущего редактора с учетом типа редактируемого файла.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Системные требования

   Для работы плагина необходим FAR Manager 1.70 Release (build 2087) и выше.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. Лицензия

   Прочтите, пожалуйста, лицензию (License.txt) - там все написано.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4. Установка и удаление

   Установить можно так же, как  и  большинство  прочих  плагинов  для  Фара:
   - Создайте подкаталог с произвольным именем в Far\Plugins и скопируйте  туда
файлы esc.dll, *.hlf, *.lng, *.xml, каталог Cfg вместе с содержимым.
   - Если esc.xml содержит некоторое количество настроек (по умолчанию  имеются
настройки для c/c++, makefile и др.), то плагин начнет делать свое черное  дело
сразу же после перезапуска FAR, в противном случае вам потребуется создать файл
конфигурации (см. следующий пункт).
   ЭТО ВАЖНО: Вам лучше отключить глобальную опцию  редактора  "Пробелы  вместо
табуляции" (в панелях: F9 -> Параметры -> Настройки редактора -> Пробелы вместо
табуляции). Если эта опция должна быть включенной  для  каких-либо  файлов,  то
включайте ее средствами  [ESC].  Подробности  смотрите  в  описании  expandtabs
(раздел 5.3 данного файла). Кроме того,  рекомендуется  отключить  или  удалить
другие плагины,  которые  делают  что-то  из  того,  что  делает  [ESC],  чтобы
исключить конфликт между  действиями  плагинов  (например,  стандартный  плагин
AutoWrap тоже занимается автосверткой, поэтому его можно отключить).

   Удаление плагина:
   - выйдите из FAR (это требуется, т.к. он загружает esc.dll при запуске)
   - сотрите каталог с плагином, который вы создали при установке
   - удалите записи плагина в реестр (например, при помощи uninstall.reg)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5. Использование

   Чтобы [ESC] заработал требуется включение его в "параметрах внешних модулей"
(включено по умолчанию) и наличие специального файла  с  настройками  редактора
для различных типов файлов. Последний должен иметь такое  же  имя,  как  и  DLL
плагина, но с расширением xml (по умолчанию -  esc.xml,  далее  по  тексту  под
"esc.xml" следует понимать сам файл esc.xml  и  файлы,  которые  он  подключает
командой include), и находиться там же, где и DLL плагина. Структура это файла,
как можно догадаться  по  расширению,  ничем  не  отличается  от  формата  xml.
Настройки [ESC] хранятся в блоке <Esc-Settings>, в нем находится так же и  блок
с описаниями настроек для каждого типа файла -  <Types>,  ну  а  настройки  для
некоего типа файлов находятся в конкретном блоке type. Схематично это  выглядит
так:
   ------------------
   <Esc-Settings>
     ...
     <Types>
        <type ...>
          <margin .../>
          <quote .../>
          ...
        </type>
        ...
     </Types>
   </Esc-Settings>
   ------------------

   Можно переопределять уже определенные ранее типы. Для этого нужно  присвоить
настройкам то же самое имя. В  этом  случае  настройки  указанного  типа  будут
дополнены новыми, но при этом это изменение  настроек  не  скажется  на  типах,
которые унаследовали от первоначального определения. Еще не запутались? :-) Вот
простая иллюстрация сказанного:
   ------------------
   <type name="MyType1" .../>
   |----<type name="MyType2" inherit="MyType1".../>
   |
   |-<type name="MyType1" .../>

   (описания параметров приведены ниже в этом readme)

   Сначала будут прочтены первоначальные (самые  близкие  к  началу)  настройки
   типа  "MyType1",  после  этого  эти  настройки  будут   унаследованы   типом
   "MyType2". И, наконец, настройки типа "MyType1"  будут  дополнены  тем,  что
   содержится в следующем теге type с таким же именем (параметр "name").
   ------------------

   РЕКОМЕНДУЕТСЯ  при  изменении  конфигурационных  файлов  [ESC]  закрыть  все
редакторы, а потом открыть снова нужные файлы на редактирование.

   Тип текущего файла в редакторе определяется автоматически при  его  открытии
на основе значений type/mask и type/overload. Схема определения типа следующая:
   - имя файла (с учетом пути или без  в  зависимости  от  состояния  параметра
     type/skippath) последовательно сравнивается с type/mask, начиная  с  самых
     последних известных плагину типов файлов  и  заканчивая  первым  известным
     типом
   - если имя совпадает с type/mask и параметр overload включен, то  считается,
     что  обрабатываемый  файл  принадлежит  к  данному  type,   и   дальнейшее
     вычисление  типа  файла  прекращается,  в  противном  случае  производится
     сравнение со следующим по направлению к началу файла типом.
   Таким образом найденный тип файла будет либо самым первым  подходящим  среди
всех известных типов (от начала к концу), либо самым последним из подходящих  и
имеющих включенный параметр overload. Такая логика  работы  позволяет  уточнять
стандартные определения типов из дистрибутива  плагина,  не  меняя  стандартных
конфигурационных файлов (посмотрите внутрь esc.xml - в самом конце подключается
файл esc_user.xml, в котором вы  можете  держать  ваши  персональные  настройки
типов  файлов):  например,  вы  можете  указать  свои  собственные  специальные
настройки для типа, который попадает под маску special*.txt,  несмотря  на  то,
что в стандартных конфигурационных файлах уже есть настройки для типа,  который
попадает под маску *.txt.
   Можно также вручную выбрать настройки для текущего файла в  редакторе  через
меню плагина, которое можно вызвать через F11.  В  данном  меню  звездочка  (*)
всегда указывает на тот тип, который был выбран при открытии файла,  а  текущий
элемент при открытии меню - текущий тип настроек.

---------------> Какие параметры тега type можно использовать -----------------
Параметр    : include
Тип         : Строка
Описание    : Имя файла, может быть  относительным  (в  этом  случае  начальным
              каталогом  считается   каталог,   содержащий   текущий   файл   с
              настройками)  и   абсолютным,   можно   использовать   переменные
              окружения. При наличии этого  параметра  плагин  вместо  настроек
              текущего тега type считывает настройки из указанного файла  (сами
              прочие настройки текущего type игнорируются).
Обязательный: Нет
По умолчанию: Нет значения по умолчанию
Наследуется : Нет

Параметр    : name
Тип         : Строка
Описание    : Наименование типа файла
Обязательный: Да
По умолчанию: Нет значения по умолчанию
Наследуется : Нет

Параметр    : mask
Тип         : Строка
Описание    : Одна или несколько масок файлов, перечисленных через запятую.
              См. описание параметра skippath.
Обязательный: Да
По умолчанию: Нет значения по умолчанию
Наследуется : Нет

Параметр    : overload
Тип         : Строка
Описание    : Указывает, проверять ли остальные  определения  типов  файлов при
              вычислении типа текущего файла в редакторе. Смотрите также  схему
              вычисления типа файла (приведена раньше в данном разделе readme)
              Может быть:
              on - перегрузка включена (не проверять остальные типы)
              off - перегрузка выключена (проверять остальные типы)
Обязательный: Да
По умолчанию: off
Наследуется : Нет

Параметр    : inherit
Тип         : Строка
Описание    : Команда,   приказывающая   унаследовать    все    настройки   для
              определенного типа файлов, таким образом вам не нужно  копировать
              одни и те же настройки в похожие типы файлов. В  кавычках  должно
              быть имя (параметр name) определенного ранее (т.е. ближе к началу
              файла esc.xml) типа файлов. Регистр символов  важен!  Наследуются
              настройки первого встреченного  типа  с  указанным  именем.  Если
              часть настроек должна быть отличной от тех, которые унаследовали,
              то просто определите их заново в настройках текущего типа. Пример
              использования   данной   команды   вы   можете    посмотреть    в
              дистрибутивном esc.xml.
Обязательный: Нет
По умолчанию: Нет значения по умолчанию
Наследуется : :-)

Параметр    : skippath
Тип         : Строка
Описание    : Указывает, учитывать ли пути к файлам при сравнении с маской
              (см. параметр mask).
              Может быть: on - игнорировать пути, off - учитывать пути.
Обязательный: Нет
По умолчанию: on
Наследуется : Нет
---------------- Какие параметры тега type можно использовать <----------------

                Далее в блоке type могут быть следующие теги:
                (если встречаются несколько одинаковых тегов,
                     то учитывается только первый из них)

   5.1. margin
   Этот тег обрабатывается при  помощи  кода,  написанного  Стасом  Механошиным
<rampitec@tu.spb.ru>. Обо всех вопросах, связанных  с  обработкой  этого  тега,
нужно писать сразу ему.
--------------> Какие параметры тега margin можно использовать ----------------
Параметр    : autowrap
Тип         : Строка
Описание    : Указывает, выполнять  ли  автосвертку  -  автоматический  перенос
              текста при его наборе на новую строку, если длина текущей  строки
              превысила заданный размер. См. описание параметра wrap.
              Значение параметра может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: on
Наследуется : Да

Параметр    : wrap
Тип         : Число
Описание    : Правая  граница автосвертки, может быть либо абсолютным значением
              от 1 до 512, либо  величиной,  выраженной  в  %  от  ширины  окна
              редактора (в последнем случае  требуется  указывать  символ  '%',
              например,  wrap="80%").  Если  значение  выходит  за   допустимые
              пределы или параметр autowrap не равен "on",  то  считается,  что
              автосвертка  выключена.  Обратите  внимание  на   то,   что   при
              выполнении  автосвертки,  вся  табуляция   в   свернутой   строке
              заменяется на пробелы - все "почему" по этому поводу  направляйте
              Стасу Механошину. Смотрите так же параметр justify.
Обязательный: Нет
По умолчанию: 0
Наследуется : Да

Параметр    : justify
Тип         : Строка
Описание    : Указывает,  использовать  ли  оптимальное  заполнение  строки при
              автосвертке. Если включено, то в строку добавляется  или  из  нее
              удаляется такое количество  пробелов,  чтобы  длина  строки  была
              равна правой  границе  автосвертки.  Этот  параметр  имеет  смысл
              только при включенной автосвертке (см. параметр wrap).
              Может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: off
Наследуется : Да
--------------- Какие параметры тега margin можно использовать <---------------

   5.2. quote
   Этот тег обрабатывается при  помощи  кода,  написанного  Стасом  Механошиным
<rampitec@tu.spb.ru>. Обо всех вопросах, связанных  с  обработкой  этого  тега,
нужно писать сразу ему.
---------------> Какие параметры тега quote можно использовать ----------------
Параметр    : value
Тип         : Строка
Описание    : Включает  или  выключает   обработку   цитирования.   Если  опция
              включена,  то  плагин  будет  корректно  переносить   цитирование
              (встречается такая область при написании писем :) при нажатии  на
              клавиши Delete и Enter (см. также описание параметра quoteeol).
              Может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : quoteeol
Тип         : Строка
Описание    : Уточняет обработку цитирования (см. quote)  при нажатии на кнопку
              Enter, когда курсор находится на конце одной из строк цитирования
              слов одного человека. Если опция включена, то при  нажатии  Enter
              на  такой  строке,  в  новую  строку  будут  добавлены   символы,
              означающие  начало  цитирования.  Если  опция  отключена,  то   в
              подобной ситуации вы получите обыкновенную  пустую  строку.  Если
              ничего не понятно (не сомневаюсь ;-), то проиллюстрирую поведение
              опции  на  простом  примере   -   ниже   приведено   цитирование,
              местоположение курсора обозначено звездочкой (*):
              -----
              IS> Предлагается постить хелпы от плагинов в эху?*
              IS> Для некоторых они весьма большие.
              -----
              Если quoteeol="on", то после нажатия Enter вы получите:
              -----
              IS> Предлагается постить хелпы от плагинов в эху?
              IS> *
              IS> Для некоторых они весьма большие.
              -----
              Если quoteeol="off", то после нажатия Enter вы получите:
              -----
              IS> Предлагается постить хелпы от плагинов в эху?
              *
              IS> Для некоторых они весьма большие.
              -----
              Опция может принимать следующие значения:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: off
Наследуется : Да
---------------- Какие параметры тега quote можно использовать <---------------

   5.3. tab
----------------> Какие параметры тега tab можно использовать -----------------
Параметр    : tabsize
Тип         : Число
Описание    : Размер табуляции. Может быть от 1 до 512, если он выходит за эти
              пределы, то игнорируется и не изменяется.
Обязательный: Нет
По умолчанию: 0
Наследуется : Да

Параметр    : expandtabs
Тип         : Строка
Описание    : Состояние режима "преобразовывать табуляцию".
              Обратите  внимание на  то,  что  если  в  настройках  внутреннего
              редактора FAR по умолчанию эта опция включена, то любой  в  любом
              файле, открываемом  в  редакторе,  все  символы  табуляции  будут
              заменены на пробелы, даже если в esc.xml для  этого  типа  файлов
              эта опция отключена. Происходит это потому, что плагин  узнает об
              открытии файла только после начальной обработки файла FAR'ом. Для
              того, чтобы от такой принудительной замены табуляции  на  пробелы
              избавиться, отключите данную опцию в настройках  редактора.  Если
              при этом требуется, чтобы для всех типов файлов, о которых  [ESC]
              не  знает,  табуляция  по-прежнему  заменялась  на  пробелы,   то
              добавьте в конец(!) файла esc.xml тип с  маской  "*",  в  котором
              укажите expandtabs="on".
              Может быть:
              on - включить, off - выключить, ignore - игнорировать,
              onlynew - включить только для вновь вводимых символов табуляции
              (уже существующие символы табуляции не меняются).
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да
----------------- Какие параметры тега tab можно использовать <----------------

   5.4. smartkey
--------------> Какие параметры тега smartkey можно использовать --------------
Параметр    : tab
Тип         : Строка
Описание    : Управляет   режимом   "умная  табуляция".   Использование   этого
              параметра  имеет  смысл  только,  если  tab/expandtabs="on"   или
              "onlynew". Если опция включена, то плагин отслеживает нажатия  на
              клавиши  "tab"  и  "shift-tab".  При  нажатии  на  клавишу  "tab"
              вставляет  в  строку  число  пробелов,   соответствующее   первой
              непробельной позиции одной из предыдущих строк с  учетом  текущей
              позиции  курсора,  а   при   нажатии   на   клавишу   "shift-tab"
              устанавливает курсор на предыдущую умную табуляцию  без  удаления
              символов. На  обработку  tab  влияет  параметр  stopchar.  Пустые
              строки из анализа исключаются. По умолчанию плагин  проверяет  до
              64 предыдущих строк, изменить  это  можно  при  помощи  параметра
              lines. Короче, сложно рассказать на словах, просто  включите  эту
              опцию   и   посмотрите   на   результат   своими   глазами    ;-)
              В текущей версии не реализовано изменение границ поточного  блока
              при выполнении команды "умная табуляция".
              Может быть:
              on - включить, off - выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : backspace
Тип         : Строка
Описание    : Управляет  режимом   "smart  backspace".    Использование   этого
              параметра  имеет  смысл  только,  если  tab/expandtabs="on"   или
              "onlynew". Если опция включена, то плагин отслеживает нажатия  на
              клавишу "backspace". При нажатии  на  клавишу  "backspace",  если
              перед курсором вплоть до начала строки нет непробельных символов,
              то происходит удаление стольких пробелов,  сколько  нужно,  чтобы
              позиция сравнялась с предыдущей  позицией  умной  табуляции  (см.
              tab). Пустые строки из анализа исключаются. По  умолчанию  плагин
              проверяет до 64 предыдущих строк, изменить это можно  при  помощи
              параметра lines. Обратите внимание на  то,  что  при  нажатии  на
              "tab", а затем на  "backspace",  курсор  может  не  оказаться  на
              позиции, которая была перед нажатием на "tab"  -  логика  анализа
              предыдущих  строки  при  обработке  "tab"  отличается  от  логики
              обработки "shift-tab" и "backspace". Короче, сложно рассказать на
              словах, просто включите  эту  опцию  и  посмотрите  на  результат
              своими глазами ;-)
              В текущей версии не реализовано изменение границ поточного  блока
              при выполнении команды "smart backspace".
              Может быть:
              on - включить,  off  -  выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : stopchar
Тип         : Строка
Описание    : Позволяет уточнить обработку tab и backspace. Если этот  параметр
              содержит какие-либо символы, то они обрабатываются так же, как  и
              пробелы.
Обязательный: Нет
По умолчанию: Пустая строка
Наследуется : Да

Параметр    : home
Тип         : Строка
Описание    : Включает или  выключает  обработку  клавиши  "home".  Если  опция
              включена, то курсор будет устанавливаться, если это возможно,  не
              на самую первую позицию в строке, а на самую первую  непробельную
              позицию. Может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : lines
Тип         : Число
Описание    : Количество  строк   для  анализа.    Используется  при  обработке
              параметров tab и backspace. Если параметр lines меньше 1,  то  он
              игнорируется.
Обязательный: Нет
По умолчанию: 64
Наследуется : Да
--------------- Какие параметры тега smartkey можно использовать <-------------

   5.5. kill
---------------> Какие параметры тега kill можно использовать -----------------
Параметр    : killspace
Тип         : Строка
Описание    : Указывает, удалять ли лишние пробелы/табуляцию в конце  строк.
              Сама процедура удаления происходит в двух ситуациях:
              a) при сохранении файла (обрабатывается весь файл);
              b) при нажатии в процессе редактирования клавиш end или
                 shift-end (обрабатывается текущая строка). Эту возможность
                 можно отключить при помощи параметра p_end.
              Поведение  опции  уточняется  при  помощи  параметров   p_end   и
              p_minuses. Значение параметра может быть:
              on - включить удаление, off - выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : p_end
Тип         : Строка
Описание    : Указывает, обрабатывать  ли  плагину  нажатия на клавиши end  или
              shift-end - см. описание параметра killspace. Использование этого
              параметра имеет смысл только, если killspace="on".  На  обработку
              этого параметра влияет опция p_minuses.
              Значение параметра может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: on
Наследуется : Да

Параметр    : p_minuses
Тип         : Строка
Описание    : Указывает, удалять  ли  конечные  пробелы из строк, состоящих  из
              трех  символов  "-- "  (минус-минус-пробел).    Эта   возможность
              требуется при использовании редактора FAR  для  написания  писем.
              Использование  этого   параметра   имеет   смысл   только,   если
              killspace="on".
              Значение параметра может быть:
              on - включить, off - выключить
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : killemptylines
Тип         : Строка
Описание    : Указывает,  удалять ли пустые строки в конце файла. Если удаление
              включено, то удаляются все пустые  строки  в  конце  файла  кроме
              одной. Сама процедура удаления происходит только  при  сохранении
              файла и поэтому не мешает вам при работе. Смотрите также описание
              опции forcekel.  Может  быть:  on  -  включить  удаление,  off  -
              выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : forcekel
Тип         : Строка
Описание    : Если  опция  включена  и  killemptylines="on",  то при сохранении
              файла удаляются все пустые строки (кроме  одной  -  см.  описание
              killemptylines)  независимо  от  положения  курсора.  Если  опция
              отключена, то удаляются только пустые строчки вплоть  до  строки,
              на которой стоит курсор, но не  более  того.  Может  быть:  on  -
              включить удаление, off - выключить.
Обязательный: Нет
По умолчанию: on
Наследуется : Да
---------------- Какие параметры тега kill можно использовать <----------------

   5.6. addsymbol
------------> Какие параметры тега addsymbol можно использовать ---------------
Параметр    : value
Тип         : Строка
Описание    : Если  опция  включена,   параметры  start  и  end  не  пустые,  и
              набираемый в редакторе символ содержится в start, и при этом  под
              курсором находится пробел,  табуляция  или  ничего  (т.е.  курсор
              находится за пределами конца строки), то после данного символа  в
              строку будет добавлен символ в  соответствии  с  параметром  end.
              Курсор будет  помещен  после  добавленного  символа.  Если  опция
              включена и добавления пользовательского символа в соответствие  с
              содержимым  start/end,  произведено  не  было,  то   производится
              попытка сделать то же самое, но уже на основе содержимого start_b
              и end_b. Смысл тот же самый, только символ добавляется не только,
              когда под курсором пробел или табуляция, но и когда под  курсором
              находится символ, содержащийся в end_b, и  курсор  будет  помещен
              перед  добавленным  символом  -  это  может  быть   полезно   при
              реализации "автоскобок", например.
              На текущий момент при  обработке  addsymbol  настройка  редактора
              "Постоянные блоки" игнорируется и поведение осуществляется такое,
              как будто она включена.
              Пример действия функции:
                addsymbol/value="on", start_b="{<(", end_b="}>)". В этом случае
                при наборе символа '{' (открывающая фигурная скобка)  в  строку
                будет добавлен первый символ (потому  что  позиция  открывающей
                фигурной скобки в start_b - первая) из end_b, т.е. '}'.  А  при
                наборе '<' или '(' соответственно будут добавлены '>' и ')'.
              Может быть: on - включить, off - выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Параметр    : start, end, start_b, end_b
Тип         : Строка
Описание    : Смотрите описание параметра value.
Обязательный: Нет
По умолчанию: Пустая строка
Наследуется : Да
------------- Какие параметры тега addsymbol можно использовать <--------------

   5.7. autoindent
------------> Какие параметры тега autoindent можно использовать --------------
Параметр    : value
Тип         : Строка
Описание    : Состояние режима "автоотступ". Может быть:
              on - включить, off - выключить, ignore - игнорировать.
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да
------------- Какие параметры тега autoindent можно использовать <-------------

   5.8. cursorbeol
------------> Какие параметры тега cursorbeol можно использовать --------------
Параметр    : value
Тип         : Строка
Описание    : Состояние режима "курсор за пределами строки". Может быть:
              on - включить, off - выключить, ignore - игнорировать.
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да
------------- Какие параметры тега cursorbeol можно использовать <-------------

   5.9. charcodebase
-----------> Какие параметры тега charcodebase можно использовать -------------
Параметр    : value
Тип         : Строка
Описание    : Этот  параметр  позволяет  менять  представление кода символа под
              курсором  в  статусной  строке  в  редакторе.   Может   принимать
              следующие значения:
              dec - десятеричное значение (3 символа с ведущими пробелами)
              hex - шестнадцатеричное значение (2 символа под цифру+символ 'h')
              oct - восьмеричное значение (3 символа с ведущим нулями)
              ignore - игнорировать и не менять этот параметр
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да
------------ Какие параметры тега charcodebase можно использовать <------------

   5.10. eol
----------------> Какие параметры тега eol можно использовать -----------------
Параметр    : value
Тип         : Строка
Описание    : Указывает, какие символы конца строки  должны  использоваться для
              данного типа файла. Можно  указать  до  4-х  символов  (обработка
              заканчивается  после  обработки  четвертого  символа  или   после
              встречи конца строки, или после встречи символа  с  кодом  0x00).
              Обратите внимание на то, что по правилам  xml  некоторые  символы
              нужно записывать hex-кодами. Например, если  вы  хотите  указать,
              что конец  строки  должен  быть  crlf  (формат  dos),  то  данный
              параметр должен быть равен "&#x0d;&#x0a;".
Обязательный: Нет
По умолчанию: Пустая строка
Наследуется : Да
----------------- Какие параметры тега eol можно использовать <----------------

   5.11. table
---------------> Какие параметры тега table можно использовать ----------------
Параметр    : value
Тип         : Число
Описание    : Кодировка для новых файлов по  умолчанию  (см. описание параметра
              name). Фар для таких файлов устанавливает кодировку OEM, если вас
              это не устраивает, то данный параметр поможет изменить  ситуацию.
              Значение параметра может быть одним из следующих:
              0 - ничего не менять
              1 - кодировка OEM
              2 - кодировка ANSI
              Любое число большее либо  равное  3  -  пользовательская  таблица
              символов с номером равным (число-3).
Обязательный: Нет
По умолчанию: 0
Наследуется : Да

Параметр    : name
Тип         : Строка
Описание    : Одна или несколько  масок,  перечисленных  через  запятую. Формат
              масок  полностью  аналогичен  файловым  маскам.  Указанные  маски
              используются  для  поиска  подходящей  кодовой   таблицы,   среди
              установленных  пользовательских  таблиц.   Если   таблица   будет
              найдена, то при создании нового файла соответствующего типа будет
              автоматически выбрана она. Если таблица не найдена, то  поведение
              осуществляется в соответствии с параметром value (см. выше).
Обязательный: Нет
По умолчанию: Пустая строка
Наследуется : Да
---------------- Какие параметры тега table можно использовать <---------------

   5.12. savepos
--------------> Какие параметры тега savepos можно использовать ---------------
Параметр    : value
Тип         : Строка
Описание    : Управляет  опцией  редактора  "Сохранять  позицию  файла".   Если
              value="on"  и  в  редактируемом  файле  строк  больше  или  равно
              параметру minlines, то опция редактора "Сохранять позицию  файла"
              включается, если savepos="off" или value="on", но в редактируемом
              файле  строк  меньше  minlines,   то   данная   опция   редактора
              отключается. Может быть:
              on - включить,
              off - выключить,
              ignore - игнорировать и не менять этот параметр
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да

Параметр    : minlines
Тип         : Число
Описание    : Число,  большее  либо  равное  0.   Смотрите  описание  параметра
              value.
Обязательный: Нет
По умолчанию: 0
Наследуется : Да
--------------- Какие параметры тега savepos можно использовать <--------------

   5.13. lockmode
-------------> Какие параметры тега lockmode можно использовать ---------------
Параметр    : value
Тип         : Строка
Описание    : Состояние режима "запрет модификации" (аналог Ctrl-L) в
              редакторе. Может быть:
              on - включить, off - выключить, ignore - игнорировать.
Обязательный: Нет
По умолчанию: ignore
Наследуется : Да
-------------- Какие параметры тега lockmode можно использовать <--------------

   5.14. usermacro
-------------> Какие параметры тега usermacro можно использовать --------------
Параметр    : value
Тип         : Строка
Описание    : Включает  обработку  пользовательских  макросов  для данного типа
              файла. Сами макросы содержатся в тегах macro, которые должны быть
              вложены внутрь тега usermacro.  Подробности  смотрите  в  разделе
              №6 "Пользовательские макросы".
              Может быть: on - включить, off - выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да
-------------- Какие параметры тега usermacro можно использовать <-------------

   5.15. lockfile
-------------> Какие параметры тега lockfile можно использовать ---------------
Параметр    : value
Тип         : Строка
Описание    : Запрет  изменения  файла  сторонними  процессами.  Физически этот
              сделан следующим  образом:  при  открытии  или  перерисовке  файл
              открывается  плагином  на  чтение  (GENERIC_READ)  с  разрешением
              сторонним процессам только читать его  (FILE_SHARE_READ),  а  при
              закрытии файла FAR'ом или при его  сохранении  он  закрывается  и
              плагином, после чего сторонние процессы снова могут изменять его.
              Может быть: on - включить, off - выключить.
По умолчанию: off
Наследуется : Да
-------------- Какие параметры тега lockfile можно использовать <--------------

   5.16. wordsym
   Этот тег указывает, что должно считаться частью слова. Все, что не  является
частью слова, считается символом-разделителем, который используется,  например,
самим FAR'ом при поиске слов или при переходе  между  словами  при  нажатии  на
Ctrl-стрелка.
-------------> Какие параметры тега wordsym можно использовать ----------------
Параметр    : value
Тип         : Строка
Описание    : Включает обработку alphanum и additional.
              Может быть: on - включить, off - выключить.
Обязательный: Нет
По умолчанию: off
Наследуется : Да

Описание    : Указывает, что  считать  частью слова.  Если параметр включен, то
              частью слова считаются буквы и цифры, в противном случае - только
              буквы.
              Может быть: on - включить, off - выключить.
По умолчанию: off
Наследуется : Да

Параметр    : alphanum
Тип         : Строка
Описание    : Указывает, что  считать  частью слова.  Если параметр включен, то
              частью слова считаются буквы и цифры, в противном случае - только
              буквы.
              Может быть: on - включить, off - выключить.
По умолчанию: off
Наследуется : Да

Параметр    : additional
Тип         : Строка
Описание    : Набор дополнительных символов слова,  используется как дополнение
              параметра alphanum.
По умолчанию: Пустая строка
Наследуется : Да
-------------- Какие параметры тега wordsym можно использовать <---------------

-----------------------> Пример файла с настройками ---------------------------
<Esc-Settings>
  <Types>
    <type name="Sources" mask="|abstract">
      <tab tabsize="2" expandtabs="on"/>
      <smartkey tab="on" backspace="on" home="on" lines="64"/>
      <kill killspace="on" killemptylines="on" forcekel="off"
        p_end="on" p_minuses="off"
      />
      <addsymbol value="on"
        start="," end="&#x20;"
        start_b="&quot;&apos;({[&lt;" end_b="&quot;&apos;)}]&gt;"
      />
      <autoindent value="on"/>
      <cursorbeol value="on"/>
      <charcodebase value="hex"/>
    </type>
    <type name="C/C++" mask="*.[ch],*.[ch]pp,*.cc,*.cxx" inherit="Sources"/>
    <type name="AWK" mask="*.awk" inherit="Sources"/>
  </Types>
</Esc-Settings>
------------------------ Пример файла с настройками <--------------------------

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6. Пользовательские макросы

   Для каждого типа  файла  в  [ESC]  можно  задавать  свой  собственный  набор
клавиатурных  макрокоманд  (макросов).  Макросы  могут  быть  использованы  для
переопределения кнопок мыши, стандартных клавиш или комбинаций клавиш  FAR  или
для создания новых клавиатурных команд.  Основное  отличие  макросов  [ESC]  от
макросов FAR - они индивидуальны для каждого типа файла, поэтому на одну  и  ту
же кнопку (комбинацию  клавиш)  можно  вешать  разные  команды.  Например,  для
исходных текстов на языке C++ можно назначить на F9 вызов  компилятора,  а  для
HTML - назначить на F9 вызов браузера. Учтите, что для данного  примера  важно,
чтобы на F9 не было назначено никакого макроса FAR, т.к. в противном случае при
нажатии на F9 будет выполнен макрос FAR, т.к. до плагина управление не дойдет.
   Существуют и специфические для [ESC] макросы -  автоматически  запускающиеся
при создании файла или при загрузке файла в редактор - таких макросов  в  самом
FAR нет. Эти  макросы  предназначены  для  дополнительной  подготовки  файла  в
редакторе к работе с ним. Например, можно добавлять команду include <windows.h>
в cpp-файлы и т.п., т.е. фактически данная возможность  заменяет  плагины  типа
tepmlate, которые вставляют в новый файл  шаблон-заготовку.  Смотрите  описание
параметра auto в данном разделе.

   Пользовательские макросы перечисляются в теге usermacro (см. раздел 5.14)  и
их может быть сколько угодно (точнее - сколько можно повесить на клавиши  и  их
разрешенные комбинации). Каждый макрос записывается в теге  macro.  В  качестве
примера такого тега рассмотрим макрос на Ctrl-D и среднюю кнопку мыши,  который
при нажатии на Ctrl-D или на среднюю кнопку  мыши  помимо  выполнения  основной
функции Ctrl-D (удаление блока), вставляет  в  файл  строку  "[sk...]"  (так  я
обозначаю пропуск несущественной при ответе части письма):
------
 <type name="Message" mask="*.msg,*.eml" inherit="Texts">
   <usermacro value="on">
     <macro key="CtrlD" auto="off" mclick="on"
       sequence="CtrlD Enter [ s k . . . ] Enter"
       selection="on" stop="on" silent="on" enable="on"/>
   </usermacro>
 </type>
-----
   Описание использованных параметров тега macro:

   key - клавиша или комбинация клавиш, на  которую  назначаем  макрос.  Должна
быть в том же формате, в котором используется в  макросах  FAR,  либо  известна
самому  плагину   [ESC]   -   смотрите   описание   oncreate/onload.   Параметр
необязателен, если включен параметр auto или макрос повешен  еще  и  на  кнопки
мыши. Если он содержит ошибку, то считается, что конфигурационный файл содержит
ошибки и не обрабатывается ([ESC] отказывается работать, если  конфигурационный
файл отсутствует или содержит ошибки). При выборе значения  параметра  key,  вы
должны учесть ИЗВЕСТНЫЕ ОГРАНИЧЕНИЯ, специфичные для FAR:
  - Плагину приходят клавиши (с ограничениями): Alt-F5 - если  плагин  PrintMan
    не установлен, Alt-F11 - если редактор модальный, F6 - если есть запрет  на
    переключение в программу просмотра.
  - Ограничение, различное для разных версий FAR:
      FAR 1.70 build 1662 и выше - плагину не приходят  клавиши:  Ctrl-W,  F11,
      Alt-F9, F12, Ctrl-Tab, Ctrl-Shift-Tab, Alt-Ins и Ctrl-Alt-Shift.

   auto - команда для автоматического запуска. Может быть:
  - oncreate: макрос будет запускаться автоматически при создании нового файла.
  - onload: макрос будет запускаться автоматически при загрузке файла.
  - off: макрос не является автоматическим.
   auto не является обязательным параметром, по умолчанию равен "off".
   Если  несколько  макросов  содержат  команду  автоматического  запуска,   то
выполняются они по  очереди.  Для  новых  файлов  сначала  выполняются  макросы
oncreate, потом - onload. Если какой-нибудь макрос из группы макросов  oncreate
или onload содержит stop="on", то  остальные  автоматические  макросы  из  этой
группы не выполняются. Т.о., параметр stop для  автоматических  макросов  имеет
свое собственное значение.

   lclick, mclick, rlick - состояние кнопок мыши  (левая,  средняя  и  правая),
необходимое для запуска макроса. Значение каждого параметра может быть "on" или
"off" (по умолчанию). Если хотя бы один из этих параметров равен  "on",  то  вы
сможете запустить свой макрос при помощи мыши.

   rctrl, lctrl, ralt, lalt, shift - состояние управляющих клавиш,  необходимое
для запуска макроса при помощи мыши. При запуске макроса при помощи клавиши эти
параметры игнорируются. Значение каждого параметра может быть  "on"  или  "off"
(по умолчанию).

   sequence - непосредственно сам макрос,  формат  идентичен  формату  макросов
FAR. Если макрос содержит  ошибку,  то  считается,  что  конфигурационный  файл
содержит ошибки и не  обрабатывается.  Примечание:  при  использовании  команды
$Date помните, что по правилам XML в esc.xml вместо символа  '"'  (0x22)  нужно
писать "&quot;" (без кавычек).

   stop - указывает, нужно ли остановиться и сразу выполнить макрос ("on")  или
сначала разрешить Фару обработать кнопку  мыши  (комбинацию  клавиш),  а  потом
выполнить макрос ("off"). Значение  по  умолчанию  -  off.  Для  автоматических
макросов данный параметр имеет  дополнительное  значение  -  смотрите  описание
auto.

   selection - позволяет уточнить обработку ситуации  наличия  и  типа  области
выделения в редактируемом файле, получается, что на одну и ту  же  кнопку  мыши
(комбинацию) можно назначать разные команды в зависимости  от  наличия  и  типа
области выделения в файле. Может быть:
   on     - макрос сработает только при наличии области выделения
   off    - макрос сработает только при отсутствии области выделения
   stream - макрос сработает только при наличии поточной области выделения
   column - макрос сработает только при наличии вертикального блока
   ignore - макрос сработает всегда
   Параметр selection может пропускаться, значение его по умолчанию - ignore,
   Поиск подходящих макросов для их исполнения происходит следующим образом:
   1. Если область  выделения  в  файле  отсутствует,  то  выполняется  макрос,
      у которого selection="off", если таких  нет,  то  выполняется  макрос,  у
      которого selection="ignore".
   2. Если область выделения присутствует, то сначала проверяется ее тип:
      2.1. Если область выделения поточная, то выполняется макрос,  у  которого
           selection="stream",  если  таких  нет,  то  выполняется  макрос,   у
           которого selection="on", если таких тоже нет, то выполняется макрос,
           у которого selection="ignore".
      2.2. Если  область  выделения  вертикальная,  то  выполняется  макрос,  у
           которого selection="column", если таких нет, то выполняется  макрос,
           у которого selection="on",  если  таких  тоже  нет,  то  выполняется
           макрос, у которого selection="ignore".

   silent - указывает, скрывать ли экранный вывод при выполнении макроса. Может
быть:
   on  - скрывать экранный вывод
   off - не скрывать экранный вывод
   Параметр silent может пропускаться, значение его по умолчанию - on.

   enable - указывает включен ли данный макрос (on)  или  нет  (off).  Параметр
enable может пропускаться, значение его по умолчанию - on.

   Если в usermacro перечислены дублирующиеся макросы (одинаковые параметры key
и selection), то учитывается только последний из них.

   Выполнение макроса [ESC] не отличается ничем от выполнения макроса FAR -  во
время его не срабатывают другие макросы.

   Если вы умеете писать плагины,  то  смотрите  также  раздел  7.3  "Работа  с
макросами".

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. Дополнительные возможности для сторонних разработчиков

   7.1. GetEditorSettings

   Модуль esc.dll экспортирует функцию GetEditorSettings,  при  помощи  которой
можно узнать информацию о настройках для некоего файла, открытого в  редакторе.
Как это выглядит  на  практике  вы  можете  увидеть  на  плагине  ReWrap  Стаса
Механошина (взять его можно, например,  на  plugring.farmanager.com).  Прототип
функции следующий:

int WINAPI GetEditorSettings(
  int EditorID,
  const char *szName,
  void *Param
);

   В случае успеха возвращается число, отличное от нуля, при не удаче - ноль.

Параметры:
EditorID - его вы узнаете при помощи ECTL_GETINFO
szName   - имя параметра (регистр важен)
Param - указывает на что-то, что зависит от szName. Обратите  внимание  на  то,
что возвращается то, что  было  считано  из  esc.xml,  т.е.  не  отслеживается,
например, то, что пользователь сменил размер  табуляции  вручную.  Это  сделано
специально, реальное  положение  дел  с  той  же  табуляцией  можно  узнать  из
EditorInfo.

Какие могут быть szName и что пишется в Param:
tabsize
   Param указывает на int (32-разрядное знаковое целое).
   В Param пишется значение табуляции (tab/tabsize).

expandtabs
   Param указывает на int.
   В Param пишется следующее значение (tab/expandtabs):
   0 - "off"
   1 - "on"
   2 - "ignore"
   3 - "onlynew"

cursorbeol
   Param указывает на int.
   В Param пишется следующее значение (cursorbeol/value):
   0 - "off"
   1 - "on"
   2 - "ignore"

autoindent
   Param указывает на int.
   В Param пишется следующее значение (autoindent/value):
   0 - "off"
   1 - "on"
   2 - "ignore"

charcodebase
   Param указывает на int.
   В Param пишется следующее значение (charcodebase/value):
   0 - "ignore"
   8 - "oct"
   10 - "dec"
   16 - "hex"

killspace
   Param указывает на int.
   В Param пишется следующее значение (kill/killspace):
   0 - "off"
   1 - "on"

killemptylines
   Param указывает на int.
   В Param пишется следующее значение (kill/killemptylines):
   0 - "off"
   1 - "on"

p_end
   Param указывает на int.
   В Param пишется следующее значение (kill/p_end):
   0 - "off"
   1 - "on"

p_minuses
   Param указывает на int.
   В Param пишется следующее значение (kill/p_minuses):
   0 - "off"
   1 - "on"

forcekel
   Param указывает на int.
   В Param пишется следующее значение (kill/forcekel):
   0 - "off"
   1 - "on"

autowrap
   Param указывает на int.
   В Param пишется следующее значение (margin/autowrap):
   0 - "off"
   1 - "on"

wrap
   Param указывает на int.
   В Param пишется значение правой границы текста (margin/wrap).

justify
   Param указывает на int.
   В Param пишется следующее значение (margin/justify):
   0 - "off"
   1 - "on"

eol
   Значение eol/value.
   Param указывает на DWORD (32-х разрядное целое беззнаковое число).
   В Param пишется число, содержащее упакованные символы конца строки.
   Формат числа следующий:
   LOWORD:  LOBYTE - второй символ
            HIBYTE - первый символ
   HIWORD:  LOBYTE - третий символ
            HIBYTE - четвертый символ

table
   Param указывает на int.
   В Param пишется значение table/value, расшифровку смотрите в описании этого
   параметра.

smarttab
   Param указывает на int.
   В Param пишется следующее значение (smartkey/tab):
   0 - "off"
   1 - "on"

smartbs
   Param указывает на int.
   В Param пишется следующее значение (smartkey/backspace):
   0 - "off"
   1 - "on"

smarthome
   Param указывает на int.
   В Param пишется следующее значение (smartkey/home):
   0 - "off"
   1 - "on"

lines
   Param указывает на int.
   В Param пишется значение параметра smartkey/lines.

p_quote
   Param указывает на int.
   В Param пишется следующее значение (quote/value):
   0 - "off"
   1 - "on"

quoteeol
   Param указывает на int.
   В Param пишется следующее значение:
   0 - "off"
   1 - "on"

savepos
   Param указывает на int.
   В Param пишется следующее значение:
   0 - "off"
   1 - "on"
   2 - "ignore"

minlines
   Param указывает на int.
   В Param пишется следующее значение параметра minlines.

addsymbol
   Param указывает на int.
   В Param пишется следующее значение (addsymbol/value):
   0 - "off"
   1 - "on"

lockmode
   Param указывает на int.
   В Param пишется следующее значение:
   0 - "off"
   1 - "on"
   2 - "ignore"

lockfile
   Param указывает на int.
   В Param пишется следующее значение:
   0 - "off"
   1 - "on"

wordsym
   Param указывает на int.
   В Param пишется следующее значение (wordsym/value):
   0 - "off"
   1 - "on"

alphanum
   Param указывает на int.
   В Param пишется следующее значение:
   0 - "off"
   1 - "on"

additional
   Param  указывает  на  буфер  для  получения  дополнительных  символов  слова
   (wordsym/additional) - т.е. является переменной типа "char *". Размер буфера
   должен  быть  не   меньше   256   байтов.   В   Param   пишется   содержимое
   wordsym/additional с завершающим нулем на конце.

   7.2. SetEditorOption

   Плагин  экспортирует  функцию  SetEditorOption,  при  помощи  которой  можно
изменить настройки  [ESC]  для  определенного  редактируемого  файла.  Прототип
функции:

int WINAPI SetEditorOption(
  int EditorID,
  const char *szName,
  void *Param
);

   В случае успеха возвращается число, отличное от нуля, при не удаче - ноль.

Параметры:
EditorID - его вы узнаете при помощи ECTL_GETINFO
szName   - имя параметра (регистр важен)
Param - указатель на новое значение параметра (тип  зависит  от  szName  -  см.
описание параметров GetEditorSettings).

   Обратите внимание на то, что менять  значение  параметра  "table"  не  имеет
смысла в силу его специфичности - он работает только для только  что  созданных
файлов в момент их открытия, а в остальных случаях игнорируется. Если вы хотите
поменять кодировку текущего  редактора  Фара,  то  используйте  соответствующие
функции из FAR API.

   7.3. Работа с макросами

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

BOOL WINAPI CreateMacro(
  HANDLE *Macro,
  const char *Sequence
);
   Эта  функция  используется  для  создания  и  компиляции   пользовательского
макроса.
   Параметры:
   Macro - указатель на HANDLE макроса, сам этот указатель не может быть  NULL.
           Если HANDLE равен NULL, то происходит  выделение  памяти  под  новый
           макрос  (ее  вы  должны  удалить  по  окончанию  работы  при  помощи
           DeleteMacro) и компиляция макроса. Если HANDLE  не  равен  NULL,  то
           происходит просто перекомпиляция макроса.
   Sequence - указатель на строку, оканчивающуюся нулем, с  командами  макроса.
           Формат команд такой же, как и у параметра sequence тега  macro  (см.
           раздел 6 "Пользовательские макросы").
   Возвращается число, отличное от нуля, в случае удачи и 0 - при неудаче.

BOOL WINAPI CreateMultiMacro(
  HANDLE *Macro,
  const char *Sequence,
  DWORD Total
);
   Полный аналог CreateMacro только Sequence в создаваемом макросе  повторяется
не один, а Total раз.

BOOL WINAPI CloneMacro(
  const HANDLE Src,
  HANDLE *Dest
);
   Функция для клонирования содержимого макроса.
   Параметры:
   Src - HANDLE макроса, который клонируем. Не может быть NULL.
   Dest - указатель на HANDLE макроса, который должен принять содержимое Src.
          Сам указатель не может быть NULL. Если HANDLE равен NULL (т.е. макрос
          Dest еще не создан), то  происходит  сначала  создание  макроса  Dest
          (значение HANDLE пишется в *Dest), а только затем  само  клонирование
          содержимого.
   Возвращается число, отличное от нуля, в случае удачи и 0 - при неудаче.

BOOL WINAPI IsMacroOK(
  const HANDLE Macro
);
   Проверка макроса на корректность. Если макрос некорректен,  то  использовать
его (PostMacro) не имеет смысла. В случае удачи возвращается число, отличное от
нуля.

BOOL WINAPI PostMacro(
  const HANDLE Macro,
  BOOL silent
);
   Поместить команды макроса в очередь выполнения FAR. Если  silent  отличается
от нуля, то экранный  вывод  при  выполнении  макроса  показываться  не  будет.
Макрос будет выполнен только, когда буде передано управление FARу. Возвращается
число, отличное от нуля, в случае удачи. Выполняющийся  макрос  имеет  свойства
родных макросов - из него не получится вызвать другие макросы.

   void WINAPI DeleteMacro(HANDLE *Macro);
   Удалить макрос и освободить память. Всегда используйте  эту  функцию,  когда
макрос перестает быть нужным, если не хотите допустить утечек памяти.  Macro  -
указатель на HANDLE удаляемого макрос, этот указатель не может быть NULL.  Если
HANDLE макроса равен NULL, то ничего не делается.  Если  HANDLE  отличается  от
NULL (т.е. макрос существует), то происходит  освобождение  ресурсов  и  HANDLE
приравнивается NULL.

   7.4. Имена героев

   В  этом  разделе  привожу   имена   тех,   кто   умудрился   воспользоваться
предложенными в трех предыдущих разделах  возможностями.  Так  сказать,  привет
коллегам  ;-)  Порядок  изложения  произвольный,  не  нужно  искать  какую-либо
закономерность. Если кто-то тут себя не заметил, то это значит  только  о  том,
что я о его творении ничего не знаю (пишите письма ;).

***>
   "Rewrap"
   - reformat paragraph based on ESC plugin settings
   - justification support
   - FTN quote support

   Автор:
   Stanislav V. Mekhanoshin
   2:5030/172.9@fidonet.org
   rampitec@tu.spb.ru
   http://www.geocities.com/rampitec

   Распространяется с исходным текстом.

<***>
    "[ESC-TSC] Minimalistic"
    This plugin lets you change the settings of [ESC] for  the  current  editor
session.

    "Visualizer"
    This plugin is used to "visualize" otherwise not so easily  noticed  things
in FAR's internal editor - things like right border, tabs, end of line,  cross,
etc.

   Автор:
   Alex Yaroslavsky
   trexinc@yandex.ru
   http://trexinc.sf.net

   Оба плагина распространяются с исходным текстом.

<***>
   "Crest"
   + Colorize selected line and row in internal FAR editor
   + Shoot (overtype-nomove) mode
   + Draw colorized ruller
   + Get margin parameters from settings of "ESC" Far plugin
   + Colorize all same words on screen

   Автор:
   2:5080/80.66
   JouriM@usue.ru

<***>
   "PostMacro"
    Плагин, позволяющий выполнить произвольный  макрос  без  сохранения  его  в
реестре. Плагин может запускать макрос, набранный  в  командной  строке  или  в
диалоге, считывать и запускать макрос  из  отдельного  файла  или  из  реестра.

   Автор:
   Ваш покорный слуга :-)

   Распространяется с исходным текстом.
<***

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8. Где брать новые версии

   В первую очередь мои творения появляются здесь: http://www.moris.ru/~spinoza

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9. Благодарности

   Спасибо Константину Ступнику <xecutor@sendmail.ru> за модуль  для  работы  с
xml,  Станиславу  Механошину  <rampitec@tu.spb.ru>  за  реализацию   удобнейшей
автосвертки и обработку цитирования и Вадиму  Егорову  <zg@bmg.lv>  за  идеи  и
практическую помощь при написании поддержки пользовательских макросов.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10. FAQ

Q1> Как мне указать настройки для файлов, которые не попадают ни  под  одну  из
    масок в esc.xml?
A1> Для этого нужно поместить в файл конфигурации  настройки  для  типа,  маска
    которого равна "*". Эти настройки должны быть самими последними в esc.xml.

Q2> Хочу esc.xml и прочее в диалогах настраивать
A2> Редактор Фара + colorer Игоря Русских мне больше нравятся для  этого  дела.
    Если кому-то  приспичило  большее,  то  пишите  редактирование  настроек  в
    диалогах сами, я это делать буду разве что за отдельную плату :-)

Q3> А почему в esc.xml нет настроек для XXX? Достало уже каждый раз их  в  него
    добавлять.
A3> а) А вы не добавляйте :) Никто же не заставляет  каждый  раз перезаписывать
       ваш  esc.xml  файлом  из  дистрибутива  очередной  версии  плагина.  Это
       придется сделать только, если  будет  изменен  формат  конфигурационного
       файла, что маловероятно, xml - он и в Африке xml.
    b) Можно прислать ваши настройки для  XXX  мне,  возможно, я  их  помещу  в
       дистрибутивный файл, и проблема исчезнет.
    c) Если у  вас  есть  специфичные  настройки,  которыми  вы  по  каким-либо
       причинам  не  хотите  делиться  с  миром,  то  их  можно  разместить   в
       esc_user.xml, который подключается в конце esc.xml,  и  тогда  не  будет
       нужно изменять дистрибутивный esc.xml под свои нужды  для  каждой  новой
       версии [ESC].

Q4> А почему, когда я сохраняю редактируемый  файл  и  делаю  отмену  изменений
    (Ctrl-Z), то вместо отмены моих изменений курсор внезапно  скачет  в  конец
    файла?
A4> Видимо, при сохранении файла произошли некоторые манипуляции в его конце  -
    например, были удалены пустые строчки.  Эти  изменения  для  FAR  такие  же
    изменения как и те, которые вы делаете  сами  своими  руками.  Поэтому  при
    отмене изменений в первый раз после сохранения восстанавливаются  удаленные
    плагином пустые строчки. Нажмите Ctrl-Z еще раз, тогда будут  отменены  уже
    ваши изменения.

Q5> Хотелось бы иметь возможность при нажатии на определенную комбинацию клавиш
    в  начало  строки  вставляется  один  или   несколько   символов   (символы
    комментария, для каждого языка - свои). По другой комбинации они удаляются.
    При наличии выделенного блока это делается соответственно для каждой строки.
    Все-таки не в каждом языке есть  блочные  комментарии,  или  не  всегда  их
    удобно использовать.

A5> Я не думаю,  что  функция  добавления/удаления  комментирующих  символов  в
    строку является той  необходимостью,  которая  обязательно  должна  быть  в
    плагине,   занимающемся,   по   идее,   настройками   редактора.   Подобную
    вставку/удаление  лучше  производить  какими-то  другими  вещами,   которые
    занимаются изменением строк выделенного блока по  требованию  пользователя:
    из универсальных можно попытаться использовать мой плагин S&R  -  настроить
    две схемы для некоего языка (первую -  для  вставки  комментария  в  начало
    строки, вторую - для его удаления) и вызывать их применение макросами. Если
    захочется использовать такую возможность для  нескольких  языков  с  разным
    синтаксисом, то можно настроить соответствующее количество пар схем для S&R
    и вызывать их макросами. Ну, а для того, чтобы макросы не  пришлось  вешать
    на все кнопки клавиатуры, а только на две  определенные  комбинации,  можно
    использовать [ESC] - он будет вызывать нужные схемы в зависимости  от  типа
    редактируемого файла.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Благодарю за использование [ESC].

                                                                  Иван Синтюрин