EditorControl

Функция EditorControl обеспечивает доступ на низком уровне к API редактора FAR'a.
int WINAPI EditorControl(
  int Command,
  void* Param
);

Параметры

Command
Тип команды. Может быть одним из следующих (перечисление EDITOR_CONTROL_COMMANDS):
КомандаОписание
ECTL_ADDCOLOR Задать цвет части строки. Эта команда может быть вызвана несколько раз для одной и той же строки для задания нескольких цветных областей. Param указывает на структуру EditorColor. Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_ADDSTACKBOOKMARK Добавить позицию навигации ("стековую закладку") в текущую позицию редактора. При добавлении удаляются все позиции навигации с индексом выше индекса текущей позиции навигации. Param должен быть равен NULL. Команда возвращает TRUE в случае успешного выполнения.
ECTL_CLEARSTACKBOOKMARKS Удалить все позиции навигации. Param должен быть равен NULL.
ECTL_DELETEBLOCK Удалить блок в редакторе. Функция вернет TRUE в случае удачного удаления блока и FALSE, если редактор заблокирован (пользователь нажал Ctrl-L) или нет выделенного блока. Param должен быть равен NULL.
ECTL_DELETECHAR Удалить символ под курсором. Param должен быть NULL.
ECTL_DELETESTACKBOOKMARK Удалить указанную позицию навигации. Param должен быть равен индексу удаляемой позиции навигации (0 и более) или -1 для удаления текущей позиции навигации. Количество позиций навигации можна получить, вызвав ECTL_GETSTACKBOOKMARKS c Param равным значению NULL.
Команда возвращает TRUE в случае успешного выполнения.
ECTL_DELETESTRING Удалить текущую строку. Param должен быть NULL.
ECTL_EDITORTOOEM Конвертировать текст из кодировки редактора в OEM-кодировку. Param указывает на структуру EditorConvertText.
ECTL_EXPANDTABS Заменить все символы табуляции в строке пробелами. Param указывает на целую переменную, содержащую номер обрабатываемой строки или -1 для обработки текущей строки.
ECTL_GETBOOKMARKS Получить информацию о закладках для текущего редактируемого файла. Param указывает на структуру EditorBookMarks.
Команда возвращает FALSE в случае, если:
  1. файл еще не открыт;
  2. в качестве Param был передано значение NULL;
В случае успеха возвращается TRUE.
ECTL_GETSTACKBOOKMARKS Получить информацию о позициях навигации ("стековых закладках") для текущего редактируемого файла. Param указывает на структуру EditorBookMarks или равен значению NULL.
Команда возвращает количество позиций навигации, информация о которых была передана (или общее количество позиций навигации, если в качестве Param было передано значение NULL).
ECTL_GETCOLOR Получить цвет части строки. Param указывает на структуру EditorColor. Если указанная строка или часть строки отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_GETINFO Получить информацию о редакторе. Param указывает на структуру EditorInfo.
ECTL_GETSTRING Получить информацию о строке. Param указывает на структуру EditorGetString. Полученная строка будет в кодировке редактора.
// получить первую строку редактируемого файла
struct EditorGetString egs;
egs.StringNumber=0;
Info.EditorControl(ECTL_GETSTRING,&egs);
ECTL_INSERTSTRING Вставить новую строку (разорвать строку) с текущей позиции курсора и переместить курсор либо на первую позицию новой строки, либо на позицию с учетом отступа. Если Param указывает на целочисленную переменную, равную 1, то при выполнении данной команды будет использоваться отступ. Для его отключения установите Param в NULL или установите целую переменную в 0. Поведение при отступе из плагина точно такое же, как и при нажатии <Enter> пользователем в редакторе, например, в новую строку пробелы (или табуляция) не вставляются, если после нового положения курсора строка не содержит никаких символов.
// вставить пустую строку без отступа
Info.EditorControl(ECTL_INSERTSTRING,0);
ECTL_INSERTTEXT Вставить текст, начиная с позиции курсора. Param указывает на строку в OEM кодировке, оканчивающуюся нулем (ASCIIZ). Команда корректно обрабатывает символ(ы) перевода строки (CR). Команда ECTL_INSERTTEXT работает так, как будто текст вводится с клавиатуры.
// вставить строку "Text" в текущую позицию курсора
Info.EditorControl(ECTL_INSERTTEXT,"Text");
ECTL_NEXTSTACKBOOKMARK Перейти на следующую позицию навигации. Param должен быть равен NULL.
Команда возвращает TRUE в случае успешного выполнения.
ECTL_OEMTOEDITOR Конвертировать текст из OEM-кодировки в кодировку редактора. Param указывает на структуру EditorConvertText.
ECTL_PREVSTACKBOOKMARK Перейти на предыдущую позицию навигации. Если после предыдущего вызова команды ECTL_ADDSTACKBOOKMARK не выполнялось операций с позициями навигации, то перед переходом запоминается текущая позиция редактора в качестве новой позиции навигации. Param должен быть равен NULL. Команда возвращает TRUE в случае успешного выполнения.
ECTL_PROCESSINPUT Передает структуру INPUT_RECORD, указатель на которую передается в Param, внутреннему редактору FAR для обработки.
Учтите, что если ваш плагин экспортирует функцию ProcessEditorInput, то данные из Param сразу же будут переданы в ProcessEditorInput. Схема проста:
case ECTL_PROCESSINPUT:
  if (ProcessEditorInput(Param))
    return(TRUE);
  ...
Поэтому используя EditorControl(ECTL_PROCESSINPUT) в функции ProcessEditorInput следите за тем, чтобы не впасть в бесконечную рекурсию.
ECTL_PROCESSKEY Функция позволяющая "нажимать" в редакторе различные клавиши, коды которых передаются в Param.
Используются внутренние коды клавиш FAR Manager (см. farkeys.hpp)
Эта команда всегда возвращает TRUE.
// перейти в конец редактируемого файла
Info.EditorControl(ECTL_PROCESSKEY,(void*)KEY_CTRLEND);
ECTL_QUIT Закрыть редактор. Любая несохраненная информация будет потеряна. Param должен быть равен NULL. Эта команда всегда возвращает TRUE.
ECTL_READINPUT Заполняет структуру INPUT_RECORD читая данные со стандартного устройства ввода. Param указывает на структуру INPUT_RECORD (она определена в Win32 API и используется в функции ReadConsoleInput).
ECTL_REALTOTAB Конвертировать реальную строковую позицию курсора в экранную позицию. Если строка не содержит символов табуляции, входная и получаемая позиция будут равными. Param указывает на структуру EditorConvertPos.
ECTL_REDRAW Перерисовать окно редактора. Param должен быть NULL.
ECTL_SAVEFILE Позволяет плагину сохранить редактируемый файл. Param указывает на структуру EditorSaveFile. Если Param равен NULL, то будут использованы имя редактируемого файла и текущий формат сохранения (DOS-формат - перевод строки заменяется на "\r\n", Unix-формат - "\n"). При успешном сохранении файла функция вернет TRUE.
ECTL_SELECT Выделить или снять выделение с блока. Param указывает на структуру EditorSelect.
ECTL_SETKEYBAR Функция, позволяющая управлять поведением строки функциональных клавиш в редакторе:
Param = NULL - восстановить, предыдущее значение
Param = -1 - обновить полосу (перерисовать)
Param = указатель на структуру KeyBarTitles.

Вызывать данную команду в событии EE_READ не имеет смысла, т.к. строки функциональных клавиш, как объекта, в момент загрузки файла в редактор еще не существует.
Команда возвращает TRUE в случае успешного выполнения или FALSE (когда строка, как объект, не создана).

ECTL_SETPARAM Изменение настроек текущего редактора. Param указывает на структуру EditorSetParameter.
Команда возвращает TRUE в случае успешного изменения параметров.
ECTL_SETPOSITION Установить позицию курсора. Param указывает на структуру EditorSetPosition.
ECTL_SETSTRING Поместить текст в строку. Param указывает на структуру EditorSetString. Помещаемая строка должна быть в кодировке редактора.
ECTL_SETTITLE DrawLine\DrawLine.cpp: Применена функция SetTitle()Установить заголовок редактора (верхняя статусная панель). Стандартный заголовок будет восстановлен после отработки плагина. Param указывает на строку, оканчивающуюся нулем, которая содержит текст заголовка.
// DrawLine\DrawLine.cpp: функция SetTitle
Info.EditorControl(ECTL_SETTITLE,(char *)GetMsg(IDTitle));
ECTL_TABTOREAL Конвертировать экранную позицию курсора в реальную строковую позицию. Если строка не содержит символов табуляции, входная и получаемая позиция будут равными. Param указывает на структуру EditorConvertPos.
ECTL_TURNOFFMARKINGBLOCK Убрать флаг редактора, который устанавливается всегда, когда пользователь осуществляет выделение вертикального или поточного блока. Этот флаг существует только для внутренних нужд FAR Manager и плагинами не используется, но пользователь может заметить негативные (в основном косметические) дефекты, когда он начал выделять блок и запустил (или это произошло автоматически) ваш плагин, который, например, изменил позицию курсора, поэтому вы почти всегда должны использовать данную команды перед передачей управления FAR, если ваш плагин изменил файл в редакторе или положение курсора.
Param должен быть NULL.
Param
Указывает на параметр команды. Смотрите описание Command.

Возвращаемое значение

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

Замечания

FAR обновляет содержимое окна редактора при активных действиях пользователя. Вызовите ECTL_REDRAW, чтобы принудительно обновить окно после любых активных изменений содержимого редактора.
Смотрите также:
AdvControl, Control