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

Разработка Far.
Maximus5
Posts: 3294
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 7 times
Contact:

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

Post by Maximus5 »

Latest post of the previous page:

Вопрос. смысл поля PanelInfo.StructSize, если фар:
1. его игнорирует (FCTL_GETPANELINFO)
2. его не заполняет.

Вообще-то, если уж плагин передает (а это нужно требовать, видимо) размер структуры, то фар как минимум не должен обнулять память свер этого размера.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

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

Post by Skirda »

Maximus5 wrote:Вопрос. смысл поля PanelInfo.StructSize,
что бы потом добавлять безболезненно новые поля без слома АПИ
Maximus5 wrote: если фар:
1. его игнорирует (FCTL_GETPANELINFO)
2. его не заполняет.

Вообще-то, если уж плагин передает (а это нужно требовать, видимо) размер структуры, то фар как минимум не должен обнулять память свер этого размера.
я бы это к багу отнес
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: 5 times

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

Post by Skirda »

А случаем никто не припомнит, захреном у нас PanelInfo::SelectedItemsNumber всегда равно 1, даже если нет реально помеченных файловых объектов?
Это к тому, что какое-то усложнение анализа получается. Писание:
PanelInfo.SelectedItemsNumber равно 1, если не выделено никаких элементов. В этом случае PluginPanelItem содержит данные для элемента под курсором. Если вы хотите узнать, действительно ли выделен этот файл, то проверьте у него состояние флага PPIF_SELECTED.
We are the Borg. You will be assimilated.
So Say We All!
Maximus5
Posts: 3294
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 7 times
Contact:

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

Post by Maximus5 »

Наверное, для совместимости. Imho - на фиг
User avatar
DrKnS
Posts: 5810
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 345 times

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

Post by DrKnS »

Видимо, для упрощения кода плагинов.
В фаре при отсутствии выделения все операции выполняются над текущим файлом, как если бы он был выделен.
Фича избавляет плагин от дополнительного кода типа:

if (!SelectedItemsNumber && current != "..")
{
ProcessFile(current);
}

как по мне - вполне нормальный ход, пусть живёт.
User avatar
SUSim
Posts: 1548
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 12 times

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

Post by SUSim »

спорный вопрос... но да пусть живет - просто другие парятся будут... но их меньше и они не фартим...
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13067
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 42 times
Been thanked: 319 times

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

Post by John Doe »

DrKnS wrote:как по мне - вполне нормальный ход, пусть живёт.
А у плагина есть возможность узнать наличие реально выделеных файлов?
User avatar
DrKnS
Posts: 5810
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 345 times

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

Post by DrKnS »

В цитате написано же.
User avatar
John Doe
Бюрократ
Posts: 13067
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 42 times
Been thanked: 319 times

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

Post by John Doe »

сорри
User avatar
Alexey Samlyukov
Posts: 1764
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

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

Post by Alexey Samlyukov »

А что у нас сейчас в AccelKey? для писания.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

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

Post by zg »

Alexey Samlyukov wrote:А что у нас сейчас в AccelKey? для писания.
уже FarKey. спасибо.
Maximus5
Posts: 3294
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 7 times
Contact:

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

Post by Maximus5 »

Есть предложение добавить FCTL_GETPANELCOLUMNS (и может быть выкинуть FCTL_GETCOLUMNTYPES, FCTL_GETCOLUMNWIDTHS). Чтобы возвращать не просто строку, а и уже распарсенную структуру, в том числе с текущими реальными ширинами колонок.
Для чего могут понадобиться колонки в строковом виде плагинам? Я что-то ни одного usecase придумать не могу. Они нужны для того, чтобы плагин выполнил мартышкин труд по разбору колонок. Так, например, поступает FarHints, ConEmu (приходится в плагине держать свой собственный парсер).

Видится мне что-то вроде

Code: Select all

struct ViewSettingsColumn
{
    UINT Type;      // ИД колонки (имя, расширение, размер, C0, и т.п.)
    UINT WidthType; // ячейки или проценты
    UINT Width;     // количество, указанное в настройке в WidthType
    UINT CurrentWidth; // реальное количество ячеек на экране
    size_t Flags; // выравнивание и прочее
    const wchar_t *AsString; // мож кому надо
};

struct GetPanelColumnsInfo
{
    size_t StructSize;
    struct ViewSettingsColumn PanelColumns[10];
    struct ViewSettingsColumn StatusColumns[10];
};
User avatar
DrKnS
Posts: 5810
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 345 times

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

Post by DrKnS »

Maximus5 wrote:

Code: Select all

struct GetPanelColumnsInfo
{
    size_t StructSize;
    struct ViewSettingsColumn PanelColumns[10];
    struct ViewSettingsColumn StatusColumns[10];
};
Только не [10], а *Columns + size_t ColumnsCount, мало ли.
Maximus5
Posts: 3294
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 7 times
Contact:

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

Post by Maximus5 »

По колонкам (в области стутуса) есть предложение дать расширенную возможность форматирования. Например обрамить значения фиксированными строками (префиксом/суффиксом). Т.е. добавить

Code: Select all

struct ViewSettingsColumn
{
    ...
    const wchar_t *Prefix, *Suffix;
};
Например, для удобочитаемости размера файла указывать его в фигурных кавычках. Или вообще, для многострочной области дать настроить что-то вроде

Code: Select all

File:    Far.exe
Version: 3.0 build 3000
Size:    2 004 496
Ну, предложение на будущее, но чтобы плагины не отвалились от изменения размера структуры - ставим '**'.

Code: Select all

struct GetPanelColumnsInfo
{
    size_t StructSize;
    size_t PanelColumnsCount;
    struct ViewSettingsColumn **PanelColumns;
    size_t StatusColumnsCount;
    struct ViewSettingsColumn **StatusColumns;
};
Maximus5
Posts: 3294
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 7 times
Contact:

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

Post by Maximus5 »

Глюк в struct PanelInfo
ItemsNumber и SelectedItemsNumber - size_t,
но CurrentItem и TopPanelItem почему-то int.
User avatar
Alexey Samlyukov
Posts: 1764
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

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

Post by Alexey Samlyukov »

едем дальше, определены макросы, например:
#define DlgList_AddString(Info,hDlg,ID,Str) Info.SendDlgMessage(hDlg,DM_LISTADDSTR,ID,(INT_PTR)Str)
(INT_PTR) уже устарело.

здесь же, настроек стало в разы больше чем определено в /defs/index.html

и еще:
есть пару мест, где Reserved не приведен к DWORD_PTR

далее. начал переписывать AdvControl, что теперь ждет ACTL_WAITKEY?
Locked

Return to “Development”