Browse Source

Wrote the layer loader and unloader

Samuel W. Flint 7 years ago
parent
commit
08b794df86
2 changed files with 35 additions and 22 deletions
  1. 33 22
      buffer-layers.el
  2. 2 0
      test.el

+ 33 - 22
buffer-layers.el

@@ -84,8 +84,8 @@
   (member layer *buffer-layers-applied*))
 
 (defun buffer-layer--get-buffer-layer-definition (layer-name)
-  (first (cl-remove-if-not (lambda (layer)
-			     (eq layer-name (buffer-layer-name layer))) *buffer-layer-definitions*)))
+  (car (cl-remove-if-not (lambda (layer)
+			   (eq layer-name (buffer-layer-name layer))) *buffer-layer-definitions*)))
 
 (defun buffer-layer--generate-buffers-list (layer-name)
   (intern (format "*buffer-layer-%s--buffers*" layer-name)))
@@ -103,35 +103,46 @@
                                     :on-remove (lambda () ,@on-remove))
                  *buffer-layer-definitions*
                  :key #'buffer-layer-name)
-     (defvar ,(buffer-layer--generate-buffers-list name))
+     (defvar ,(buffer-layer--generate-buffers-list name) nil)
      ',name))
 
 (defun buffer-layers-load-layer (name)
-  (interactive (list (completing-read "Layer Name: "
-                                      (cl-remove-if #'(lambda (layer) (member layer *buffer-layers-applied*)) *buffer-layers*)
-                                      nil t)))
+  (interactive (list (intern (completing-read "Layer Name: "
+                                              (cl-remove-if #'(lambda (layer) (member layer *buffer-layers-applied*)) *buffer-layers*)
+                                              nil t))))
   (let ((layer-definition (buffer-layer--get-buffer-layer-definition name)))
-    ;; (if (not (buffer-layer-p layer-definition))
-    ;; 	(error "Layer Undefined: %s" name))
-    (let ((files (buffer-layer-files layer-definition))
-	  (select (buffer-layer-select layer-definition))
-	  (on-apply (buffer-layer-on-apply layer-definition))
-	  (buffers-list (buffer-layer--generate-buffers-list name)))
-      (mapc (lambda (file)
-	      (add-to-list buffers-list (find-file file)))
-	    files)
-      (funcall on-apply)
-      (when (stringp select)
-	(switch-to-buffer select))
-      (add-to-list '*buffer-layers-applied* name)
-      (message "Applied buffer layer %s." name))))
+    (if (not (buffer-layer-p layer-definition))
+    	(error "Layer Undefined: %s" name)
+      (let ((files (buffer-layer-files layer-definition))
+            (select (buffer-layer-select layer-definition))
+            (on-apply (buffer-layer-on-apply layer-definition))
+            (buffers-list (buffer-layer--generate-buffers-list name)))
+        (setf (symbol-value buffers-list) (mapcar #'find-file files))
+        (funcall on-apply)
+        (when (stringp select)
+          (switch-to-buffer select))
+        (add-to-list '*buffer-layers-applied* name)
+        (message "Applied buffer layer %s." name)))))
 
 (defalias 'load-buffer-layer 'buffer-layers-load-layer)
 
 (defun buffer-layers-unload-buffer-layer (name)
   "Unload Buffer Layer named NAME."
-  (interactive (list (completing-read "Buffer Layer Name: " *buffer-layers-applied*)))
-  (funcall (buffer-layers--remover-name name)))
+  (interactive (list (intern (completing-read "Buffer Layer Name: " *buffer-layers-applied*))))
+  (let ((layer-definition (buffer-layer--get-buffer-layer-definition name)))
+    (if (not (buffer-layer-p layer-definition))
+        (error "Layer Undefined: %s" name)
+      (let ((buffers-list (buffer-layer--generate-buffers-list name))
+            (on-remove (buffer-layer-on-remove layer-definition)))
+        (mapc (lambda (buffer)
+                (with-current-buffer buffer
+                  (save-buffer)
+                  (kill-buffer buffer)))
+              (symbol-value buffers-list))
+        (funcall on-remove)
+        (setf (symbol-value buffers-list) nil)
+        (setq *buffer-layers-applied* (delq name *buffer-layers-applied*))
+        (message "Removed Buffer Layer: %s" name)))))
 
 (defun buffer-layers-list ()
   "Produce a list of defined buffer layers."

+ 2 - 0
test.el

@@ -66,3 +66,5 @@
   :on-apply ((my/find-current-notes-file)))
 
 (buffer-layer--get-buffer-layer-definition 'org)
+
+(defun my/find-current-notes-file ())