adjust
[emacs.git] / .emacs.d / init.el
index 3af1400..0717253 100644 (file)
 (defvar jj-dir (file-name-directory (or load-file-name (buffer-file-name)))
   "The master directory for Ganneffs emacs configuration and storage.
 Usually ~/.emacs.d/")
-(defvar jj-config-dir (expand-file-name "config" jj-dir)
+(defvar jj-config-dir
+  (expand-file-name "config" jj-dir)
   "Ganneffs main emacs configuration can be found here.")
-(defvar jj-emacs-config (expand-file-name "emacs.org" jj-config-dir)
+(defvar jj-emacs-config
+  (expand-file-name "emacs.org" jj-config-dir)
   "Ganneffs main emacs configuration file.")
-(defvar jj-sys-config (expand-file-name (concat system-name ".org") jj-config-dir)
-  "Ganneffs System/Host specific emacs configiraton file")
-(defvar jj-os-config (expand-file-name (concat (jj-system-type) ".org") jj-config-dir)
-  "Ganneffs Operating system specific emacs configuration file")
-(defvar jj-user-config (expand-file-name (concat user-login-name ".org") jj-config-dir) 
-  "Ganneffs username specific emacs configuration file")
-(defvar jj-elisp-dir (expand-file-name "elisp" jj-dir)
-  "This directory stores subdirs for packages locally put into Ganneffs emacs config")
-(defvar jj-elisp-local-dir (expand-file-name "local" jj-elisp-dir)
-  "This directory stores extra elisp files for Ganneffs emacs config")
-(defvar jj-custom-file (expand-file-name "customized.el" jj-config-dir)
-  "Where do changes from the customization interface end in Ganneffs emacs config")
-(defvar jj-cache-dir (expand-file-name "cache" jj-dir)
-  "This directory stores cache files and other volatile data")
-(defvar jj-backup-directory (expand-file-name (concat "emacs-autosave-" user-login-name) jj-cache-dir)
-  "This directory stores backup files")
+(defvar jj-elisp-dir
+  (expand-file-name "elisp" jj-dir)
+  "This directory stores subdirs for local packages in Ganneffs emacs config.")
+(defvar jj-elisp-local-dir
+  (expand-file-name "local" jj-elisp-dir)
+  "This directory stores extra elisp files for Ganneffs emacs config.")
+(defvar jj-custom-file
+  (expand-file-name "customized.el" jj-config-dir)
+  "Changes from the customization interface in Ganneffs emacs config.")
+(defvar jj-cache-dir
+  (expand-file-name "cache" jj-dir)
+  "This directory stores cache files and other volatile data.")
+(defvar jj-backup-directory
+  (expand-file-name (concat "emacs-autosave-" user-login-name) jj-cache-dir)
+  "This directory stores backup files.")
+(defvar jj-theme-dir
+  (expand-file-name "themes" jj-dir)
+  "This directory stores theme files for Ganneffs emacs config")
+
+(defvar jj-sys-config
+  (expand-file-name (concat system-name ".org") jj-config-dir)
+  "Ganneffs System/Host specific emacs configiraton file.")
+(defvar jj-os-config
+  (expand-file-name (concat (jj-system-type) ".org") jj-config-dir)
+  "Ganneffs Operating system specific emacs configuration file.")
+(defvar jj-user-config
+  (expand-file-name (concat user-login-name ".org") jj-config-dir) 
+  "Ganneffs username specific emacs configuration file.")
+(defvar jj-ev-config (expand-file-name
+                      (concat "emacs"
+                              (number-to-string emacs-major-version) ".org")
+                      jj-config-dir)
+  "Ganneffs emacs version specific configuration file.")
 
 ;; Ensure that the cache directory hierarchy exists
 (if (not (file-exists-p jj-cache-dir))
@@ -84,21 +103,34 @@ Usually ~/.emacs.d/")
 
 ;; Now read my config
 ;; Note that those files *can* include further files.
+(defun jj-compile-and-load (&optional arg)
+  "Use org-tangle to get the emacs-lisp parts from .org emacs
+config files into .el ones, byte-compile those and then load
+them."
+  (let ((el-file (concat (file-name-sans-extension arg) ".el")))
+    (cond
+     ((file-newer-than-file-p arg el-file)
+      (message "File %s newer than %s, recompiling, please wait" arg el-file)
+      (org-babel-tangle-file arg el-file "emacs-lisp")
+      (byte-compile-file el-file)
+      ))
+    (load-file el-file)
+    ))
 
 ;; The basic config is always loaded, no matter where we start emacs.
-(org-babel-load-file jj-emacs-config)
+(jj-compile-and-load jj-emacs-config)
+;(org-babel-load-file jj-emacs-config)
 
 ;; All the others are optional. We try the order of os, system, user
 ;; specific files and load them, should they be there
 (if (file-exists-p jj-os-config) (org-babel-load-file jj-os-config ))
-(if (file-exists-p jj-sys-config) (org-babel-load-file jj-sys-config))
+;(if (file-exists-p jj-sys-config) (org-babel-load-file jj-sys-config))
+(if (file-exists-p jj-sys-config) (jj-compile-and-load jj-sys-config))
 (if (file-exists-p jj-user-config) (org-babel-load-file jj-user-config))
+(if (file-exists-p jj-ev-config) (org-babel-load-file jj-emacs-version-config))
 
 ;; Lets get a message about startup time out
 (when (require 'time-date nil t)
   (message "Emacs startup time: %d seconds."
            (time-to-seconds (time-since emacs-load-start-time)))
   )
-; (message (concat "Emacs startup time: " (emacs-init-time)))
-
-