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

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

[elpa] master 742c82e 020/187: Added message passing, but undocumented f


From: Michael Albinus
Subject: [elpa] master 742c82e 020/187: Added message passing, but undocumented for now
Date: Wed, 30 Dec 2015 11:49:26 +0000

branch: master
commit 742c82eb98b71ab20dab890cfb16a04eed048a22
Author: John Wiegley <address@hidden>
Commit: John Wiegley <address@hidden>

    Added message passing, but undocumented for now
    
    I'm having some serious difficulties with communicating to the child
    Emacs over a pipe.
---
 async.el |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)

diff --git a/async.el b/async.el
index 9ebebec..20322f6 100644
--- a/async.el
+++ b/async.el
@@ -173,6 +173,23 @@ its FINISH-FUNC is nil."
         async-callback-value
       (kill-buffer (current-buffer)))))
 
+(defun async-message-p (value)
+  "Return true of VALUE is an async.el message packet."
+  (and (listp value)
+       (plist-get value :async-message)))
+
+(defun async-send (&rest args)
+  "Send the given messages to the asychronous Emacs PROCESS."
+  (let ((args (append args '(:async-message t))))
+    (if async-in-child-emacs
+        (if async-callback
+            (funcall async-callback args))
+      (async--transmit-sexp (car args) (list 'quote (cdr args))))))
+
+(defun async-receive (&rest args)
+  "Send the given messages to the asychronous Emacs PROCESS."
+  (async--receive-sexp))
+
 ;;;###autoload
 (defun async-start-process (name program finish-func &rest program-args)
   "Start the executable PROGRAM asynchronously.  See `async-start'.
@@ -311,6 +328,45 @@ returns nil.  It can still be useful, however, as an 
argument to
                        "3")
   (message "Starting async-test-4...done"))
 
+(defun async-test-5 ()
+  (interactive)
+  (message "Starting async-test-5...")
+  (let ((proc
+         (async-start
+          ;; What to do in the child process
+          (lambda ()
+            (message "This is a test, sending message")
+            (async-send :hello "world")
+            ;; wait for a message
+            (let ((msg (async-receive)))
+              (message "Child got message: %s"
+                       (plist-get msg :goodbye)))
+            (sleep-for 3)
+            222)
+
+          ;; What to do when it finishes
+          (lambda (result)
+            (if (async-message-p result)
+                (message "Got hello from child process: %s"
+                         (plist-get result :hello))
+              (message "Async process done, result should be 222: %s"
+                       result))))))
+    (async-send proc :goodbye "everyone"))
+  (message "Starting async-test-5...done"))
+
+(defun async-test-6 ()
+  (interactive)
+  (message "Starting async-test-6...")
+  (async-start
+   ;; What to do in the child process
+   `(lambda ()
+      ,(async-inject-variables "\\`user-mail-address\\'")
+      (format "user-mail-address = %s" user-mail-address))
+
+   ;; What to do when it finishes
+   (lambda (result)
+     (message "Async process done: %s" result))))
+
 (provide 'async)
 
 ;;; async.el ends here



reply via email to

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