emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 0a7f3dd 008/187: Added async-inject-environment


From: Michael Albinus
Subject: [elpa] master 0a7f3dd 008/187: Added async-inject-environment
Date: Wed, 30 Dec 2015 11:49:22 +0000

branch: master
commit 0a7f3dd82b6959405826dff5973d0a757ca4c39b
Author: John Wiegley <address@hidden>
Commit: John Wiegley <address@hidden>

    Added async-inject-environment
---
 async.el |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/async.el b/async.el
index 6b9dab2..01865c0 100644
--- a/async.el
+++ b/async.el
@@ -72,6 +72,31 @@
 (defvar async-callback-value nil)
 (defvar async-callback-value-set nil)
 
+(defmacro async-inject-environment
+  (include-regexp &optional predicate exclude-regexp)
+  "Inject a part of the parent environment into an async function."
+  `(setq
+    ,@(let (bindings)
+        (mapatoms
+         (lambda (sym)
+           (if (and (boundp sym)
+                    (or (null include-regexp)
+                        (string-match include-regexp (symbol-name sym)))
+                    (not (string-match
+                          (or exclude-regexp "-syntax-table\\'")
+                          (symbol-name sym))))
+               (let ((value (symbol-value sym)))
+                 (when (or (null predicate)
+                           (funcall (or predicate
+                                        (lambda (sym)
+                                          (let ((value (symbol-value sym)))
+                                            (or (not (functionp value))
+                                                (symbolp value))))) sym))
+                   (setq bindings (cons `(quote ,value)
+                                        bindings))
+                   (setq bindings (cons sym bindings)))))))
+        bindings)))
+
 (defun async-when-done (proc &optional change)
   "Process sentinal used to retrieve the value from the child process."
   (when (eq 'exit (process-status proc))
@@ -85,7 +110,8 @@
                        (eq 'async-signal (car result)))
                   (if (eq 'error (car (cdr result)))
                       (error (cadr (cdr result)))
-                    (apply #'signal (cdr result)))
+                    (signal (cadr result)
+                            (cddr result)))
                 (if async-callback
                     (prog1
                         (funcall async-callback result)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]