+(unless (fboundp 'with-demoted-errors)
+ (defmacro with-demoted-errors (&rest body)
+ "Run BODY and demote any errors to simple messages.
+If `debug-on-error' is non-nil, run BODY without catching its errors.
+This is to be used around code which is not expected to signal an error
+but which should be robust in the unexpected case that an error is signaled."
+ (declare (debug t) (indent 0))
+ (let ((err (make-symbol "err")))
+ `(condition-case ,err
+ (progn ,@body)
+ (error (message "Error: %S" ,err) nil)))))
+
+;; XEmacs's `define-obsolete-variable-alias' takes only two arguments:
+;; (define-obsolete-variable-alias OLDVAR NEWVAR)
+(condition-case nil
+ (progn
+ (defvar dgnushack-obsolete-name nil)
+ (defvar dgnushack-current-name nil)
+ (unwind-protect
+ (define-obsolete-variable-alias
+ 'dgnushack-obsolete-name 'dgnushack-current-name "0")
+ (makunbound 'dgnushack-obsolete-name)
+ (makunbound 'dgnushack-current-name)))
+ (wrong-number-of-arguments
+ (defadvice define-obsolete-variable-alias (around ignore-rest-args
+ (oldvar newvar &rest args)
+ activate)
+ "Ignore arguments other than the 1st and the 2nd ones."
+ ad-do-it)
+ (put 'define-obsolete-variable-alias 'byte-optimizer
+ (lambda (form)
+ (setcdr (nthcdr 2 form) nil)
+ form))))
+