[Gelöst] Synedit Undo/Reundo speichern bei Dateiwechsel oder nach Programmende

Rund um die LCL und andere Komponenten
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Synedit Undo/Reundo speicher bei Dateiwechsel

Beitrag von Warf »

aro hat geschrieben:
Mi 18. Nov 2020, 23:54
Wenn man davon ausgeht, das die Speicherung und Wiederherstellung von Undo unter Lazarus derzeit gar nicht möglich ist, verwundern mich die Antworten nicht, denn es gab bisher überhaupt keine Alternative zu mehreren Instanzen.
Es geht mir mehr darum das du ein Problem optimierst was in der Realität gar kein Problem ist. Und da deine Optimierung ja nicht kostenlos ist (zum einen ist sie erstmal nicht trivial, der aufwand skaliert mit dem feature reichtum den du in deine editoren einbaust und daten auf die platte schreiben ist alles andere als kostenlos), löst du ein nicht existentes Problem da durch das du möglicherweise tausende neue Probleme einbaust.
Versteh mich nicht falsch, ich liebe dumme optimierungen für Probleme die nicht relevant sind. Ich benutze z.b. lieber advanced records als klassen wenn möglich, weil durch ihre stack lokalität ich damit eine allokation wegoptimieren kann. Die sachen auf die platte zu schreiben ist aber mMn. strikt schlechter, vor allem wenn dein zielrechner nicht mal ne SSD hat, dann wird beim wechseln durch tabs dein ganzer rechner massiv langsamer.

Aber ich mein drüber nachdenken schadet ja nicht und wenn am ende auch noch ein neues feature (undo liste speichern) rausfällt, ist das ja auch nix schlechtes
aro hat geschrieben:
Mi 18. Nov 2020, 23:54
3. Durch wenige Erweiterungen und Veränderungen, habe ich das Problem in kurzer Zeit, sehr zufriedenstellend gelöst!

Derzeit habe ich die Testphase noch nicht abgeschlossen. Es gibt ja fast unendlich viele Kombinationen, wie man den Text in Synedit verändern kann und alles will sorgfältig getestet werden.

Bei Interesse werde ich die geänderten Quelltexte veröffentlichen.
Ich fänds toll wenn du die Änderungen veröffentlichst, denn, unabhängig von deinem Problem, persistente undo listen sind in vielen fällen hilfreich, und z.b. das mit Abstand beste Featue von Editoren wie vim oder emacs das ich seit langem gesehen habe und ich finde jeder Editor könnte zumindest die Möglichkeit dafür vertragen (auch wenn man natürlich dafür ein paar vorkehrungen treffen muss damit das reibungslos funktioniert, z.b. die undoliste nur laden wenn sich seit dem nix geändert hat).

aro
Beiträge: 130
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
CPU-Target: 64Bit

Re: [Gelöst] Synedit Undo/Reundo speichern bei Dateiwechsel

Beitrag von aro »

Die erste Testphase ist abgeschlossen.

Es geht nicht nur um den Dateiwechsel in einem Editor. Sie können damit auch verschiedene Zwischenschritte zurückholen. Selbst nach mehreren Tagen, wenn das Programm beendet und der PC ausgeschaltet wurde!
Voraussetzung ist allerdings, das die maximale Anzahl der Undo - Aktionen nicht überschritten wurde. Aber die Zahl können Sie ja selbst nach eigenen Bedürfnissen hochsetzten.

Der Anhang enthält das Verzeichnis der Quellen, eine kurze Demo und eine Anleitung was ich geändert habe und wie die Komponente installiert wird.

Ich würde mich über Rückmeldungen freuen. Aber bitte keine Vorschläge mehr das mehrere Instanzen von Synedit die bessere Lösung währen. Wem es nicht gefällt, muss es ja nicht benutzen.
Dateianhänge
MySynEdit.tar.gz
(810.77 KiB) 62-mal heruntergeladen

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: [Gelöst] Synedit Undo/Reundo speichern bei Dateiwechsel oder nach Programmende

Beitrag von martin_frb »

Langfristig (im Moment keine Zeit) wäre ein undo streaming wünschenswert.

Da jede UndoAkiton als Klasse gespeichert ist, sollte so ein Streaming recht einfach machbar sein. (Mit der Einschränkung, dass der Text nicht verändert werden darf.)

aro
Beiträge: 130
Registriert: Di 26. Jul 2011, 19:58
OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
CPU-Target: 64Bit

Re: [Gelöst] Synedit Undo/Reundo speichern bei Dateiwechsel oder nach Programmende

Beitrag von aro »

Irrtum - das klappt unter Windows und Delphi, aber eben nicht unter Lazarus !
Die Ursache ist relativ klein, aber die Auswirkungen gravierend!

1. ist die Aufteilung in einzelne Units für Delphi ganz anders.
2. kann unter Lazarus nicht auf die Listen zugegriffen werden, da keine property dafür existiert.
3. selbst wenn man die property einfügen würde, könnte das nicht klappen, weil man in Lazarus nur auf die zuletzt angelegte Gruppe zugreifen kann.
Die Reihenfolge würde damit umgekehrt, sein und das ganze nicht mehr benutzbar.
4. In Lazarus wurden TSynEditUndoList, TSynEditUndoGroup als auch TSynEditUndoItem von TObject abgeleitet, womit automatisches Streaming schon mal ausfällt.
5. speichere ich sehr effektiv, und nur das was wirklich relevant ist. Dagegen wüstet das Streaming geradezu mit dem Speicher. Luxus hat eben seinen Preis. Längere Bearbeitungszeit und größere Dateien. Ich habe mich mit der Programmieren erst richtig beschäftigt, als ein PC noch 640 KiloByte Arbeitsspeicher hatte. Und in den passte das Betriebssystem, das Anwendungsprogramm und die dazugehörigen Datendateien. Und trotzdem lief das ganze mit Turbopascal zügiger als mancher heute vermuten würde.

Antworten