Pepak.net Forum

Tematická diskuse => Software => Topic started by: Martin on January 15, 2011, 06:38:30 AM

Title: FAR Portable proof-of-concept
Post by: Martin on January 15, 2011, 06:38:30 AM
Ahoj,

asi jsem jeden z prvních, kteří vyzkoučeli program FakeReg a tak se chci podělit o zkušenosti s ním.

OS Windows 7 Ultimate 32 bit, FAR Manager 2.0 build 1789.
Používané pluginy :
AltHistory, ArcLite, Calc, Calendar, Colorer, ConEmu, DeepCompare, DialogTools, DirSync, DlgSelect, EditFind, Editor (Align, Autowrap, Brackets, Drawline, Editcase), EnvMan, FarCmds, FolderMan, HexEdit, CharacterMap, LookDBF, MacroFile, MacroView, PanelTabs, PlugMenu, QuickSearch, RegEdit, RESearch, SameFolder, Sniffer, TrueBranch, UCharMap.

Běžně startuji FAR z prostředí ConEmu (mám k tomu několik dobrých důvodů) a to bylo první, čeho jsem se musel vzdát. Ale pro přenosnou verzi na flashce to není nezbytné.

Pluginy, které pracují částečně nebo vůbec :

AltHistory - do souborů *.hst se neukládají nové informace z registrů, jinak funguje.
EnvMan - funguje nastavení proměnných tak, jak bylo naposledy uloženo do *.reg souboru, ale nelze je za běhu FARu modifikovat. To bohužel dost využívám.
MacroView - nevidí žádná makra, přestože jich mám nadefinovaných asi 20. Makra fungují.
RegEdit - procházení *.reg souborů funguje, ale při pokusu kouknout do registrů končí fatální chybou "Terminate FAR" a musí se okno zavřít křížkem.

Vše ostatní se zdá, že funguje v pořádku.
Ještě musím podotknout, že mám *.exe a *.dll zkomprimované programem UPX (http://upx.sourceforge.net/) kromě FAR.exe (nejde to) a macrofile.dll (plugin se po zkomprimování nezavede).

Na závšr chci poděkovat autorovi za pěkný program. Martin
Title: FAR Portable proof-of-concept
Post by: Martin on January 15, 2011, 07:03:23 AM
Tak se musím zastydět za ty postesky o ConEmu. Chyba byla u mě.
Startoval jsem to takto
@Portable\FakeReg.exe Far.reg ConEmu\ConEmu.exe /cmd Far.exea mělo to být správně takto
@start ConEmu\ConEmu.exe /cmd Portable\FakeReg.exe Far.reg Far.exe
Jen tam nastane chybička při ukončení FARu, že se nezavře konzola sama a objeví se hlášení :

ConEmuC: Root process was alive less than 10 sec.                              
Press Enter to close console...
Title: FAR Portable proof-of-concept
Post by: pepak on January 15, 2011, 08:15:27 AM
Quote from: Martinasi jsem jeden z prvních, kteří vyzkoučeli program FakeReg a tak se chci podělit o zkušenosti s ním.
Pokud nejsi první, kdo to vyzkoušel, tak jsi první, kdo o tom podal zprávu. Což mě fakt překvapuje, čekal jsem spíš zapojení někoho z Ruska. Ale tím líp.

Díky za informaci o nefunkčních pluginech, pokusím se na ně postupně podívat.

QuoteAltHistory - do souborů *.hst se neukládají nové informace z registrů, jinak funguje.
To bude skoro určitě způsobené tím, že zatím neimplementuji funkci RegNotifyChangeKeyValue, takže se plugin nedozví, že ke změně došlo. To bude opravené "samo od sebe", jak postupně doplňuji funkce.

QuoteEnvMan - funguje nastavení proměnných tak, jak bylo naposledy uloženo do *.reg souboru, ale nelze je za běhu FARu modifikovat. To bohužel dost využívám.
To je pro tuto verzi FakeRegu schválně - je to úmyslně dělané tak, že se změny v registrech po ukončení FARu ztratí. Do budoucna plánuji upravit spouštěcí příkazy na některé funkce, jednou z nich bude i možnost zapnout uložení změněných registrů na konci programu.

QuoteMacroView - nevidí žádná makra, přestože jich mám nadefinovaných asi 20. Makra fungují.
Podívám se na to, ale nebyl bych překvapen, kdyby to bylo způsobené neimplementovanými funkcemi RegQueryKeyInfo. Jsou v plánu.

QuoteRegEdit - procházení *.reg souborů funguje, ale při pokusu kouknout do registrů končí fatální chybou "Terminate FAR" a musí se okno zavřít křížkem.
Tenhle plugin neznám. Chceš říct, že v něm jde otevřít export registru (soubor *.reg), jako kdyby to byl archív, a pak ho procházet? V tom případě je totiž pro mě záhadou, proč to nefunguje, protože souborové funkce nijak neovlivňuju - aspoň ne vědomě.

QuoteJeště musím podotknout, že mám *.exe a *.dll zkomprimované programem UPX (http://upx.sourceforge.net/) kromě FAR.exe (nejde to) a macrofile.dll (plugin se po zkomprimování nezavede).
To by nemělo mít vliv. Možná kdyby se podařilo zkomprimovat far.exe, to by mohlo činnost FakeRegu ovlivnit, ale ostatní snad ne.

QuoteNa závšr chci poděkovat autorovi za pěkný program. Martin
Zatím to není pěkný program, ale rád bych ho jednou do tohoto stavu dopracoval :-)

Díky za report.
Title: FAR Portable proof-of-concept
Post by: Martin on January 15, 2011, 08:19:51 PM
[h]EnvMan[/h]

Quote from: pepakTo je pro tuto verzi FakeRegu schválně - je to úmyslně dělané tak, že se změny v registrech po ukončení FARu ztratí.
To by mi vůbec u portable verze nevadilo, že se změny po ukončení FARu ztratí.
Pokud by měly být uloženy, tak jedině do toho REG souboru, ze kterého se načítají.
Osobně to určitě nevyužiji, ale potřeboval bych, aby změny "byly viditelné" po dobu spuštění FARu.
Pluginem EnvMan měním nastavení některých proměnných prostředí.
Konkrétní příklad - jen nastavením správného písmenka flashky v proměnné CLP si vytvořím komplet prostředí pro překlad programů v Clipper 5.01 :
╔═════════════════════ Edit environment entry ══════════════════════╗
║ Name: C5  - CLP, LIB, INCLUDE, OBJ a PATH           ↓ [x] Enabled ║
║                                                                   ║
║ CLP=W:\C5                                                         ║
║ LIB=%CLP%\LIB                                                     ║
║ INCLUDE=%CLP%\INCLUDE;%CLP%\MZDY                                  ║
║ OBJ=%CLP%\OBJ                                                     ║
║ PATH=%PATH%;%CLP%;                                                ║
║                                                                   ║
║                                                                   ║
║                        { Save } [ Cancel ]                        ║
╚═══════════════════════════════════════════════════════════════════╝
A takových pravidel mám více a mám je nějak předdefinované. A pak za běhu FARu jen malinkými úpravami si konfiguruji požadované prostředí. Nebo jen nastavením, zda je či není dané pravidlo "Enabled".

[h]RegEdit[/h]

Quote from: pepakTenhle plugin neznám. Chceš říct, že v něm jde otevřít export registru (soubor *.reg), jako kdyby to byl archív, a pak ho procházet?

Asi jsem se nepřesně vyjádřil, pokusím se to napravit. Informace o pluginu RegEdit lze získat buď  podrobné v ruštině (http://forum.farmanager.com/viewtopic.php?f=11&t=5580) nebo stručné v angličtině (http://code.google.com/p/conemu-maximus5/wiki/RegEditor).

Ano takovou vlastnost plugin má, je to ale až druhotná nebo vedlejší funkce. A ta pracuje naprosto v pořádku. Hlavním cílem pluginu je ale umožňit prohlížet a editovat registry systému Windows. A tam to končí tou fatální chybou.
╔═══════════════════ Exception occurred ═══════════════════╗
║ Exception:   Access violation (read from 0x00530055)     ║
║ Address:     0x011FE6B0                                  ║
║ Function:                                                ║
║ Module:      C:\Program Files\Far\Far.exe                ║
╟──────────────────────────────────────────────────────────╢
║               { Terminate FAR } [ Debug ]                ║
╚══════════════════════════════════════════════════════════╝

Nevím, co se mohlo změnit. Ráno mi to takto padalo ihned a pokaždé, ale teď mě klidně nechá chvíli po registrech brouzdat i vytvářet a mazat klíče a zhavaruje až po nějakém čase. Ani jedno z šestnáctkových čísel chybové zprávy není přitom konstantní.

Tak jsem si mohl ověřit, že v hkcu\Software\Far2 a hkcu\Software\Far (tam má bohužel "natvrdo" uložené nastavení plugin LookDBF) mohu vytvářet a mazat klíče a že se to děje v izolovaném prostoru. Ale hodnoty původních ani nově vytvořených klíčů nemohu měnit. Jen je můžu zase smazat.
╔═══════════ RegEditor ═══════════╗
║ Operace byla dokončena úspěšně. ║
║       Value change failed       ║
║               aaa               ║
║ \HKEY_CURRENT_USER\Software\Far ║
?─────────────────────────────────?
║             { OK }              ║
╚═════════════════════════════════╝
To bude mít ten EnvMan stejný problém - nelze změnit hodnotu.

A určitě se to nedaří ani samotnému FARu - viz historie adresářů v paměti FARu a data z registru :
╔═══════════════════════ Folders history ════════════════════════╗
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins\FolderMan\Shell ▲
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins\FolderMan\User  ░
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins\EnvMan\0        ░
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins\FolderMan       ░
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins\EnvMan          ░
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Plugins                 ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far\Plugins\LookDBF          ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2\SavedDialogHistory      ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2\SavedHistory            ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2\SavedViewHistory        ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2\SavedFolderHistory      ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2\Cmdline                 ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far\Plugins                  ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far                          ▓
║  reg2:\HKEY_CURRENT_USER\Software                              ▓
║  reg2:\HKEY_CURRENT_USER\Software\Far2                         ▼
╚════════════════════════════════════════════════════════════════╝

REGEDIT4

[HKEY_CURRENT_USER\Software\Far2\SavedFolderHistory]
"Lines"=hex(7):43,3a,5c,00
"Types"="0"
"Locks"="0"
"Times"=hex:2e,8d,0b,91,d8,b4,cb,01
"Position"=dword:ffffffff

V ostatních částech registrů podle všeho funguje korektně a neizolovaně.

[h]AltHistory[/h]

Quote from: pepakTo bude skoro určitě způsobené tím, že zatím neimplementuji funkci RegNotifyChangeKeyValue, takže se plugin nedozví, že ke změně došlo.

A já bych si zase dovolil mít názor, že tento plugin pravděpodobně načítá data mj. z výše zobrazené větve (a dalších) a tam nic nového nenajde a nemá tudíž co zapsat do *.hst souborů.

To je pro dnešek snad už vše. Doufám, že brzy můžeme očekávat verzi s prvními úpravami. Díky moc. Martin
Title: FAR Portable proof-of-concept
Post by: pepak on January 16, 2011, 06:50:03 AM
Když teď o tom píšeš, tak si matně vybavuju, že jsem zápis do registru možná neotestoval. Podívám se na to.
Title: FAR Portable proof-of-concept
Post by: pepak on January 17, 2011, 06:28:13 PM
No jo, byla tam chyba, nepřepisovaly se už existující hodnoty. Asi zítra udělám druhou alfaverzi, kde by to mělo být OK.
Title: FAR Portable proof-of-concept
Post by: pepak on January 18, 2011, 06:21:04 PM
Zkus prosím tuhle verzi:
http://tmp.pepak.net/far-portable-alpha002.zip

Ta už podporuje Unicode a měla by mít v pořádku ty zápisy.
Title: FAR Portable proof-of-concept
Post by: Martin on January 19, 2011, 01:35:38 PM
Ahoj a díky,

plugin EnvMan nyní pracuje zcela bezchybně a to bylo pro mě nejdůležitější.

AltHistory a MacroView - stav nezměněn.

Regedit - nepravidelně havaruje tou fatální chybou. V drtivé většině případů při prvním pokusu vejít do větve hkcu\Software jak z hkcu tak i z hkcu\Software\Far2.

Pokud v reálném registru neexistuje větev hkcu\Software\Far2, tak ji nevidím ani ve virtuálním. Ale jakmile ji ve virtuálním založím, jsou hned vidět její všechny položky a v reálném registru se založí jako prázdná.

Při smazání celé větve hkcu\Software\Far2 ve virtuálním registru se tato smaže i v registru reálném.
Title: FAR Portable proof-of-concept
Post by: pepak on January 19, 2011, 02:13:31 PM
Quote from: MartinAltHistory a MacroView - stav nezměněn.
AltHistory podle mě fakt nefunguje kvůli tomu, že neimplementuji tu funkci RegNotifyChangeKeyValue. To se asi hned tak nezmění, protože zatím moc nevím, jak ji implementovat.

MacroView se budu muset podívat, ale nepřekvapilo by mě, kdyby to bylo neimplementovanou funkcí RegQueryInfoKey. Ta bude dostupná v příští verzi, takže uvidíme, jestli se to spraví.

QuoteRegedit - nepravidelně havaruje tou fatální chybou. V drtivé většině případů při prvním pokusu vejít do větve hkcu\Software jak z hkcu tak i z hkcu\Software\Far2.
OK, nainstaluju plugin a vyzkouším. Také by to mohlo souviset s dosud chybějícím RegQueryInfoKey. Ale i když to tak bude a podaří se to opravit, lze očekávat, že se vstup do HKCU\Software bude vždy chovat poněkud zvláštně, protože není podporováno míchání opravdových a simulovaných klíčů (a k tomu právě dochází v HKCU\Software, kde se většina klíčů bere "reálných", ale FAR2 by měl být simulovaný.

QuotePokud v reálném registru neexistuje větev hkcu\Software\Far2, tak ji nevidím ani ve virtuálním.
To je docela jistě způsobené tím mícháním klíčů a bohužel to tak bude i nadále.

QuoteAle jakmile ji ve virtuálním založím, jsou hned vidět její všechny položky a v reálném registru se založí jako prázdná.
Založit v reálném registru by se neměla, ale to ostatní je v pořádku. Zkontroluji.

QuotePři smazání celé větve hkcu\Software\Far2 ve virtuálním registru se tato smaže i v registru reálném.
To bude počítám také souviset s předchozím problémem.
Title: FAR Portable proof-of-concept
Post by: pepak on January 20, 2011, 07:45:45 PM
Doplnil jsem do FakeRegu několik funkcí a zkusil to na pluginy, o kterých píšeš:

- RegEdit - mě se chová naprosto správně, s výjimkou toho, že zatím nejde míchat klíče z opravdového a simulovaného registru. Ale třeba časem...

- MacroView - podle mě běží bez problémů.

- AltHistory - jak jsem si myslel, spoléhá se na RegNotifyChangeKeyValue, která zatím v simulovaném registru nedělá nic. To ještě dá dost práce nějak vyřešit.

http://tmp.pepak.net/far-portable-alpha003.zip
Title: FAR Portable proof-of-concept
Post by: Martin on January 21, 2011, 11:36:24 AM
Ahoj a díky za další vylepšenou verzi.

Regedit - ani po několika pokusech mi již ani jednou nezhavaroval. Zřejmě opraveno, děkuji. Míchání klíčů neřeším, do simulovaných nemá žádný smysl vůbec chodit a reálné fungují. Nejde sice přejmenovat klíč, ale jak jsem zjistil, tak to nefunguje ani bez použití Portable verze. Prosím případně o report do farovského fóra (moje angličtina je bohužel velmi slabá). Položky přejmenovat lze.
╔═══════════════ RegEditor ════════════════╗
║     Operace byla dokončena úspěšně.      ║
║         Can't copy/rename subkey         ║
║ Adjust current process privileges failed ║
║     SE_BACKUP_NAME, SE_RESTORE_NAME      ║
╟──────────────────────────────────────────╢
║                  { OK }                  ║
╚══════════════════════════════════════════╝

MacroView - funguje, dokud se nedělají změny do registru. Třeba při deaktivaci makra (přejmenovává se klíč např. z AltF11 na ~AltF11) zbude z původních tří položek (Description, DisableOutput, Sequence) jen jedna (Sequence). A při pokusu o reaktivaci zmizí i tato. Podobně se chová i při pokusu změnit sekvenci nebo popis. V Portable verzi mi stačí, že si ta makra mohu prohlédnout. Jinak zakládat nová makra a mazat stará jde bez problémů, zlobí to jen při změně.

AltHistory - nebolí mě, na svém PC sice využívám hojně, ale u přenosné verze bohatě vystačím s klasickou historií.

Tak ještě jednou dík a myslím, že příští verze už by nemusela mít v názvu "alpha". Pro běžné cestovní použití je již nyní zcela vyhovující a stabilní.
Title: FAR Portable proof-of-concept
Post by: pepak on January 21, 2011, 12:01:16 PM
Quote from: MartinMacroView - funguje, dokud se nedělají změny do registru. Třeba při deaktivaci makra (přejmenovává se klíč např. z AltF11 na ~AltF11) zbude z původních tří položek (Description, DisableOutput, Sequence) jen jedna (Sequence). A při pokusu o reaktivaci zmizí i tato. Podobně se chová i při pokusu změnit sekvenci nebo popis. V Portable verzi mi stačí, že si ta makra mohu prohlédnout. Jinak zakládat nová makra a mazat stará jde bez problémů, zlobí to jen při změně.
Tohle budu potřebovat podrobněji. Já jsem si to včera zkoušel tak, že jsem nechal zobrazit seznam maker, pak jsem jedno přejmenoval (Description) a uložil, a tvářilo se mi to OK. Jakou přesně sekvenci kroků mám udělat, aby se chyba projevila?

QuoteTak ještě jednou dík a myslím, že příští verze už by nemusela mít v názvu "alpha". Pro běžné cestovní použití je již nyní zcela vyhovující a stabilní.
Myslím, že ne - teď jsem zjistil, že mi nějak nefungují asociace (spustit Notepad můžu, odentrovat Notepad.exe taky, ale když zkusím odentrovat xyz.txt, tak dostanu chybu Cannot Execute).
Title: FAR Portable proof-of-concept
Post by: pepak on January 23, 2011, 11:48:12 AM
http://tmp.pepak.net/far-portable-alpha004.zip

To MacroView je fakt záhada. Vím tam o dvou podivnostech, ale nedaří se mi najít žádnou příčinu:

1) V seznamu maker se normálně zobrazí název makra a jeho popis, ale když skočím do detailu, tak se v některých makrech popis nezobrazí. U jiných ano, včetně těch, které mají popis delší.

2) Když makro oedituju a jen v něm změním stav z aktivního na neaktivní, tak se někdy už do toho makra nedá dostat, zatímco jindy to jde. Zdá se mi, že to koresponduje s problémem 1.

Kdyby ses na to chtěl podívat, tak při použití parametrů -l a -ll jde zobrazit detailní záznam o volaných registrových funkcích (akorát je to dost pomalé, protože FAR registry fakt nešetří):
fakereg.exe -l debug.log -ll 0 far.reg far.exe
Jinak jsem ale opravil další dávku problémů, mimo jiné asociace...
Title: FAR Portable proof-of-concept
Post by: Martin on January 24, 2011, 08:07:22 AM
Ahoj a dík za další verzi.

Moje nové postřehy :

MacroView - mně se popis nezobrazuje pouze u makra SameFolder a pak u všech maker v oblasti "internal viewer" a "text editor". Ale když jdu do detailů znovu po změně popisu, tak už tam chybí. Občas se ztratí až po druhé změně popisu. Kromě toho se při tom v registru úplně ztratí položka DiasbleOutput. Stejně tak se mi položky ztrácejí při deaktivaci a reaktivaci makra, jak jsem psal již minule. To mně nedělá někdy, ale naprosto pravidelně. Zkusil jsem ten debug.log, bylo to příšerně pomalé a vyšel z toho soubor s cca 100 000 řádky, ze kterého nejsem o nic moudřejší.

Asociace - na to jsem nemohl přijít, jsem kombinovaný uživatel Faru a Total Commanderu, každý je v něčem lepší (alespoň pro mě) a asociace mám ve Faru úplně vypnuté.

RegEdit - zdá se, že data simulovaných položek se neustále velmi rychle "obnovují". Před editací řetězcové položky dostanu tuto chybu :
╔═════════════════════ RegEditor ══════════════════════╗
║             Jsou k dispozici další data.             ║
║               Query value data failed                ║
║                       Sequence                       ║
║ \HKEY_CURRENT_USER\Software\Far2\KeyMacros\Shell\Del ║
╟──────────────────────────────────────────────────────╢
║                        { OK }                        ║
╚══════════════════════════════════════════════════════╝
Ale pak to editovat jde i v pořádku uložit. (Všechny 4 verze FakeReg). Možná i to MacroView má někdy problém s načtením hodnot, ale jen to neohlásí.

Alpha004 mi bohužel přinesla další nefungující plugin PanelTabs. Hned při startu Faru dostanu chybové hlášení. Pod Alpha003 byl plugin plně funkční.
╔═ Error parsing macro Shell\RCtrl ═╗
║ Line 1, Pos 12:                   ║
║ Variable Expected 'PanelTabs'     ║
╟───────────────────────────────────╢
║ "callplugin(PanelTabs, 3)"        ║
║             ↑                     ║
╟───────────────────────────────────╢
║              { OK }               ║
╚═══════════════════════════════════╝
V registru mám k tomu toto:
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Consts]
"PanelTabs"=dword:a91b3f07

[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Shell\RCtrl]
"Sequence"="callplugin(PanelTabs, 3)"
"Description"="PanelTabs: select tab"
"DisableOutput"=dword:00000000

Zatím zůstávám u Alpha003, pro moje použití vyhovující a nehavarující.
Title: FAR Portable proof-of-concept
Post by: pepak on January 24, 2011, 05:46:14 PM
Moc mě nenapadá, proč by změny v 004 měly mít takový efekt. No nic, budu zkoumat dál.
Title: FAR Portable proof-of-concept
Post by: pepak on January 26, 2011, 04:12:54 PM
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é).
Title: FAR Portable proof-of-concept
Post by: pepak on January 31, 2011, 06:37:44 PM
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
Title: FAR Portable proof-of-concept
Post by: Martin on February 01, 2011, 10:35:05 AM
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).
Title: FAR Portable proof-of-concept
Post by: pepak on February 01, 2011, 10:44:56 AM
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.
Title: FAR Portable proof-of-concept
Post by: Martin on February 01, 2011, 11:54:27 AM
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 (http://www.rar.cz/far/messages.php?tid=513&pg=0). 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.
Title: FAR Portable proof-of-concept
Post by: pepak on February 01, 2011, 12:04:01 PM
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 (http://www.rar.cz/far/messages.php?tid=513&pg=0).
OK, mám ho. Večer se na to podívám.
Title: FAR Portable proof-of-concept
Post by: pepak on February 02, 2011, 05:02:57 PM
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.
Title: FAR Portable proof-of-concept
Post by: Martin on February 03, 2011, 11:01:08 AM
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í.