Маски файлов в API

Разработка Far.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Маски файлов в API

Post by Shmuel »

changelog wrote:drkns 24.02.2012 14:27:51 +0200 - build 2488
1. Новая сущность: "группы масок файлов" (Options - Groups of file masks).
Произвольное количество масок файлов можно объединить в группу и присвоить ей имя.
В дальнейшем имя группы, заключенное в угловые скобки ("<имя>"), может использоваться везде, где могут использоваться сами маски.
Хотелось бы, чтоб плагины могли пользоваться функционалом фаровской маски файла в полном объёме (а не усечённом, как в ProcessName). Поскольку в Фаре всё это уже есть и используется из разных мест кода, то дать это ещё и плагинам не должно быть сложно.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Маски файлов

Post by Shmuel »

Помимо того, что это довольно мощный и полезный функционал, предоставление его плагинам обеспечит для пользователя везде одинаковый синтаксис масок. Например, для плагина LuaFAR Search пришлось написать свою ф-цию. Совпадение с синтаксисом фаровских масок получилось на уровне порядка 95%, что в общем-то устраивало. Но вот теперь, с появлением именованных групп и выражений - уже облом, так как их надо брать из Фара, а не делать свои.
Ну в общем - надеюсь.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

+1.

Мне то же самое пришлось в свое время написать в Фарнете. Тоже где-то примерно совпадает, но не на 100%. И тоже теперь облом (либо нужен АПИ получения груп этих масок, но это, имхо, извращение - в Фаре-то все уже есть, плагинам не следует изобретать велик).
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Маски файлов

Post by Shmuel »

DrKnS wrote:
Поигрался.
1. Общая просьба: патчи прикладывать как файлы, так как движок форума заменяет табы на спейсы и удаляет последний перевод строки.
2. Пропатченная функция прошла все мои тесты, так что уже хорошо.
3. На некоторых масках вылезает следующее:

Code: Select all

╔════════════ Warning ═════════════╗
║ File-mask string contains errors ║
╟──────────────────────────────────╢
║              { OK }              ║
╚══════════════════════════════════╝
Для плагинов это плохо. Плагин сам должен решать когда и какие сообщения выводить на экран. Я бы предложил добавить третье значение кода возврата (можно сделать enum для этого), то-есть примерно так:

Code: Select all

enum ProcessNameReturn {
    PNR_NOMATCH=0,
    PNR_MATCH=1,
    PNR_BADMASK=2
};
В дополнение к "троичному" коду возврата, можно добавить флаг, разрешающий/подавляющий вывод сообщений.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

А плагину точно необходимо знать, что фару маска пришлась не по нраву? Раньше вроде жили без этого как-то.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Маски файлов

Post by Shmuel »

Плагину может и не обязательно, а вот для пользователя это не одно и то же - не зря же "Find File" выводит это сообщение при ошибочной маске. То-есть сообщение-то полезное при обычной пользовательской работе, а вот при автоматическом тестировании оно просто подвешивает тесты, требуя ручного вмешательства.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Пока это было внутри Фара, это нормально, что диалог ошибки был забит в ф-ю. Но раз это становится АПИ, то диалог надо либо убрать (но тогда в Фаре использовать оберточную ф-ю, которая показывает диалог при ошибке), это наиболее грамотный вариант. Либо иметь возможность подавлять диалог. Менее красиво, но достаточно.

(В Фаре еще есть АПИ, который показывает диалоги при ошибках, жаловался давно, но не убедил. Если есть интерес, могу попробовать вспомнить, где это было).
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Маски файлов

Post by Shmuel »

Спасибо за 2513. Но... Неужели дополнительный код возврата (пусть даже без enum) может кому-то помешать? То, что раньше жили без этого - не аргумент, раньше жили и без телефонов, и без нового API.

Если проще - сейчас у плагинов отобрали как встроенное сообщение об ошибке в маске, так и возможность самому плагину это сообщение вывести.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Или такая задача плагина - нужно просто проверить маски, то есть допускается, что есть невалидные, но сама такая ситуация - валидная. Только вызывающий АПИ может знать нужен диалог или нет, и какое сообщение, да.

ИМХО, диалоги об ошибках из АПИ надо устранять и заменять на возврат флага или кода ошибок. Для сравнения - в Win32 АПИ где-нибудь диалоги об ошибках есть?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

Мне не сильно нравится новый код возврата тем, что ProcessName как бы BOOL, и если кто-то в коде делал так:

Code: Select all

if(fsf.processname(blabla))
{
   MyHadronCollider->Collapse();
}
- то условие тихо и незаметно сработает и для PNR_BADMASK тоже.

Можете считать паранойей, да.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

Это не проблема. Просто нужна новая ф-я с новой сигнатурой и документацией. Можно и не ломать, иметь 2 ф-ии, одну как было и одну продвинутую.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Маски файлов

Post by DrKnS »

NightRoman wrote:Для сравнения - в Win32 АПИ где-нибудь диалоги об ошибках есть?
Могу из фара SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX) убрать, сам посмотришь. :ha:
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

NightRoman wrote:Это не проблема. Просто нужна новая ф-я с новой сигнатурой и документацией. Можно и не ломать, иметь 2 ф-ии, одну как было и одну продвинутую.
Может даже лучше структуру в качестве параметра использовать. На случай расширений АПИ. Функция полезная и не такая тривиальная, может, еще что будет с ней развиваться в будущем.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Маски файлов

Post by NightRoman »

DrKnS wrote:Могу из фара SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX) убрать, сам посмотришь. :ha:
То есть вин апи позволяет подавить диалоги об ошибках? О том и речь. И что характерно, Фар, как пользователь этого АПИ, их подавляет. Но своим пользователям такую услугу не везде дает.

Если диалоги опциональны в дополнение к кодам ошибок, то нет проблем, пусть будут. Но в Фар апи (кое где) эти диалоги просто вбиты.
Post Reply

Return to “Development”