![]() |
|
Bitte drücken Sie nicht mehrfach auf "Antwort speichern".
*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.
Beiträge: 48 / 0 AutoCAD 2023 / Windows 11 Ich bin gerade dabei meine kleinen LSP´s auf den aktuellen Stand zu bringen. Im Netz (Forum hier, LeeMac, AfraLisp, http://advanced.autolisp.info/, ...) finde ich nur *error* handler, welche älter als 7-10 Jahre sind. Suche nur einen einfachen *error* handler, welcher mir gesetzte variablen zurücksetzt und einen "undo" Befehl sauber ausführt. mein *error* handler von http://advanced.autolisp.info/error2.html: Beiträge: 3727 / 4 Win 10/64 Pro Der gezeigte Code ist natürlich "_advanced", manchmal geht es auch mit 2-3 Zeilen. Aber das scheint ja nichts neues für dich zu sein.Temuedschin Hallo zusammen,
In meinen LSP´s benutze ich einen uralt *error* handler.
Hat sich bezüglich *error* handler in den letzten jahren so wenig getan, dass man auch die alten bedenkenlos einsetzen kann?Code:
(defun startErrorHandler(name undoMode varsToSave /
ErrorTemplate saveList)
(setq errorTemplate
'( (msg / name undo savedVars previousHandler)
;... Zeile wird eventuell noch eingesetzt
;... Zeile wird noch eingesetzt
;... Zeile wird noch eingesetzt
;... Zeile wird noch eingesetzt
(while(>(getvar "cmdactive")0)(command))
(princ(strcat "\n"name": previous Handler = "))
(princ previousHandler)
(command"_undo""_end")
(if undo(command"_u"))
(foreach pair savedVars
(setvar(car pair)(cdr pair))
(princ
(strcat"\n"name": Setze \""
(car pair)"\" zurück auf "))
(princ(cdr pair))
)
(setq *error* previousHandler)
(if msg
(progn
(princ(strcat"\n" name ": \"" msg "\""))
(if previousHandler(previousHandler msg))
)
)
)
)
;************
(command"_undo""_begin")
(foreach pair varsToSave
(setq saveList
(cons
(cons(car pair)(getvar(car pair)))
saveList
)
)
(setvar(car pair)(cdr pair))
)
(setq *error*
(append
(list(car ErrorTemplate))
(if undomode'((setq undo 'T)))
(list
(list 'setq
'PreviousHandler
(cons'quote(list *error*))
)
)
(list(list 'setq 'name name))
(list
(cons'setq
(cons'savedvars
(list(cons'quote(list savelist)))
)
)
)
(cdr ErrorTemplate)
)
)
)
(defun endErrorHandler( / )
(*error* nil)
)
Peter2
AutoCAD MAP 3D 2023
BricsCAD 22Zitat:
Original erstellt von Temuedschin:
...Hat sich bezüglich *error* handler in den letzten jahren so wenig getan, dass man auch die alten bedenkenlos einsetzen kann?...
Ich wüsste nicht, was sich zwischen alt und neu geändert haben sollte. Der Zweck ist der wie du schreibst: Variablen zurücksetzen, evtl. _undo, ...
Vielleicht hat sich eine Variable geändert oder eine neue ist betroffen, aber das muss man sowieso klären bzw. sieht man im Hauptcode.