| |
|
|
Sven Bader | Auf Basis von Rolands Open Source XProfEd [...] habe ich eine an meine Bedürfnisse angepasste Version erstellt, welche ich im Sinne des Open-Source-Gedankens auch wieder zur Verfügung stellen möchte.
Herunterladen
Neue Funktionen in der SE-Version
- Parallelbetrieb von bis zu 10 Profan/XProfan Versionen, 1-Klick Wechsel der Version
- Profan2Cpp Integration
- Darkmode und erweitertes Syntaxhighlighting
- Integration von WinMerge, um Quelltexte zu vergleichen (Auswahl oder Dateien)
- Umfangreiche Versionierung/Sicherung von Quelltexten
- Verbesserte Tabs mit Icons und Schließen-Button
- Codeformatierung
- Ein-/Ausrücken, Ein-Auskommentieren und Codeformatierung mit einem Undo-Schritt
- Suchen und Ersetzen auch von Zeilenumbrüchen und Tabs
- Suchfeld in der Toolbar
- Suche automatisch in beide Richtungen
- Per Strg+Klick auf eine Funktion springt man direkt zum entsprechenden Proc oder Def
- Übersetzung von OpenGL Befehlen aus C++
- Farbkonvertierungen per Rechtsklickmenü
- Datei-Öffnen Menü zeigt direkt alle kompatiblen Dateien
- Live-Syntaxhilfe in der Statusleiste
- Farbvorschau in der Statusleiste
- Sprung zur letzten Position mit Strg+B
- F5 als Hotkey zur Aktualisierung der Navigation
- Navigationsspalte per Drag&Drop vergrößerbar
- Header-Dateien in Navigationsspalte öffnen auf Klick
- Kommentare für mehrere Zeilen setzen und entfernen
Bugfixes am Originalcode
- "Ausrücken" hat irgendwann den Code vorne gelöscht
- GetLine$-Funktion lieferte teilweise das letzte Zeichen nicht
- Performance Verbesserungen
|
|
|
| |
|
|
|
p.specht
| Sehr löblich! |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 17.08.2021 ▲ |
|
|
|
|
Sven Bader | Neu in Version 1.02:
1. Umschalten von XProfan Versionen Man kann recht schnell zwischen zwei Versionen hin und her schalten und hat hierzu jeweils einen Indikator in der Toolbar.
Ja, mein X4 Installationspfad ist merkwürdig
2. Integration von Profan2Cpp: Beim drücken von F6 wird das korrekte Profan2Cpp Projekt geöffnet, compiliert und gestartet. Voraussetzung ist lediglich eine .p2c - Projektdatei mit gleichem Namen wie die .prf. Der Projektname innerhalb der Datei sollte auch identisch sein. Die Sache ist über virtuelle Mausklicks im P2C-Fenster gelöst also Hände von der Maus nach dem Drücken von F6
Hier noch ein Beispiel wie man die compilierte Datei automatisch ausführen kann. Da ich sie auch noch in den Projektordner kopiere muss ich den Austausch der Ressourcen noch vorab forcieren.
Das Batch-Skript tum Copy & Pasten:
3. Kommentare von markierten Zeilen entfernen und hinzufügen, auch über Hotkeys. In alten Profan Versionen (oder wenn man Profan2Cpp verwendet) gibt es ja die /* */-Kommentare noch nicht. Die Funktion ist recht robust und löscht nicht weiter, falls keine Hochkommas vorhanden sind.
4. Die Farbgebung des Standard Farbschemas (hell) habe ich etwas überarbeitet.
5. Ordner automatisch wechseln. Beim Öffnen einer Datei oder Wechseln eines Tabs, wird jeweils das Arbeitsverzeichnis mit geändert, sodass bei Verwendung des Öffnen Dialogs der korrekte Ordner vorgewählt ist. Zudem lässt sich per Strg+Alt+E das jeweilige Verzeichnis einer geöffneten Datei im Explorer öffnen.
6. Unerwünschte Hotkeys blockiert. Mit passiert es bei Vertippern gelegentlich, dass unerwünschte Steuerzeichen im Quelltext liegen, da es hierzu Editor Hotkeys gibt, diese überlagere ich (Strg+N, P, Q) Strg+E habe ich vergessen, kommt im nächsten Build.
7. Zur letzten Position springen, die man bearbeitet hat Hierfür habe ich den Hotkey Strg+B eingeführt
8. Sprung zur angeklickten Funktion Per Strg+Klick wird automatisch zum entsprechenden Proc oder Def gesprungen, sofern diese in der gleichen Datei sind.
9. Bugfixes Ich habe nicht alle Fixes dokumentiert aber an der Quelltextformatierung z.B. bin ich eigentlich immer wieder mal dran und vermutlich habe ich den Liste hier sogar Features unterschlagen |
|
|
| |
|
|
|
Georg Teles | Sehr sehr gut endlich kann ich alle Compiler in ein ProfED Verzeichnis zusammenlegen
Sven Bader (28.09.2021)
Ja, mein X4 Installationspfad ist merkwürdig
zumindest hast du keine 5 Editoren
Zeile 2767 ( ShowToolbar(0) ) sollte vllt zur Zeile 2910 verschoben werden Das Hauptfenster ist da noch nicht sichtbar, sodass der Suchbutton der Toolbar ganz link erscheint, oder ist es nur bei mir so ?
Grüße |
|
|
| |
|
|
|
Georg Teles | Kleiner Nachtrag: Ab der Zeile 2316 müsste 6 Mal ein + "\\" + zwischen AppData und ProgSprache abgeändert werden
(Zeile 2316 bis einschließlich Zeile 2335 angepasst folgen
'$IFDEF VER14.0
RegKlasse$ = $AppDataDir + "\\" + ProgSprache$ + "\\" + pp$ + "\\" + ProgName$ + ".cfg"
' Falls neue Konfigurationsdatei noch nicht existiert, alte Datei an neue Stelle kopieren
IfNot FileExists(RegKlasse$)' Cfg-Datei ist noch nicht im AppData-Verzeichnis
IfNot DirExists($AppDataDir + "\\" + ProgSprache$ + "\\" + pp$ )' ggf. Verzeichnis anlegen
MkDir $AppDataDir + "\\" + ProgSprache$ + "\\" + pp$
EndIf
EndIf
'$ELSE
Def AppData(0) ReadIni$("HKEY_1", "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "AppData")
RegKlasse$ = AppData() + "\\" + ProgSprache$ + "\\" + pp$ + "\\" + ProgName$ + ".cfg"
' Falls neue Konfigurationsdatei noch nicht existiert, alte Datei an neue Stelle kopieren
IfNot FileExists(RegKlasse$)' Cfg-Datei ist noch nicht im AppData-Verzeichnis
IfNot DirExists( AppData() + "\\" + ProgSprache$ + "\\" + pp$ )' ggf. Verzeichnis anlegen
MkDir AppData() + "\\" + ProgSprache$ + "\\" + pp$
EndIf
EndIf
'$ENDIF
Sonst wird ein Verzeichnis ...\Users\ <User> \ AppData\RoamingXProfan neu angelegt statt im Verzeichnis \AppData\Roaming\XProfan\... gespeichert
Grüße |
|
|
| |
|
|
|
Sven Bader | Danke für den Feedback, Georg!
Mit den Pfaden hast du recht, in der $AppDataDir schient schon ein Backslash drinnen zu sein aber bei AppData() fehlte er. Das hatte sicher für das ein oder andere Durcheinander gesorgt.
Mit dem Suchbutton hatte ich kein Problem aber es mag an der Stelle zeitkritisch zu sein, deine Lösung sollte also helfen Ich hatte eine Weile gebraucht, die Suche dort unterzubringen, ohne das sie wieder verschwindet, die Lösung hier war SetParent()
Bei mit stürzt der Editor alle 1-2 Stunden ab, das Fenster wird nicht neu gezeichnet und das Syntax-Highlighting reagiert nicht mehr. Leider kam ich noch nicht dahinter, ob es nur an der Zeit liegt oder an bestimmten Nutzungsverhalten. Die Fehlersuche gestaltet sich hier schwierig, evtl hast du eine Idee, wie man das Debuggen kann. Sei auf jeden Fall gewarnt, und mache ein Backup deiner Quelltexte, an denen du arbeitest. |
|
|
| |
|
|
|
Georg Teles | Ahja genau
ich schaue es mir genau an, ob bei mir das gleiche Phänomen nach 1-2 h auftritt Die Suchfunktion ist auf jeden Fall sehr hilfreich muss ich sagen
Config habe ich hier mal hochgeladen mit deinen Farbeinstellungen, die Pfade (Include, X4 und Alternative) müssten nur angepasst werden
Herunterladen
(kopieren nach: ...\Users\<USER>\AppData\Roaming\XProfan\Verzeichnis_trägt_PFAD_zum_XProfEDSE)
Grüße |
|
|
| |
|
|
|
Sven Bader | Super, danke!
Meinst du mit der Suchfunktion die Schnellsuche in der Toolbar oder die Möglichkeit, Zeilenumbrüche zu ersetzen?
Was ich auch noch nicht ganz durchschaue, ist das Verbiegen der Pfade in Interpreter und fertigem Programm bzw warum im Interpreter das Syntax-Hightlighting gar nicht geht. |
|
|
| |
|
|
|
Sven Bader | Eine neue Version ist online, hauptsächlich sind es Bugfixes: -Pfad zum Speichern der Einstellungen war teilweise nicht korrekt -Codeformatierung für ASM / ENDASM -Prüfung auch auf ausgewogene eckige Klammern -Klammernausgewogenheit ignorieren, wenn Zeile auf \ endet -Upper/Lower und Hex-Umwandlung per Kontextmenü -"Andere Tabs schließen" -Funktionen und Codesnippets per Kontextmenü, vorerst Stringfunktionen und Profan2CPP-Direktiven -Include-Dateien aus dem Treeview auch klickbar, wenn zuletzt eine Datei in einem anderen Pfad geöffnet wurde -Markiertes Wort in der Suche -Mehrfaches Öffnen einer Datei nicht mehr möglich, stattdessen wird der Tab gewechselt |
|
|
| |
|
|
|
Sven Bader | So, nun macht die Arbeit mit XProfed SE richtig Spaß:
Neu in Version 2.0
-Icons auf Tabs -Schließen-Button für Tabs -Parallele Konfiguration für bis zu 10 Profanversionen inkl. Profan2Cpp via aP2CCOMP -1-Klick Wechsel des Compilers über die Toolbar -Hilfe zu eigenen Procs: Anzeige der Parameter in der Statusbar -Menüpunkte: Hilfe von für XProfan11, X2, X3, Profan2CPP falls vorhanden -Visuelle Verbesserungen (Cursor im Darkmode, Farbe der Auswahl) -Schnellere Codeformatierung -Verbesserter und deutlich schnellerer Aufbau der Navigation (Treeview und Liste) -Integration von WinMerge um Quelltexte zu vergleichen, Auswahl oder ganze Dateien -Umfangreiche Versionierung/Sicherung von Quelltexten -Verbessertes Undo-Verhalten für Codeformatierung, Ein/Ausrücken etc nur noch ein Undo-Schritt -Bugfixes -Weitere kleine Verbesserungen |
|
|
| |
|
|
|
Georg Teles | Sehr sehr nice
habe Vorschläge zur Fenstergröße / -positionierung bei nicht gewünschten Werten oder Bildschirmen, die es z.B. nicht mehr gibt (z.B. auf einem externen Monitor gearbeitet dann abgeklemmt und Programm gestartet).
Defs nach Headereinbindung:
Bildschirmdaten lesen, auf dem das hWnd gestartet wurde und KorrekturProc:
'{ Monitor Zusatz:
' -------------------
Declare rcMonitor#,rcWork#,mon#
Struct MONITORINFO = cbSize&,rcMonitor#(16),rcWork#(16),dwFlags&
Struct RECT = left&,top&,right&,bottom&
Dim rcMonitor#,RECT
Dim rcWork#,RECT
Dim mon#,MONITORINFO
mon#.cbSize& = SizeOf(mon#)
'}
Proc mbm
Declare mpos#,x1&,y1&,wix&,wiy&
Dim mpos#,8
GetCursorPos(mpos#)
wix& = %winLeft - long(mpos#,0)
wiy& = %winTop - long(mpos#,4)
GetMonitorInfoA(MonitorFromWindow(%HWnd,2),mon#)
GetCursorPos(mpos#)
x1&=(long(mpos#,0)+wix&)
case x1&<Long(mon#,20):x1&=Long(mon#,20)
case x1&>Long(mon#,28)-(%winRight - %winLeft):x1&=Long(mon#,28)-(%winRight - %winLeft)
y1&=(long(mpos#,4)+wiy&)
case y1&<Long(mon#,24):y1&=Long(mon#,24)
case y1&>Long(mon#,32)-(%winBottom - %winTop):y1&=Long(mon#,32)-(%winBottom - %winTop)
setWindowPos %hWnd=x1&,y1& - (%winRight - %winLeft),(%winBottom - %winTop);0
SetFocus(%HWnd)
Dispose mpos#
EndProc
Ab Zeile 572 im Original Programmende, ungewollte Fensterzustände auskommentieren, da die Proc mbm dies übernimmt und DisPose mon#:
Proc ProgrammEnde
'----------------
Declare Dateien$, PE_X&, PE_Y&, PE_DX&, PE_DY&
Geändert(1, 0)
ShowWindow(%hWnd,0)
Set("Decimals",0)
If ~IsZoomed(%hWnd)
WriteIni RegKlasse$,RegPfad$,"MAX" = 1
Else
WriteIni RegKlasse$,RegPfad$,"MAX" = 0
EndIf
' Auslesen der Normalen Fenstergröße
PE_X& = gWindowData(0)
PE_Y& = gWindowData(1)
PE_DX& = gWindowData(2)
PE_DY& = gWindowData(3)
' Ungewollte Fensterzustände ausfiltern
'Case ((PE_X& < 0) Or (PE_X& > %MaxX)):PE_X& = %MaxX / 20
'Case ((PE_Y& < 0) Or (PE_Y& > %MaxY)):PE_Y& = %MaxY / 20
'Case ((PE_DX& < 540) Or ((PE_DX& + PE_X&) > %MaxX)) : PE_DX& = %MaxX - %MaxX / 10
'Case ((PE_DY& < 380) Or ((PE_DY& + PE_Y&) > %MaxY)) : PE_DY& = %MaxY - %MaxY / 10
' FensterStatus sichern
WriteIni RegKlasse$,RegPfad$,"X" = PE_X&
WriteIni RegKlasse$,RegPfad$,"Y" = PE_Y&
WriteIni RegKlasse$,RegPfad$,"DX" = PE_DX&
WriteIni RegKlasse$,RegPfad$,"DY" = PE_DY&
Dateien$ = ""
WhileLoop 0,MaxTab%
Case Datei$[&loop] > "" : Dateien$ = Dateien$ + Datei$[&loop] + ";"
EndWhile
WriteIni RegKlasse$,RegPfad$,"Dateien" = Dateien$
LDat#.SaveList()
' Aufräumen
Edit#[0].Destroy()
Dispose Edit#[]
Dispose LDat#
Dispose mon#
DeleteObject DFont&
FreeDLL seDll&
EndProc
Ab Zeile 3147 im Original, DX & DY eventuell fixe Mindestgröße geben (hier x=500 y=400), habe z.B. 32:9 Bildschirm, da geht das Fenster bis 3.456 px in der horizontale ... X% und Y% ignorieren, da mit der Proc mbm die Position automatisch korrigiert wird.
' Fenster erstellen
' -----------------
Set("ErrorLevel",0)' Warnungen beim ersten Programmstart ausblenden
X$ = ReadIni$(RegKlasse$,RegPfad$,"X")
X% = Val(X$)
'Case (%Error > 0) or (X$ = "") or (X% < 0) or (X% > 32767) : X% = %MaxX / 20
Y$ = ReadIni$(RegKlasse$,RegPfad$,"Y")
Y% = Val(Y$)
'Case (%Error > 0) or (Y$ = "") or (Y% < 0) or (Y% > 32767) : Y% = %MaxY / 20
DX% = Val(ReadIni$(RegKlasse$,RegPfad$,"DX"))
Case (%Error > 0) or (DX% < 500) or (DX% > 32767) : DX% = 500'%MaxX - %MaxX / 10
DY% = Val(ReadIni$(RegKlasse$,RegPfad$,"DY"))
Case (%Error > 0) or (DY% < 400) or (DY% > 32767) : DY% = 400'%MaxY - %MaxY / 10
Max% = Val(ReadIni$(RegKlasse$,RegPfad$,"MAX"))
Case (%Error > 0) : Max% = 0
Dateien$ = ReadIni$(RegKlasse$,RegPfad$,"Dateien")
Case (%Error > 0) : Dateien$ = ""
Ab Zeile 3773 im Original: bei maximalen Fenster ist X & Y egal, da dieses auf dem aktuellen Bildschirm maximiert wird und zwangsläufig = 0 beträgt (theoretisch) ... bei nicht maximierten Fenster kommt die automatische Korrektur Proc mbm zum Einsatz
Ab Zeile 2909 im Original: Was noch aufgefallen ist, das SuchEdit und SuchButton beim erststart auf der selben Stelle starten, da die Fenstergröße nun immer korrigiert wird, kann man die Position von Anfang an fixieren:
TBSuch& = CREATE("EDIT", %hwnd, "", width(%hWnd)-203,1, 175, 22)
TBOk& = CREATE("ICONBUTTON",%hwnd,icon(20), width(%hWnd)-27, 0, 24, 24)
A Propos die Suche, genial mit der "\n" Suche, funktioniert sehr gut der Schalter, ob er vorwärts oder rückwärts sucht muss leider im Fenster Suchen 1x betätigt werden, damit die "Schnellsuche" also im Edit vorwärts oder rückwärts sucht.
Genial, dass du den Schalter für Versionen bis Profan 6 hinzugefügt hast das wird den einen oder andreren dazu zwingen, neue Verzeichnisstruktur bei XProfan vorzunehmen hehe ... habe auch extra dafür profX2, profX3 und profX4 Verzeichnisse seit deinem ersten SE Edtor angelegt, wo der Interpreter, Kompiler, Linker und Runtime drin liegen ... XProfed dann extra im Verzeichnis darüber
Grüße Georg |
|
|
| |
|
|
|
Sven Bader | Danke für dein ausführliches Feedback. Die Fenstergrößen muss ich mir nochmal anschauen, habe leider selbst nur 16:10 Monitor aber dafür zwei, weshalb ich das mit dem Ausschalten zumindest testen kann. Der "Poweruser" bekommt das Fenster ja auch ganz leicht wieder mit Windows + Pfeiltaste dorthin, wo er es möchte.
Suchfeld und Suchbutton an gleicher Position dachte ich ist egal, da bei jedem Start mindestens einmal die Subclass zur Änderung der Fenstergröße aufgerufen wird aber eine korrekte Position von Anfang an kann nicht schaden.
Mit der Vor- und Rückwärtssuche bin ich auch noch nicht zufrieden.Ich habe schon einige Verbesserungen daran vorgenommen aber ich denke ich werde wieder ohne Meldung "im Kreis" suchen lassen und ja, die Schnellsuche sollte am besten unbeeindurckt von den Einstellungen des Suchfensters sein.
In der aktuellen "Beta" habe ich folgendes Verhalten eingefügt: -Im Explorer angeklickte Dateien öffnen im schon offenen XProfan SE-Fenster -XProfan SE lässt zwar noch beliebig oft öffnen, läd aber nur in der ersten Instanz die zuletzt geöffneten Dateien -Es lassen sich mehrere Dateien gleichzeitig über den Explorer öffnen -Drag&Drop unterstützter Dateityp ist möglich (als Ziel leider aktuell nur die linke Spalte oder Kopfbereich, der Editor hat das Drop-Target nicht angenommen) |
|
|
| |
|
|