Mám další návrh na jednoduché vylepšení:
_Navigátor_ se seznamem funkcí, nebo sekce v IniFile, nebo objekty v DFM
atd...
Něco jako je v Delphi "Code Explorer", stačí to jednodušší...
Mám na stisk třeba F6, otevře se okno s ListBoxem [color=gray](nebo to
můžete mít jako další záložku vlevo v "Tool panel")[/color], kde je
seznam funkcí a objektů, na psaní z klávesnice vyhledává
[color=gray](komponenta TIncSearch)[/color], na OnClick nebo listování šipkou
v seznamu nastavuje pozici v Editoru na tu funkci, na OnDblClick nebo klávesou
Enter to vybere funkci a zavře seznam...
Ohromě to ulehčuje navigaci v delších unitách nebo v knihovnách
javascriptových nebo PHP funkcí... Sice to jde i Ctrl+Home, Ctrl+E
vyhledávat, ale když je tam stejný string víckrát, tak to je dlouhé
dohledat to správné místo s obsahem funkce a ne její volání...
[color=gray](Např. hledám "TEvalBitmap.CallFunc": F6,"bitmap.call",Enter...
Kdybych jenom hledal "bitmap.call" v textu, tak to je X-krát, když se ta
funkce volá, a pak někde jednou, když je deklarovaná...)[/color]
Když se seznam otevírá, stojí na té řádce, která je nejblíž
předchozí aktuální pozici v textu, a ta je vidět zhruba v polovině toho
ListBoxu. [color=gray]{např. TopIndex:=Max(ItemIndex-(Height div (16*2)),0);
při prvním zobrazení, a zachovat vrchní položku v ListBoxu při aktualizaci
seznamu...}[/color]
Takže na první pohled vidím seznam pár předchozích a následujících
funkcí a na pár šipek a Enter se přesunu na nějakou vedlejší funkci, nebo
šipka nahoru a dolu na začátek aktuální funkce...
-----
Přemýšlel jsem, jestli by to šlo uživatelsky konfigurovatelné přes ten
JScript, ale bylo by to složitější...
Napsal jsem vám na to unitu v Pascalu, je to buď ansi nebo unicode...
V Delphi 5 jsem to odladil a funguje to, v Rad Studio 10 to jde přeložit a
zřejmě by to fungovalo také, nebo si to můžete opravit...
TextNavig.zip (viz http://semi.gurroa.cz/TextNavig.zip )
Má to základní výpis navigačních bodů pro PAS, DFM, INI,
Javascript/C/PHP, a String navigator...
Zřejmě by se to vybralo podle high-lighteru? Případně by šly napsat
další, když mi pošlete ukázku...
Nevím, co by mělo být jako navigace v HTML, možná výpis elementů s name=
nebo id= atributy?
Pro HTML nebo XML by byl lepší TreeView...
type
// User callback function:
// Result: True=found/stop, False=continue
// Name is text for navigation list
// CP is 0-based offset in Text
TEnumNavigPoints=function(Arg: Pointer; const Name: String; CP: Longint):
Boolean;
//
// Various types of NavigPoint scanners:
TNavigPointScanner=function(const Text: String; const Enum: TEnumNavigPoints;
Arg: Pointer): Boolean;
// [IniFile] ...
function EnumIniNavigPoints(const Text: String; const Enum: TEnumNavigPoints;
Arg: Pointer): Boolean;
// Pascal
function EnumPasNavigPoints(const Text: String; const Enum: TEnumNavigPoints;
Arg: Pointer): Boolean;
// Dfm
function EnumDfmNavigPoints(const Text: String; const Enum: TEnumNavigPoints;
Arg: Pointer): Boolean;
// Js works for Javascript, PHP, EvalScript, C, ...
function EnumJsNavigPoints(const Text: String; const Enum: TEnumNavigPoints;
Arg: Pointer): Boolean;
// general strings:
function EnumPasStringNavigPoints(const Text: String; const Enum:
TEnumNavigPoints; Arg: Pointer): Boolean;
function EnumAnyStringNavigPoints(const Text: String; const Enum:
TEnumNavigPoints; Arg: Pointer): Boolean;
Asi by se ten seznam neměl aktualizovat na každé OnChange v Editoru, kdyby
byl otevřený nemodální, to by asi zdržovalo v psaní, to stačí v
OnActivate toho listu, nebo jednou při jeho zobrazení... [color=gray](pak je
otázka, jak v tom seznamu udržovat CP pozice v textu, když se něco mění a
seznam je otevřený...? Ono se dá jen projít ten seznam a aktualizovat
integer pozici následujících položek o delta změnu, což by zdržovat
nemuselo... Seznam může mít i přes 1000 položek u delších unit... U mě
to pro unitu 2.5Mb s 1800 funkcemi běží cca 60msec, nevím nakolik zdržuje
standardní TListBox a nakolik Editor, aby vytáhnul celý Text do jednoho
stringu... Aktualizovat na OnChange by to zdržovalo, leda by to jelo v jiném
threadu nebo s timerem na pár vteřin od poslední změny nebo KeyDown
...)[/color]
Stačilo by to i modální, je to jednodušší, že se to nemusí průběžně
aktualizovat...
--
<https://forum.pspad.com/read.php?1,73990,73990>
PSPad freeware editor https://www.pspad.com