ActlKeyMacro & MCMD_CHECKMACRO

Разработка Far.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

Latest post of the previous page:

И еще вопрос: ошибка в самом начале макроса, мне вернули:
ErrPos.Y = 1
ErrPos.X = 0

То есть строки нумеруются с 1, а позиции с 0. Это так и задумано?

Сообщение, о котором я ворчал, показывает 1, 1 - похоже, "так и задумано", как бы Фар смирился. Может, щас хороший момент поправить? Либо все с 0 (я за этот подход ~ позиции в редакторе), либо все с 1.
User avatar
HaRT
Moderator
Posts: 9695
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 254 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by HaRT »

NightRoman wrote:Либо все с 0 (я за этот подход ~ позиции в редакторе)
В редакторе и строки, и столбцы нумеруются с единицы.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

HaRT wrote:
NightRoman wrote:Либо все с 0 (я за этот подход ~ позиции в редакторе)
В редакторе и строки, и столбцы нумеруются с единицы.
Точно? В АПИ? Может, я забыл, конечно. Пойду проверять.
Хорошо. Пусть тогда все будет с единицы, если это так.

UPD. EditorControl возвращает EditorInfo со строками и с колонками с 0. И по-моему в сишном АПИ - это абсолютно правильно. Но в целом, я за любой подход, лишь бы он был одинаковый везде по возможности.
User avatar
HaRT
Moderator
Posts: 9695
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 254 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by HaRT »

NightRoman wrote:Точно? В АПИ? Может, я забыл, конечно. Пойду проверять.
Пардон, я говорил про макросы.
К сожалению, в документации по API этот момент не уточнён.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

MPEC_EXPECTED - это... эээ... внутреняя ошибка парсера ;-) Даже не знаю, может ее не выводить... (я потом все подробно опишу)
вывод месага - да, это вроде как в режиме TODO, надо думать.
с позициями накосячил :-) для АПИ для плагинов это должно быть с 0, а в макросах и для юзеров, с 1.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

Skirda
Тогда все в целом движется, куда надо. Спасибо.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

NightRoman wrote:

Code: Select all

	MPEC_EXPECTED               = 7,
Странное имя ошибки... Если это не описка, можно пояснить, что за тип ошибки такой? Что-то ожидалось, но в коде этого не оказалось? И это что-то может быть разным, поэтому существительное опущено?
1. См. MMacroPErrExpected в farlang.templ.m4
2. syntax.cpp - поиск по "err_Expected"
3. давай свое написание константы ;-)
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: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

NightRoman wrote:Param.PlainText.Flags - не для этого?
Кхе... а вот про него то и забыли в свое время.
Для чекалки будет флаг KSFLAGS_SILENTCHECK = 0x00000001
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

Такие вещи в парсинге обычно токенами называются, единицы парсинга, так сказать. Так что:
MPEC_EXPECTED_TOKEN
А токен этот можно можно помещать в ErrSrc. Тогда все логично: позицию вернули, чего не хватает сказали.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

NightRoman wrote:Такие вещи в парсинге обычно токенами называются, единицы парсинга, так сказать. Так что:
MPEC_EXPECTED_TOKEN
А токен этот можно можно помещать в ErrSrc. Тогда все логично: позицию вернули, чего не хватает сказали.
Константу изменил, а ErrSrc - как ра то, что ты описал
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

когда проверка макроса отрабатывает успешно, кажется, что она не инициализирует структуру инфы об ошибке. это в какой-то мере нормально, когда будет задокументировано.

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

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

Я просто подумал, что результата функции AdvControl (true/false) будет достаточно.
Ок. будет "успех".
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

Skirda wrote:Я просто подумал, что результата функции AdvControl (true/false) будет достаточно.
Ок. будет "успех".
Да оно достаточно, все верно. Просто наличие кода ошибки "успех" приглашает вступить на граблю.. пример уже есть :)
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

С возвратом true\false в подобных АПИ тоже могут быть хитрые подходы и трактовки результата (но я не предлагаю так!) - например AdvControl может возвращать 0, если она не сработала вообще (ну, допустим, парсер в отдельном модуле и он не стартовал почему-то) и до парсинга даже не дошло. А вот если парсинг состоялся, то она возвращает 1, а уже результаты парсинга в структуре. А там может быть и ошибка, и успех.

P.S. Словом, раз уж есть код результата, его лучше в разумное значение устанавливать. А сама функа пусть что хочет возвращает, это уже вопрос реализации и документации.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by NightRoman »

Пара наблюдений вдогонку

1)
Если в реестре есть макрос с синтаксическими ошибками, то при загрузке Фар
покажет сообщение об этой ошибке, даже позицию в строке. Но ни имя хоткея, ни
область действия макроса не покажет. Придется как-то поиском в реестре
выяснять. Не фатальная проблема, но имя\область макроса не помешали бы в этом
сообщении при тотальной загрузке всех макросов:

Code: Select all

╔═══ Macro parsing error ════╗
║ Line 1, Pos 1:             ║
║ Unrecognized keyword 'яяя' ║
╟────────────────────────────╢
║ "яяя"                      ║
║  ↑                         ║
╟────────────────────────────╢
║             OK             ║
╚════════════════════════════╝
2)
MCMD_LOADALL в частности тоже будет показывать это сообщение для неизвестного
макроса. Но никак не сигнализирует об ошибке вызывающему по АПИ, только диалогом
в UI пользователю.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: ActlKeyMacro & MCMD_CHECKMACRO

Post by Skirda »

на мантис
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Development”