elisp: Transaction Queues

 
 36.13 Transaction Queues
 ========================
 
 You can use a “transaction queue” to communicate with a subprocess using
 transactions.  First use ‘tq-create’ to create a transaction queue
 communicating with a specified process.  Then you can call ‘tq-enqueue’
 to send a transaction.
 
  -- Function: tq-create process
      This function creates and returns a transaction queue communicating
      with PROCESS.  The argument PROCESS should be a subprocess capable
      of sending and receiving streams of bytes.  It may be a child
      process, or it may be a TCP connection to a server, possibly on
      another machine.
 
  -- Function: tq-enqueue queue question regexp closure fn &optional
           delay-question
      This function sends a transaction to queue QUEUE.  Specifying the
      queue has the effect of specifying the subprocess to talk to.
 
      The argument QUESTION is the outgoing message that starts the
      transaction.  The argument FN is the function to call when the
      corresponding answer comes back; it is called with two arguments:
      CLOSURE, and the answer received.
 
      The argument REGEXP is a regular expression that should match text
      at the end of the entire answer, but nothing before; that’s how
      ‘tq-enqueue’ determines where the answer ends.
 
      If the argument DELAY-QUESTION is non-‘nil’, delay sending this
      question until the process has finished replying to any previous
      questions.  This produces more reliable results with some
      processes.
 
  -- Function: tq-close queue
      Shut down transaction queue QUEUE, waiting for all pending
      transactions to complete, and then terminate the connection or
      child process.
 
    Transaction queues are implemented by means of a filter function.
 SeeFilter Functions.