FAR Portable proof-of-concept

Started by Martin, January 15, 2011, 06:38:30 AM

Previous topic - Next topic

pepak

Ten efekt je primárně důsledkem zapnutého logování každé blbosti. Plus nějaké chyby v RegQueryValueEx, kterou ještě musím dohledat (ale to by nemělo být tak těžké).

pepak

Dalo to podstatně víc práce, než jsem čekal. Začal jsem tam dělat několik věcí najednou, mimo jiné thread-safe kód, a výsledkem bylo, že jsem sice nedosáhl threadové bezpečnosti, ale zato jsem získal nějaké šílené přepisování paměti, které jsem nebyl schopen lokalizovat. Tak jsem se na to nakonec vykašlal, skoro všechny změny od 0.04 zahodil a šel do toho znovu, ale tentokrát po malých kouskách. Mimo jiné jsem obětoval původní univerzální datovou strukturu a nahradil ji obyčejným TListem, který má sice spoustu nevýhod, ale jednu nezanedbatelnou výhodu: je nesmírně jednoduchý a snadno se ladí. Pokud mohu soudit, tak s tím zmizely všechny dosavadní problémy s MacroView apod. Prostě princip YAGNI zase vyhrál.

Prosím, vyzkoušej to ještě jednou, na co nejvíc pluginech - jak jsem přepsal ty podkladové datové struktury, tak to MOHLO rozhodit všechno možné i nemožné. Ale navenek se mi to teď jeví docela dobře. Sám to budu zítra zkoušet, tak uvidíme, k čemu dojdu.

Jo, a implementoval jsem funkci pro ukládání virtuálního registru při ukončování programu.

http://tmp.pepak.net/far-portable-alpha005.zip

Martin

Ahoj a díky, ale mám spíš špatné zprávy.

Mně se ta verze 5 chová bohužel ve všem, co jsem zatím zkusil zcela stejně jako 4. Tak to tady nebudu znovu podrobně rozepisovat. Zatím mi nejlépe "sedla" verze 3.

Trochu jsem zkoušel to ukládání virtuálního registru a líbí se mi a jeví se OK. Snad by se dalo vylepšit jen o setřídění registru před uložením a možnost vybrat formát výstupu (REGEDIT4 / REGEDIT5).

pepak

Quote from: MartinMně se ta verze 5 chová bohužel ve všem, co jsem zatím zkusil zcela stejně jako 4. Tak to tady nebudu znovu podrobně rozepisovat. Zatím mi nejlépe "sedla" verze 3.
I v tom MacroView? Ten jsem speciálně zkoušel a fungoval mi úplně v pohodě. Určitě tam máš pětku a ne nějaký pozůstatek čtyřky? Kdyžtak mi prosím zkus poslat ten podklíč registru, ve kterém máš makra, ať mám živý příklad, na kterém se to projevuje.

QuoteTrochu jsem zkoušel to ukládání virtuálního registru a líbí se mi a jeví se OK. Snad by se dalo vylepšit jen o setřídění registru před uložením a možnost vybrat formát výstupu (REGEDIT4 / REGEDIT5).
Setřídění registru jsem neudělal schválně. Jednak je to jednodušší (ale to bych přes srdce přenesl), ale hlavně to drží záznamy v tom pořadí, ve kterém do registru vstupovaly, takže se dá dobře porovnat starý a nový registr na změny.

Martin

Quote from: PepakUrčitě tam máš pětku a ne nějaký pozůstatek čtyřky?
Tak slaboduchý opravdu nejsem. Mám tam komplet FakeReg v0.05, pozůstatkem jsi myslel, že bych vyměnil třeba jen EXE a nechal staré DLL ? Ani to nemám projeté UPX (i když to jde a je to pak úplně stejně funkční i nefunkční jako nezkomprimované).
Quote from: PepakKdyžtak mi prosím zkus poslat ten podklíč registru, ve kterém máš makra, ať mám živý příklad, na kterém se to projevuje.
Klidně pošlu celý Far.reg, ale neumím to sem přidat (možná proto, že nejsem registrovaný). Chceš-li, tak mi pošli mail a pošlu registr v odpovědi. Nebo si stáhni stav "mého" Faru zde. Je to sice asi 2 měsíce staré, ale nic zásadního jsem neměnil. Snad jen aktualizoval pluginy na poslední verze a vyměnil 7Zip za ArcLite.

pepak

Quote from: MartinTak slaboduchý opravdu nejsem.
O to mi nešlo. Ale z vlastní zkušenosti vím, že člověk občas přehlédne úplně evidentní věci.

Quotepozůstatkem jsi myslel, že bych vyměnil třeba jen EXE a nechal staré DLL ?
Ano.

QuoteNebo si stáhni stav "mého" Faru zde.
OK, mám ho. Večer se na to podívám.

pepak

Stáhnul jsem si tvoji instalaci FARu z odkazu, který jsi psal, a začal jsem na něm zkoušet. Hned na začátku jsem udělal jednu úpravu do FarSave.reg, a to, že jsem na začátek doplnil větev pro FAR2 (aby FakeReg simuloval celý registr FARu, ne jenom těch pár větví, které jsou ve FarSave.reg uvedeny):
[HKEY_CURRENT_USER\software\Far2]

Při spuštění na mě FAR zařval s chybovou hláškou, kterou jsi mi napsal v příspěvku 14:
Error parsing macro Shell\RCtrl
Line 1, Pos 12:
Variable Expected 'PanelTabs'
"callplugin(PanelTabs, 3)"
Trochu jsem nad tím bádal, protože jsem v logu neviděl nic špatného, až jsem to příslušné makro hodil přímo do živých registrů a zkusil spustit tvůj FAR i s tímhle makrem. A on na mě zařval stejnou hlášku, přestože FakeReg tentokrát nebyl vůbec aktivní. Tudíž bych tuhle chybu připsal na vrub toho, že je to makro špatně zapsané. (Jak má být dobře netuším, makra používám jenom ta jednoduchá, kdy za mě FAR mačká klávesy).

Pak jsem začal zkoušet jednotlivé pluginy, které jsi hlásil:

MacroView
U "SameFolder" potvrzuju nezobrazený popis při F4. Totéž u Internal viewer, Text editor. Taky se mi po několikáté (asi třetí) editaci ztratil popis u makra pro Esc v panelech, ale jenom v editoru, v seznamu maker se zobrazuje stále. Totéž při deaktivaci makra, tam ale popis zmizel úplně, i ze seznamu.

Asociace
Tím myslím hlavně to, že na souboru, který má ve Windows nastavenou asociaci (např. na .txt - Notepad) zmáčknu Enter a měla by se mi spustit ta asociovaná aplikace. To se teď nedělá, ze stejného důvodu, proč se nedělala ve verzi 003 (asociace se zjištují přes OpenKey a ne OpenKeyEx, ten je volán až "vnořeně" - a to vede k zanoření handlu; to je problém v EasyHook knihovně a neumím to spolehlivě řešit, jenom docela hnusným hackem, který jsem do 005 zatím nedával).

RegEditor
Na skutečném registru mi funguje zřejmě ve všem.
Na virtuálním registru potvrzuju chybu při pokusu o editaci textové položky.

Viděl jsem tam nějaké pády v pluginu ConEmu, ale jenom v situaci, kdy jsem spustil FAR přímo, bez ConEmu, takže to bude asi nejspíš ten důvod. Jinak mi to nespadlo ani jednou (narozdíl od čtyřky).

Celkově jsem rád, že mám nějaké stabilní chyby, které mohu testovat, a že zřejmě zmizely neustálé pády všeho možného v důsledku přepsání paměti. Tebe bych jen poprosil, zkus se podívat na ten "panel tabs" plugin - podle mě je blbě zadané makro, ne to, jak se jeho parametry pod FakeRegem čtou.

Martin

Quote from: PepakHned na začátku jsem doplnil větev pro FAR2.
To jsem samozřejmě provedl taky (už 15.1.2011 v 3:47), hned jak jsem FakeReg začínal zkoušet. Ale na ULOZTO je 2 měsíce stará verze a pro import registrů to není potřeba, nadřazené větve se vytvářejí automaticky. Byl to záměr mít co nejmenší soubor FarSave.reg a v něm jen ty hodnoty, které nejsou implicitní. Zbytek ať si Far vyrobí v registrech sám.
[h]PanelTabs[/h]
To makro jsem nevymýšlel já, ale stáhl spolu s pluginem a je tak jednoduché, že na něm není co napsat špatně. A v pořádku fungovalo i pod verzemi FakeRegu 1, 2 a 3. Tobě v živých registrech nefungovalo asi proto, že sis tam hodil jen to makro, ale asi zapomněl na tu konstantu. Pod 4 a 5 bude fungovat taky, když v registru místo tohoto
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Consts]
"PanelTabs"=dword:a91b3f07
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Shell\RCtrl]
"Sequence"="callplugin(PanelTabs, 3)"
bude toto
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Shell\RCtrl]
"Sequence"="callplugin(2837135111, 3)"
To by se mohlo zdát, že tam ta konstanta není nebo je špatně, ale RegEditem ji tam vidím se správnou hodnotou.

Takže netuším a Tobě přeji hodně zdaru při dalším bádání.

Quick Reply

Note: this post will not display until it has been approved by a moderator.

Name:
Email:
Verification:
Please leave this box empty:
Type the letters shown in the picture
Listen to the letters / Request another image

Type the letters shown in the picture:
Shortcuts: ALT+S post or ALT+P preview