FAR Portable proof-of-concept

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

Previous topic - Next topic

Martin

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 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

Martin

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...

pepak

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 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.

Martin

[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ě nebo stručné v angličtině.

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

pepak

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.

pepak

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.

pepak

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.

Martin

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.

pepak

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.

pepak

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

Martin

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í.

pepak

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).

pepak

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...

Martin

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í.

pepak

Moc mě nenapadá, proč by změny v 004 měly mít takový efekt. No nic, budu zkoumat dál.

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