Grabber API

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

Grabber API

Postby Skirda » Tue 20 Jan, 2015 11:06

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

Как?

"Граббим" экран (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: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 11:28

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

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Grabber API

Postby Skirda » Tue 20 Jan, 2015 11:39

John Doe wrote:И не проще ли тогда отдать координаты граббера макросам?

Координаты чего? Курсора? Области? А остальные данные?
John Doe wrote:А из макроса уже элементарно вызвать плагин, без специального апи.

Как плагин поймёт, что от него хотя поточный блок (например)?
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 11:49

Skirda wrote:Source of the post Координаты чего? Курсора? Области? А остальные данные?
Прежде всего области. Можно и курсора.
Остальные данные сравнительно легко получить посредством winapi.

Skirda wrote:Source of the post Как плагин поймёт, что от него хотя поточный блок (например)?
Эта информация должна быть доступна макросу, остальное дело техники.

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 12:02

Предлагаю подумать, что существенного даёт плагинам предлагаемое апи.
Я вижу два плюса:
— после установки плагин будет работать без ручного вызова из меню, без всяких макросов.
— плагин упрощается за счёт избавления от необходимости самостоятельно реализовывать выбор области (обратная сторона: так не получится выделить что-то в буфере за пределами фара, нельзя добавить линейку и т.д.)

User avatar
HaRT
Moderator
Posts: 7908
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 63 times
Been thanked: 94 times

Grabber API

Postby HaRT » Tue 20 Jan, 2015 12:38

John Doe wrote:Source of the post выделить что-то в буфере за пределами фара
Хотелось бы иметь возможность копировать в виде HTML/RTF/картинки не только из окна Фара, но и из „скролбэка“.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5203
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 40 times
Contact:

Grabber API

Postby zg » Tue 20 Jan, 2015 13:06

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Grabber API

Postby Skirda » Tue 20 Jan, 2015 13:46

zg wrote:в целом бессмысленное предложение, всё это и даже больше можно сделать и так.

т.е. ты предлагаешь это всё (HTML/RTF/BMP/BBCode/etc) засунуть в ФАР?
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 13:49

Почему в фар, можно в плагин.
Без всякого АПИ.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Grabber API

Postby Skirda » Tue 20 Jan, 2015 14:24

Ну тогда закрывайте тему.
Ждем макросов и плагинов.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 14:28

Skirda wrote:Source of the post Ждем макросов и плагинов.
Почему бы вам не превратить имеющиеся наработки в плагин?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Grabber API

Postby Skirda » Tue 20 Jan, 2015 14:52

Так плагин уже есть. И автор жив.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 15:02

Плагин не работает, по крайней мере в режиме /w.
В плагине не реализовано копирование html/rtf

Skirda wrote:Source of the post Так плагин уже есть. И автор жив.
Да, автор читает форум.
Но игнорирует вопросы по плагину.

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Tue 20 Jan, 2015 15:31

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

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Grabber API

Postby Skirda » Thu 22 Jan, 2015 09:29

Не, всё же нужно изменение в АПИ.
Плагин может воспользоваться 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!

User avatar
John Doe
Бюрократ
Posts: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Grabber API

Postby John Doe » Thu 22 Jan, 2015 10:59

Skirda wrote:Source of the post ...а макросы, кроме всего прочего (Put/Add), могут юзать и внутренний - Clip(5,2)).
Не вижу для чего может понадобиться в граббере внутренний.

Skirda wrote:Source of the post а как тебе видится "Наверно требуется именно АПИ для получения содержимое фаровского буфера по заданным координатам"?
Плагин передаёт SMALL_RECT, COORD, FAR_CHAR_INFO*, и в ответ фар заполняет буфер.

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


Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest