+;;; Extensions to main loop
+
+(define extensions '())
+
+(define (add-extension! proc pri)
+ "Add an extension with a priority to the main loop"
+ (set! extensions
+ (sort (assoc-set! extensions proc pri)
+ (lambda (a b)
+ (< (cdr a) (cdr b))))))
+
+(define (remove-extension! proc)
+ "Remove an extension from the main loop"
+ (set! extensions
+ (assoc-remove! extensions proc)))
+
+(define (run-extensions)
+ (for-each (lambda (x) ((car x))) extensions))
+
+