Hallo zusammen,
Ich bin gerade dabei meine kleinen LSP´s auf den aktuellen Stand zu bringen.
In meinen LSP´s benutze ich einen uralt *error* handler.
Im Netz (Forum hier, LeeMac, AfraLisp, http://advanced.autolisp.info/, ...) finde ich nur *error* handler, welche älter als 7-10 Jahre sind.
Hat sich bezüglich *error* handler in den letzten jahren so wenig getan, dass man auch die alten bedenkenlos einsetzen kann?
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:
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)
)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP