Page 1 of 2

Grabber API

Posted: Tue 20 Jan, 2015 11:06
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 - размер.

Замечания, предложения?

Grabber API

Posted: Tue 20 Jan, 2015 11:28
by John Doe
Skirda wrote: Замечания, предложения?
В данном виде толку от апи немного. Линейку например не поможет нарисовать.

И не проще ли тогда отдать координаты граббера макросам?
А из макроса уже элементарно вызвать плагин, без специального апи.

Grabber API

Posted: Tue 20 Jan, 2015 11:39
by Skirda
John Doe wrote:И не проще ли тогда отдать координаты граббера макросам?
Координаты чего? Курсора? Области? А остальные данные?
John Doe wrote:А из макроса уже элементарно вызвать плагин, без специального апи.
Как плагин поймёт, что от него хотя поточный блок (например)?

Grabber API

Posted: Tue 20 Jan, 2015 11:49
by John Doe
Skirda wrote: Координаты чего? Курсора? Области? А остальные данные?
Прежде всего области. Можно и курсора.
Остальные данные сравнительно легко получить посредством winapi.
Skirda wrote: Как плагин поймёт, что от него хотя поточный блок (например)?
Эта информация должна быть доступна макросу, остальное дело техники.

Grabber API

Posted: Tue 20 Jan, 2015 12:02
by John Doe
Предлагаю подумать, что существенного даёт плагинам предлагаемое апи.
Я вижу два плюса:
— после установки плагин будет работать без ручного вызова из меню, без всяких макросов.
— плагин упрощается за счёт избавления от необходимости самостоятельно реализовывать выбор области (обратная сторона: так не получится выделить что-то в буфере за пределами фара, нельзя добавить линейку и т.д.)

Grabber API

Posted: Tue 20 Jan, 2015 12:38
by HaRT
John Doe wrote: выделить что-то в буфере за пределами фара
Хотелось бы иметь возможность копировать в виде HTML/RTF/картинки не только из окна Фара, но и из „скролбэка“.

Grabber API

Posted: Tue 20 Jan, 2015 13:06
by zg
Skirda wrote:Как плагин поймёт, что от него хотя поточный блок (например)?
сам реализует выделение.
в целом бессмысленное предложение, всё это и даже больше можно сделать и так.

Grabber API

Posted: Tue 20 Jan, 2015 13:46
by Skirda
zg wrote:в целом бессмысленное предложение, всё это и даже больше можно сделать и так.
т.е. ты предлагаешь это всё (HTML/RTF/BMP/BBCode/etc) засунуть в ФАР?

Grabber API

Posted: Tue 20 Jan, 2015 13:49
by John Doe
Почему в фар, можно в плагин.
Без всякого АПИ.

Grabber API

Posted: Tue 20 Jan, 2015 14:24
by Skirda
Ну тогда закрывайте тему.
Ждем макросов и плагинов.

Grabber API

Posted: Tue 20 Jan, 2015 14:28
by John Doe
Skirda wrote: Ждем макросов и плагинов.
Почему бы вам не превратить имеющиеся наработки в плагин?

Grabber API

Posted: Tue 20 Jan, 2015 14:52
by Skirda
Так плагин уже есть. И автор жив.

Grabber API

Posted: Tue 20 Jan, 2015 15:02
by John Doe
Плагин не работает, по крайней мере в режиме /w.
В плагине не реализовано копирование html/rtf
Skirda wrote: Так плагин уже есть. И автор жив.
Да, автор читает форум.
Но игнорирует вопросы по плагину.

Grabber API

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

Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам.

Grabber API

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

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

John Doe, а как тебе видится "Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам"?

Grabber API

Posted: Thu 22 Jan, 2015 10:59
by John Doe
Skirda wrote: ...а макросы, кроме всего прочего (Put/Add), могут юзать и внутренний - Clip(5,2)).
Не вижу для чего может понадобиться в граббере внутренний.
Skirda wrote: а как тебе видится "Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам"?
Плагин передаёт SMALL_RECT, COORD, FAR_CHAR_INFO*, и в ответ фар заполняет буфер.

Только вопрос:
//координаты выделенного блока относительно начала экранного буфера
Почему не относительно фара?