Grabber API

Разработка Far.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

По мотивам обсуждения граббера.
Смысл: пусть плагин помещает в клипборд нужные данные.

Как?

"Граббим" экран (Alt-Ins). После нажатия Enter формируется массив данных FAR_CHAR_INFO и передается плагину (OpenW).
Если плагин вернул NULL (или никто из плагинов не откликнулся на запрос), то ФАР сам помещает в буфер обмена подготовленные данные.
Иначе плагин помещает данные в буфер обмена в нужном формате (RTF, HTML, BMP, etc.) и возвращает 1 (в этом случае ФАР с клипбордом ничего не делает и вся ответственность на плагине).

Как это всё видится с точки зрения АПИ (для обсуждения)?

В OpenW передается OPEN_GRABBER (12) и структура GrabberInfo:

Code: Select all

struct GrabberInfo{
  size_t StructSize;           // размер структуры GrabberInfo
  FAROPENGRABBERFLAGS Flags;   // флаги
  SMALL_RECT Area;             // координаты выделенного блока относительно начала экранного буфера
  COORD SizeBuffer;            // размеры передаваемых данных (по высоте и ширине)
  FAR_CHAR_INFO *Buffer;       // данные
};
Area - в основном для BMP/DIB (простой путь, как в Руллере). Если плагин сам "рисует" картинку на битмапе на основе данных SizeBuffer & Buffer, то поле просто игнорируется.

Флаги FAROPENGRABBERFLAGS:
FOGF_STREAM - блок поточный (пока такого нет, на будущее), в этом случае SizeBuffer.Y=1, а SizeBuffer.X - размер.

Замечания, предложения?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Skirda wrote: Замечания, предложения?
В данном виде толку от апи немного. Линейку например не поможет нарисовать.

И не проще ли тогда отдать координаты граббера макросам?
А из макроса уже элементарно вызвать плагин, без специального апи.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

John Doe wrote:И не проще ли тогда отдать координаты граббера макросам?
Координаты чего? Курсора? Области? А остальные данные?
John Doe wrote:А из макроса уже элементарно вызвать плагин, без специального апи.
Как плагин поймёт, что от него хотя поточный блок (например)?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Skirda wrote: Координаты чего? Курсора? Области? А остальные данные?
Прежде всего области. Можно и курсора.
Остальные данные сравнительно легко получить посредством winapi.
Skirda wrote: Как плагин поймёт, что от него хотя поточный блок (например)?
Эта информация должна быть доступна макросу, остальное дело техники.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Предлагаю подумать, что существенного даёт плагинам предлагаемое апи.
Я вижу два плюса:
— после установки плагин будет работать без ручного вызова из меню, без всяких макросов.
— плагин упрощается за счёт избавления от необходимости самостоятельно реализовывать выбор области (обратная сторона: так не получится выделить что-то в буфере за пределами фара, нельзя добавить линейку и т.д.)
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Grabber API

Post by HaRT »

John Doe wrote: выделить что-то в буфере за пределами фара
Хотелось бы иметь возможность копировать в виде HTML/RTF/картинки не только из окна Фара, но и из „скролбэка“.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Grabber API

Post by zg »

Skirda wrote:Как плагин поймёт, что от него хотя поточный блок (например)?
сам реализует выделение.
в целом бессмысленное предложение, всё это и даже больше можно сделать и так.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

zg wrote:в целом бессмысленное предложение, всё это и даже больше можно сделать и так.
т.е. ты предлагаешь это всё (HTML/RTF/BMP/BBCode/etc) засунуть в ФАР?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Почему в фар, можно в плагин.
Без всякого АПИ.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

Ну тогда закрывайте тему.
Ждем макросов и плагинов.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Skirda wrote: Ждем макросов и плагинов.
Почему бы вам не превратить имеющиеся наработки в плагин?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

Так плагин уже есть. И автор жив.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

Плагин не работает, по крайней мере в режиме /w.
В плагине не реализовано копирование html/rtf
Skirda wrote: Так плагин уже есть. И автор жив.
Да, автор читает форум.
Но игнорирует вопросы по плагину.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Grabber API

Post by John Doe »

John Doe wrote: Координаты чего? Курсора? Области? А остальные данные?
FAR_CHAR_INFO плагин действительно может взять только у фара.
Без АПИ плагину придётся довольствоваться содержимым буфера консоли.

Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Grabber API

Post by Skirda »

Не, всё же нужно изменение в АПИ.
Плагин может воспользоваться FSF.CopyToClipboard, но этот функционал работает с реальным клипбордом (с очисткой предыдущего содержимого)
...а макросы, кроме всего прочего (Put/Add), могут юзать и внутренний - Clip(5,2)).

Может добавить пару новых функций в АПИ - FSF.CopyToClipboardEx(struct XXX*) и FSF.PasteFromClipboardEx(struct XXX*) ?

John Doe, а как тебе видится "Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам"?
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Development”