Author: tkng
Date: Mon Aug  8 17:04:50 2005
New Revision: 1165

Modified:
   trunk/scm/custom-rt.scm

Log:
* scm/custom-rt.scm: This commit aims avoid needless reloading of config files.
  If a config file is not updated, then it would not be loaded while config 
reloading.
 -(custom-reload-group-syms): Now this list is an alist. Spec of each element
  is: (symbol-for-config-file . mtime-of-config-file)
  We should rename this variable with more proper name.
 -(prepend-new-reload-group-syms): New procedure.
 -(update-gsym-mtime): New procedure.
 -(custom-load-group-conf, custom-reload-configs): All function which used 
  custom-reload-group-syms somewhile are modified.
  s/custom-reload-group-syms/(map car custom-reload-group-syms)/;


Modified: trunk/scm/custom-rt.scm
==============================================================================
--- trunk/scm/custom-rt.scm     (original)
+++ trunk/scm/custom-rt.scm     Mon Aug  8 17:04:50 2005
@@ -55,18 +55,33 @@
 (define custom-rt-primary-groups ())
 (define custom-set-hooks ())
 
+(define prepend-new-reload-group-syms
+  (lambda (gsym path)
+    (set! custom-reload-group-syms
+         (cons (cons gsym 0) custom-reload-group-syms))))
+
+(define update-gsym-mtime
+  (lambda (gsym path)
+    (set-cdr! (assq gsym custom-reload-group-syms)
+             (get-file-mtime path))
+             #t))
+
 ;; full implementation
 (define custom-load-group-conf
   (lambda (gsym)
-    (if (not (memq gsym custom-reload-group-syms))
-       (set! custom-reload-group-syms
-             (cons gsym custom-reload-group-syms)))
     (let* ((group-name (symbol->string gsym))
           (path (string-append (getenv "HOME")
                                "/.uim.d/customs/custom-"
                                group-name
                                ".scm")))
-      (try-load path))))
+      (if (not (memq gsym (map (lambda (x) (car x)) custom-reload-group-syms)))
+         (prepend-new-reload-group-syms gsym path))
+      (if (= (get-file-mtime path)
+            (cdr (assq gsym custom-reload-group-syms)))
+           #t ; File isn't modified, no need to reload. 
+         (if (try-load path)
+             (update-gsym-mtime gsym path)
+             #f)))))
 
 ;; full implementation
 (define require-custom
@@ -202,7 +217,7 @@
 
 (define custom-reload-configs
   (lambda ()
-    (if (null? custom-reload-group-syms)
-       #f ; No file should be loaded.
-       (begin
-         (for-each custom-load-group-conf (reverse 
custom-reload-group-syms))))))
+    (let ((group-syms (map (lambda (x) (car x)) custom-reload-group-syms)))
+      (if (null? group-syms)
+         #f ; No file should be loaded.
+         (for-each custom-load-group-conf (reverse group-syms))))))

Reply via email to