глобальный слом апи.

Разработка Far.
Locked
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

глобальный слом апи.

Post by zg »

планируется глобальный слом апи.
понятно, что хочется в последний раз. поэтому если у кого-то есть предложения именно по текущему апи, говорите не стесняйтесь. на текущий момент:
1. struct PluginInfo добавить поле GUID Id; поле обязательно к заполнению.
updated:

1.1. для OPEN_FINDLIST, OPEN_SHORTCUT, OPEN_COMMANDLINE, а также alt-shift-f9 из панели плагина — guid far'а.

1.2. не надо ли что-то сделать с DiskMenuNumbers? Сделали.
1.3. сюда же проблемы с историей и плагинами. или их уже нет?
2. struct PanelInfo добавить поля GUID Id, HANDLE hPlugin.
updated:

3. int WINAPI _export ProcessKeyW(HANDLE hPlugin,const INPUT_RECORD *Rec).
4. DN_KEY, DN_HOTKEY, DM_KEY: Param2 указывает на INPUT_RECORD. реализовано, но вылезли баги фара.починили.
5. ActlKeyMacro Reserved[3] -> Reserved[7]. это валентин попросил :) - см. п.24
6. struct WindowInfo добавить поле INT_PTR Id, для редакторов EDitorId, для просмотров ViewerID. четно говоря не помню, зачем, но вроде когда-то обсуждалось, что надо.
7. во все структуры добавить StructSize обязательное для заполнения.
8. DialogInfo:
. Owner — GUID плагина или фара. для фара — все нули наверное.

9. LONG_PTR Param в FarDialogItem. устанавливает начальное значение для DM_GETITEMDATA/DM_SETITEMDATA.

9.1 Reserved — что это?
9.2 Selected — возможно тоже во флаги?
9.3 ListPos — что это?
11. переделать struct KeyBarTitles:

12. Info.CmpName убираем.
13. FarMenuItem убираем, FarMenuItemEx переименовываем.
14. PanelMode:

15. OPIF_USEFILTER меняем на OPIF_DISABLEFILTER.
16. FCTL_GETCMDLINESELECTEDTEXT убираем.
17. Изменить функции *Control

18. pluginpanelitem changetime.
19. В OpenPluginInfo убрать поле Reserved, в конец добавить __int64 FreeSize - информация о свободном месте в эмулируемой файловой системе.
и добавить флаг OPIF_USEFREESIZE - плагин оповестит ФАР, что... при отсутствии этого флага поле не заполнено (т.е. не у всех плагинов возможно понятие "свободное место")

20. Добавить PluginHandle в InputBox (как везде) чтоб фар знал откуда топики хэлпа открывать (старый очень баг).
21. Объединить PluginPanelItem и FAR_FIND_DATA
22. Исторические фигни в plugin.hpp надо бы исправить (удалить): DM_SETREDRAW=DM_REDRAW и DM_SETTEXTLENGTH=DM_SETMAXTEXTLENGTH
23. Удалить ACTL_POSTKEYSEQUENCE. Есть аналог в лице ACTL_KEYMACRO. Заменить имя перечисления FARKEYSEQUENCEFLAGS на FARKEYMACROFLAGS (и KSFLAGS_* -> KMFLAGS_* ). Удалить struct KeySequence.
24. ACTL_KEYMACRO перенести в новую функцию MacroControl
25. Control переименовать в PanelControl. Дальше см. п.28
26. http://bugs.farmanager.com/view.php?id=1410 - Добавить флаг в OpenFilePluginW для распознавания архивных операций (ShiftF3)
27. Доделать Analyse. OpenFilePlugin заменить на Analyse+OpenOpugin, OpenOpugin/ClosePlugin переименовать в OpePanel/ClosePanel.
28. Вынести FCTL_*CMDLINE* в CCTL_*. Обработка ком.строки с помощью CmdLineControl()
29. Удалить (без замены) ACTL_GETPOLICIES и enum FarPoliciesFlags - не опубликовано, лишнее, неактуальное
30. Удалить , замена: новая команда ACTL_GETSETTING. и объединить в одно (с заменой префиксов на FSETS_)
31. привести к общему знаменателю возвращаемые значения для диалоговых мессаг.
32. все цвета к структуре:
33. апи для хранения настроек.
34. привести
35. SetDirectoryW должна передавать плагину не const wchar_t *Dir, а указатель на структуру.

36. надо бы починить http://bugs.farmanager.com/view.php?id=1699
37. переделать DM_LISTGETDATA

N-1. скорректированное Писание
N. привести стд.плагины к АПИ 3
User avatar
WARP ItSelf
Самый умный
Posts: 1011
Joined: Tue 15 Mar, 2005 23:19
Contact:

Re: глобальный слом апи.

Post by WARP ItSelf »

Да, и может не StructSize, а StructVerision?

P.S. И тут клавиши обсуждали (что часть внутренние, а часть VK_).
Никто не знал, а я...
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Re: глобальный слом апи.

Post by DiRTy_GaRRy »

Размер структуры, IMHO, не самый лучший вариант, так как размер может остаться прежним, а смысл разительно поменяться, вплоть до завалов.
Ы?
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: глобальный слом апи.

Post by zg »

WARP ItSelf wrote:Да, и может не StructSize, а StructVerision?
т.е. изначально там 0, и инкрементируется при любом брекинг изменении? что делать с существующими StructSize?
P.S. И тут клавиши обсуждали (что часть внутренние, а часть VK_).
3 и 4 пункты.
User avatar
WARP ItSelf
Самый умный
Posts: 1011
Joined: Tue 15 Mar, 2005 23:19
Contact:

Re: глобальный слом апи.

Post by WARP ItSelf »

В 2.x+ сломать все и проверять на 0/1/2/3/4, в 1.x игнорировать (подменять при конвертации на текущую).
Никто не знал, а я...
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: глобальный слом апи.

Post by ctapmex »

не знаю, относится ли это к слому API
хотелось бы иметь возможность задавать цвет фона в редакторе для строк, где нет текста, т.е. ниже конца файла.

а пункта 6 мне недавно очень не хватало, когда делаешь рестарт плагина, или наоборот его запускаешь, нужно узнать сколько редакторов открыто и создать под них структуры. Пришлось выкручиваться через EE_GOTFOCUS
User avatar
corwinnt
Posts: 92
Joined: Wed 03 Feb, 2010 14:31
Location: Днепропетровск, Украина
Contact:

Re: глобальный слом апи.

Post by corwinnt »

zg wrote:3. int WINAPI _export ProcessKeyW(HANDLE hPlugin,const INPUT_RECORD *Rec).
4. DN_KEY, DN_HOTKEY: Param2 указывает на INPUT_RECORD.
Рассуждая логически, если враппер пока не отрывается, то KEY_xxxx всё равно придётся поддерживать, куда ж от них... Тогда при наличии FSF.FarInputRecordToKey() и добавлении FSF.FarKeyToInputRecord(), переход сложностей не вызовет. Да и такой механизм нужен просто для компактности хранения данных в плагинах, которым важна только "кнопка", а не все данные из структуры.

Закономерный вопрос, будут ли в ProcessKeyW() передаваться кроме KEY_EVENT_RECORD события MOUSE_EVENT_RECORD, WINDOW_BUFFER_SIZE_RECORD, MENU_EVENT_RECORD, FOCUS_EVENT_RECORD, или это будет INPUT_RECORD, тупо сгенерированный из DWORD Key?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: глобальный слом апи.

Post by Skirda »

corwinnt wrote:Закономерный вопрос, будут ли в ProcessKeyW() передаваться кроме KEY_EVENT_RECORD события MOUSE_EVENT_RECORD, WINDOW_BUFFER_SIZE_RECORD, MENU_EVENT_RECORD, FOCUS_EVENT_RECORD, или это будет INPUT_RECORD, тупо сгенерированный из DWORD Key?
В принципе можно - есть LastEventRecord (но, судя по всему, с ним нужно будет немного попотеть)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: глобальный слом апи.

Post by Skirda »

sonar wrote:не знаю, относится ли это к слому API
хотелось бы иметь возможность задавать цвет фона в редакторе для строк, где нет текста, т.е. ниже конца файла.
Это можно без слома апи сделать ;-)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: глобальный слом апи.

Post by zg »

corwinnt wrote:Закономерный вопрос, будут ли в ProcessKeyW() передаваться кроме KEY_EVENT_RECORD события MOUSE_EVENT_RECORD, WINDOW_BUFFER_SIZE_RECORD, MENU_EVENT_RECORD, FOCUS_EVENT_RECORD, или это будет INPUT_RECORD, тупо сгенерированный из DWORD Key?
не в эту тему вопрос.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: глобальный слом апи.

Post by Skirda »

zg wrote:3. int WINAPI _export ProcessKeyW(HANDLE hPlugin,const INPUT_RECORD *Rec).
в свете того, что не всем пагинам "полезен" INPUT_RECORD, предлагается вот такой вариант:

Code: Select all

3. int WINAPI _export ProcessKeyW(HANDLE hPlugin,DWORD FarKey,const INPUT_RECORD *Rec).
Здесь "Клавиша" представлена сразу в двух ипостасях - как внутренний код, так и INPUT_RECORD.
ФАРу пофигу, а плагины могут игнорировать либо Rec либо FarKey.
Да, избыточно, но зато и овцы сыта и волки целк... :)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
corwinnt
Posts: 92
Joined: Wed 03 Feb, 2010 14:31
Location: Днепропетровск, Украина
Contact:

Re: глобальный слом апи.

Post by corwinnt »

zg wrote:не в эту тему вопрос.
Согласен. Это больше к целесообразности слома и реальной пользе от него. Меня больше интересовало сохранение KEY_xxxx и преобразование между ним и INPUT_RECORD в обе стороны. Хотя бы потому, что оперировать структурами в switch(Key) не слишком-то удобно.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: глобальный слом апи.

Post by zg »

Skirda wrote:в свете того, что не всем пагинам "полезен" INPUT_RECORD, предлагается вот такой вариант
валя, давай вот без этой чуши. есть FSF.FarInputRecordToKey, кому надо, вызовут вначале.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: глобальный слом апи.

Post by zg »

corwinnt wrote:Согласен. Это больше к целесообразности слома и реальной пользе от него.
там 7 пунктов только я написал. всё равно ломать надо. так уж заодно и просчёты первой версии убрать. а вообще почитай ченжлог, такое было не раз уже.
Меня больше интересовало сохранение KEY_xxxx и преобразование между ним и INPUT_RECORD в обе стороны. Хотя бы потому, что оперировать структурами в switch(Key) не слишком-то удобно.
зачем при предложенных изменениях в обе стороны?
User avatar
corwinnt
Posts: 92
Joined: Wed 03 Feb, 2010 14:31
Location: Днепропетровск, Украина
Contact:

Re: глобальный слом апи.

Post by corwinnt »

Skirda wrote:"Клавиша" представлена сразу в двух ипостасях - как внутренний код, так и INPUT_RECORD.
ФАРу пофигу, а плагины могут игнорировать либо Rec либо FarKey.
Да, избыточно, но зато и овцы сыта и волки целк... :)
А зачем? Плагины ведь всё равно переписывать. FSF.FarInputRecordToKey() есть. Зачем FAR тратить время и преобразовывать структуру в клавишу "на всякий случай"? Ведь плагин будет использовать только одну ипостась. Хочет KEY_xxxx, пусть сам конвертит, нужны "потроха" - пусть в структуре копается. А при добавлении FSF.FarKeyToInputRecord() вообще счастие наступит :roll:
Locked

Return to “Development”