Свойства и функции для работы с редактором - Макросы

Programming Far Manager plugins

Свойства и функции для работы с редактором

Свойства

ОператорТипОписание
Editor.FileName String полное имя редактируемого файла
Editor.Lines Number количество строк в редакторе
Editor.CurLine Number номер текущей строки
Editor.CurPos Number текущая позиция курсора в строке; учитывается размер табуляции
Editor.RealPos Number текущая позиция курсора в строке без привязки к размеру табуляции (табуляция считается за 1 символ)
Editor.Value Value

содержимое текущей строки в редакторе под курсором.

Например, показать текущий символ под курсором:

msgbox(substr(Editor.Value,Editor.CurPos-1,1),Editor.FileName,0)
Editor.SelValue String

содержимое выделенного блока.

Аналогично тому, как Far поместил бы в clipboard (блок текста с наличием crlf в конце строк).

Editor.State Number различные состояния текущего редактора - набор битовых флагов:
Значение Описание
0x00000001 файл совершенно новый либо его успели удалить
0x00000002 разрешено переключение на программу просмотра по F6
0x00000004 после закрытия редактора удалить файл
0x00000008 редактируемый файл модифицирован (в статусной строке редактора присутствует символ '*')
0x00000010

в наличии есть выделенный поточный блок

(альтернативный вариант - функция Editor.Sel(0,4))

0x00000020

в наличии есть выделенный вертикальный блок

(альтернативный вариант - функция Editor.Sel(0,4))

0x00000040 редактируемый файл изменялся в сеансе редактирования
0x00000080 курсор в режиме замены
0x00000100 позиция курсора была изменена плагином
0x00000200 редактор заблокирован (ReadOnly)
0x00000400 используются постоянные блоки
0x00000800 модальный редактор
0x08000000 FAR запущен с ключом /e
Например,
$If (Editor.State & 0x8) выполнить действия, если файл модифицирован $End

Функции

Функция Описание
E=editor.undo(Action) Работа с Undo/Redo. Здесь N - одно из:
ActionОписание
0начало блочной операции
1конец блочной операции
2выполнить Undo
3выполнить Redo
Возвращает 1 для успешно выполненной операции или 0 в случае ошибки.
E=editor.settitle([Title])

Установка заголовка в статусной строке редактора.

Если параметр Title отсутствует или равен пустой строке, то восстанавливается предыдущее значение статусной строки.

При показе заголовок будет усечён до размера, не затрагивающего служебную информацию (кодировка, позиция, etc.)

Возвращает 1 для успешно выполненной операции или 0 - редактор не в фокусе.

N=editor.pos(Action,Object[,Value])

Получение/установка позиций в редакторе.

Параметр Action задаёт поведение функции:

ActionОписаниеВозвращает (N)
0получить данныетекущее значение
1установить данные1/0 - успешно/неуспешно выполнена установка

Функция возвращает -1 в случае прочих ошибок (например, неверные параметры, или функция вызвана не из редактора).

Параметр Object - над чем выполняется операция:

ObjectОписание
1строка
2положение курсора в строке
3экранная позиция курсора
4новая строка вверху экрана
5позиция левой границы окна редактора
6режим вставки

Пример см. в разделе Примеры.

V=editor.sel(Action[,Opt]) Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке).
ActionОписание действия (в зависимости от значения Opt)
0получить параметры текущего блока
0вернуть номер строки начала блока
1вернуть номер позиции в строке начала блока
2вернуть номер строки конца блока
3вернуть номер позиции в строке конца блока
4

вернуть тип выделенного блока:

0 - блок не выделен, 1 - обычный блок, 2 - вертикальный блок

(альтернативный вариант - свойство Editor.State)

1позиционировать курсор внутри текущего блока
0установить курсор в начало отмеченного блока
1установить курсор в конец отмеченного блока

При позиционировании курсора состояние блока не изменяется.

2установка позиций блока
0отметить позицию начала блока
1отметить позицию конца блока

Позицией начала/конца блока считается текущая позиция курсора.

Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается.

Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.

3установка позиций вертикального блока
0отметить позицию начала вертикального блока
1отметить позицию конца вертикального блока

Позицией начала/конца блока считается текущая позиция курсора.

Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается.

Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.

4

снять выделение с блока.

Параметр Opt игнорируется.

Всегда возвращается 1.

В случае ошибки (в т. ч. функция вызвана не из "редактора") возвращаемое значение равно 0, иначе 1.

Для Action=0 возвращается запрошенное значение.


Например, повторим некоторые сочетания клавиш из Turbo-сред (макрос на сочетание Ctrl-K):

%k=waitkey(0,1);
$if(%k==B || %k==b || %k==CtrlB)
  editor.sel(2,0)
$else
  $if(%k==K || %k==k || %k==CtrlK)
    editor.sel(2,1)
  $else
    $if((%k==C || %k==c || %k==CtrlC) && Selected)
      CtrlC
    $else
      $if((%k==Y || %k==y || %k==CtrlY) && Selected)
        CtrlD
      $else
        eval("F1")
      $end
    $end
  $end
$end
V=editor.set(Option[,Value]) Получить/изменить настройки текущей копии редактора.
OptionТип ValueОписание
0NumberРазмер табуляции
1NumberПреобразование табуляции:
0 - не преобразовывать табуляцию
1 - преобразовывать все символы табуляции в пробелы
2 - преобразовывать новые символы табуляции в пробелы
2NumberПостоянные блоки
3NumberКлавиша Delete удаляет блоки. Если есть помеченный блок, Delete будет удалять этот блок, а не символ под курсором.
4NumberАвтоотступ. Включает режим автоотступа при вводе текста.
5NumberАвтоопределение таблицы символов
7NumberРазрешить перемещение курсора за пределы строки
8NumberПоведение клавиши BackSpace (TechInfo #13).
Задает поведение клавиши BackSpace в редакторе, когда выделен вертикальный блок. Если значение отлично от 0, то BackSpace удаляет вертикальный блок подобно клавише Delete.
9NumberПредставление кода символа под курсором в статусной строке (TechInfo #32)
Может принимать следующие значения:
0 - восьмеричное значение (3 символа с ведущим нулями)
1 - десятеричное значение (3 символа с ведущими пробелами)
2 - шестнадцатеричное значение (2 символа под цифру + символ 'h')
10NumberСохранять позицию файла
11NumberСохранять закладки
12StringСимволы разделители слов (TechInfo #1)
По умолчанию: ~!%^&*()+|{}:"<>?`-=\[];',./
14NumberAllowEmptySpaceAfterEof (TechInfo #67)
Окончание файла в редакторе всегда находится внизу экрана, если строк в файле больше чем строк экрана. При построчном скроллировании вниз (например, с помощью Ctrl-Down), скроллирование прекращается, когда показывается последняя строка.
Value может принимать следующие значения:
0 - прекратить скроллинг, если последняя строка внизу экрана
1 - продолжать скроллинг, при этом:
a) поместить курсор за пределы файла по прежнему нельзя
b) скроллинг с помощью Ctrl-Down сдвинет текст до курсора
15NumberПоказать полосу прокрутки в редакторе
16NumberРедактировать открытые на запись файлы
17NumberВыделять найденное - найденные последовательности будут выделены.
18NumberВести поиск с использованием регулярных выражений
19NumberCлово под курсором. При вызове диалога поиска/замены в строку поиска будет подставляться слово, на котором стоит курсор.
20NumberПоказывать в редакторе пробельные символы.

Значение Value может быть опущено или равно -1, в этом случае функция ничего не изменит, а вернёт текущее значение настройки.

Возвращает предыдущее значение опций или -1, если данные указаны некорректно, или функция вызвана не из редактора.

Значения опции 16 изменить нельзя.

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

clip(5) CtrlX %a=editor.set(2,1); Down CtrlV %a=editor.set(2,%a);
N=editor.delline([Line])

Удаление строки с номером Line. Если Line не указан или меньше 1, то удаляется текущая строка.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.

S=editor.getstr([Line])

Получить содержимое строки с номером Line. Если Line не указан или меньше 1, то возвращается текущая строка.

Возвращает строку с запрашиваемым номером.

N=editor.insstr([S[,Line]])

Вставить значение S после строки с номером Line. Если S не указан, то вставляется пустая строка. Если Line не указан или меньше 1, то вставляется в текущую строку.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.

N=editor.setstr([S[,Line]])

Заменить строку с номером Line на значение S. Если S не указан, то строка будет пустой. Если Line не указан или меньше 1, то заменяется текущая строка.

Позиция курсора в редакторе не меняется.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.

Удаление пустых строк:

$If(Selected)
  %StartLine=Editor.Sel(0, 0);
  %EndLine=Editor.Sel(0, 2);
$Else
  %StartLine=1;
  %EndLine=Editor.Lines;
$End

%Count=%EndLine-%StartLine+1;
%i=%StartLine;
Editor.Undo(0);
$Rep(%Count)
  $If(Len(Trim(Editor.GetStr(%i)))==0)
    Editor.DelLine(%i);
  $Else
    %i=%i+1;
  $End
$End
Editor.Undo(1);
Стековые закладки
Функция Описание
E=bm.push() Добавить закладку с текущими параметрами.
E=bm.pop() Восстановить параметры из последней закладки и удалить её.
E=bm.add() Добавить закладку с текущими параметрами и обрезать "хвост" (все закладки с индексом больше текущего).
E=bm.del([Idx])

Удалить закладку с указанным индексом Idx.

Если параметр Idx не указан или равен 0 - удаляется текущая закладка.

E=bm.clear() Очистить все закладки.
E=bm.next() Перейти на следующую закладку.
E=bm.prev() Перейти на предыдущую закладку.
E=bm.back()

Перейти на предыдущую закладку.

Если непосредственно перед ней была вызвана bm.add - добавить перед переходом закладку с текущими параметрами.

N=bm.goto([Idx])

Перейти на закладку с указанным индексом Idx.

Если параметр Idx не указан или равен 0 - переход на текущую закладку.

N=bm.get(Idx,Param)

Получить параметры закладки с индексом Idx. Idx=0 - текущая закладка.

Параметр Param может быть одним из следующих:

ParamОписание
0номер текущей строки
1номер текущей колонки
2номер первой видимой колонки на экране
3номер первой видимой строки на экране
N=bm.stat([Param])

Получить информацию о закладках.

Параметр Param может быть одним из следующих:

ParamОписание
0текущее количество закладок
1индекс текущей закладки (возвращает 0 если закладок нет)

Пример работы с закладками:

Для редактируемого файла newarc.ModuleManager.cpp вставляет в начало
#ifndef __NEWARC_MODULEMANAGER_CPP__
#define __NEWARC_MODULEMANAGER_CPP__
в конец
#endif //! __NEWARC_MODULEMANAGER_CPP__
при наличии строки "#pragma once" в начале файла, строки вставляются после неё.

%d = "__" + UCase(Replace(FSplit(Editor.FileName,12),".","_"))+"__";
bm.add()
CtrlHome
$If (LCase(Trim(Editor.Value))=="#pragma once")
  Down
$End
print("#ifndef " + %d + "\n\t#define " + %d + "\n")
CtrlEnd
Enter
Home
print("#endif //! " + %d + "\n")
bm.next()
bm.del()

  

Замечания

  1. Нумерация строк в редакторе начинается с 1.
  2. Нумерация колонок (позиций курсора в строке) начинается с 1.
  3. Нумерация закладок начинается с 1.
Смотрите также: