Python adapter

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Wed 30 Dec, 2015 17:52

Не прошло и трёх лет, как у меня дошли руки набросать демо.

В аттаче пример для Python. Умеет добавлять пункт в меню плагинов и показывать сакральную фразу под панелями.
Attachments
pygin_20170617_c7e6d83.7z
(112.16 KiB) Downloaded 14 times

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Sun 14 Aug, 2016 13:50

Latest post of the previous page:

Это самого фар ограничение? Потому что терминологии Python такой штуки как __init__.py не существует - это же не модуль, а обозначение импортируемого package.

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

Python adapter

Post by John Doe » Sun 14 Aug, 2016 13:54

DrKnS wrote:Увы, нельзя - в терминологии фара папка плагином не бывает.
Это не должно помешать научить FarCmds загружать плагины из указанной папки, рекурсивно

User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Sun 14 Aug, 2016 14:34

techie wrote: Это самого фар ограничение?
Ну я вроде так и написал, "в терминологии фара", а не "в терминологии питона".

User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Sun 14 Aug, 2016 14:35

John Doe wrote: Это не должно помешать научить FarCmds загружать плагины из указанной папки, рекурсивно
Не должно.
Где Wishes на багтрекере, вы, наверное, в курсе.

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Sun 14 Aug, 2016 17:05

Так а как адаптер определяет, что перед ним плагин?

https://github.com/trexinc/evil-program ... in.cpp#L84

Far что, подсовывает адаптеру все файлы на тест по очереди?

User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Sun 14 Aug, 2016 17:48

techie wrote: Far что, подсовывает адаптеру все файлы на тест по очереди?
В шапке ссылка на тему с описанием принципа работы.

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Sun 14 Aug, 2016 18:33

Ссылки на GitHub в шапке не хватает. )

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Mon 15 Aug, 2016 14:03

При обновлении Python 3.5.1 до 3.5.2 все копии Far молча закрылись. Так и надо? =/

User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Mon 15 Aug, 2016 20:26

Ну вот такой у них умный инсталлер.

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Fri 28 Apr, 2017 03:54

4900 крэшится через раз при загрузке вот такого плагина.

Code: Select all

__title__ = "Python Recorder"

def GetGlobalInfoW(info):
    global __title__
    info["Title"] = __title__
    info["Author"] = "Far group"
    info["Desc"] = "Python plugin example"
    info["Guid"] = "31A0D11E-B9D8-4A9B-88C7-2D2983802C51"

def GetPluginInfoW(info):
    global __title__
    info["MenuString"] = __title__
    info["Guid"] = "DAF1257B-E011-4B5A-B5DC-732581BDF3BA";

def OpenW(info):
    print("Hello Python World\n")
Attachments
clipcrop.png
clipcrop.png (8.02 KiB) Viewed 958 times

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Fri 28 Apr, 2017 04:45

После обновления до последнего pygin.7z (379105) теперь вылет на другой функции. Тоже через раз.
clipcrop01.png
clipcrop01.png (8.14 KiB) Viewed 952 times
Ещё бывает такое:
clipcrop02.png
clipcrop02.png (5.09 KiB) Viewed 952 times

User avatar
DrKnS
Posts: 4561
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Python adapter

Post by DrKnS » Fri 28 Apr, 2017 08:11

- 4900 был давно.
- 379105 - это что? Последний в гите.
- гуиды надо иметь свои.
- у меня вроде бы всё работает.

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Fri 28 Apr, 2017 10:40

379105 - это размер архива pygin.7z Не знаю как по-другому идентифицировать. Смена гуидов ничего не дала. Сейчас попробую с последней сборкой Far'а.
Last edited by techie on Fri 28 Apr, 2017 10:40, edited 1 time in total.

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Fri 28 Apr, 2017 11:09

Не помогло. Вот что выводит, если кнопку Stack нажать.



Это 32-битная система, может в этом дело? Или в конфликтах с Python garbage collector?

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Wed 03 May, 2017 08:23

Скачал PDB, подложил в %FARHOME%. Теперь Stack вот такой:

Code: Select all

0x685D1DD0 Free
0x685C99FA Free
0x685D23BD Free
0x0116F953 Plugin::ExecuteFunctionSeh<Plugin::ExecuteStruct<0,1>,GlobalInfo * &> (c:\src\unicode_far\plclass.hpp:308)
0x0116D360 seh_invoke<<lambda_aea1a5ab9ab4599c75cf5767da215209>,<lambda_e653ac410c4258a6ce9d02fe87349247>,<lambda_c78e72e91534c6804eda7df20d644122> > (c:\src\unicode_far\f
0x0116BC50 Plugin::GetGlobalInfo (c:\src\unicode_far\plclass.cpp:798)
0x0116B5BA Plugin::LoadData (c:\src\unicode_far\plclass.cpp:581)
0x0118F4B8 PluginManager::LoadPlugin (c:\src\unicode_far\plugins.cpp:235)
0x011901FD PluginManager::LoadPlugins (c:\src\unicode_far\plugins.cpp:436)
0x01054134 ControlObject::Init (c:\src\unicode_far\ctrlobj.cpp:94)
0x0114BEF6 MainProcess (c:\src\unicode_far\main.cpp:227)
0x0114E635 mainImpl (c:\src\unicode_far\main.cpp:793)
0x0114E811 wmain_seh (c:\src\unicode_far\main.cpp:823)
0x0114E90E <lambda_93e8a75ad0d6631789a8313e38bae319>::operator() (c:\src\unicode_far\main.cpp:851)
0x0114E982 seh_invoke<<lambda_93e8a75ad0d6631789a8313e38bae319>,<lambda_eb6f9db54eb0b154dda06e08ba319848>,<lambda_b1c7d289a037a6c5b48976ae0d4fd300> > (c:\src\unicode_far\f
0x0114E8B1 main (c:\src\unicode_far\main.cpp:845)
0x011F771E __scrt_common_main_seh (f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253)
0x7719D3B1 BaseThreadInitThunk
0x77911527 RtlInitializeExceptionChain
0x779114FA RtlInitializeExceptionChain

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Wed 03 May, 2017 08:27

Про повторном запуске сверху добавилось ещё:

Code: Select all

0x66C0B1D4 PyUnicode_CopyCharacters
0x66C0B291 _PyUnicode_Ready
0x66BC0E66 PyWrapper_New
0x66BC1763 PyDict_New
0x66BC21F4 PyDict_GetItem
0x685D04E7 Free
0x685C8E50 Free
0x685C993F Free
0x685D23BD Free
0x0116F953 Plugin::ExecuteFunctionSeh<Plugin::ExecuteStruct<0,1>,GlobalInfo * &> (c:\src\unicode_far\plclass.hpp:308)
...

User avatar
techie
Posts: 753
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 26 times
Been thanked: 2 times

Python adapter

Post by techie » Wed 03 May, 2017 09:10

Лог запуска в appverif.exe -
Far.exe.0.dat.xml
(3.39 KiB) Downloaded 8 times
. Наверное, нужны символы для pygin, чтобы нарыть больше инфы?

Post Reply

Return to “Разработка плагинов”