 In particular you can specify nil, meaning that the locked zone is not represented at the screen"
   )
 
+(defvar merlin-automatically-garbage-processes t
+  "If set to t, deletes a process when it has no more users. If set to nil, keep it")
 
 ;; Internal variables
 
 
 ; Process / Reception related variables
 (defvar merlin-process nil
-  "The merlin process associated to the current buffer")
+  "The global merlin process.")
+(defvar merlin-local-process nil
+  "The local merlin process (buffer local in every process buffer)"
+)
+(defvar merlin-process-users nil
+  "Buffer that uses the process (local to a process buffer)")
+(defvar merlin-process-last-user nil
+  "Last buffer that used the process")
 (defvar merlin-result nil
   "Temporary variables to store command results")
 (defvar merlin-lock-zone-highlight-overlay nil 

(defun merlin-debug (s)
  "If in debug-mode (controlled by `merlin-debug', outputs the given string
   on the buffer associated to the current merlin process"
  (with-current-buffer (merlin-make-buffer-name)
    (insert s)))

(defun merlin-compute-prefix (ident)


The parameter `view-errors-p' controls whether we should care for errors"
  (merlin-delete-error-overlays)
  (if (not (merlin-is-last-user-p))
      (merlin-rewind))
  (save-excursion
    (setq merlin-lock-point (merlin-retract-to (point)))
    (end-of-line)
    (merlin-tell-piece-split "struct" merlin-lock-point (point))
    (setq merlin-lock-point (merlin-tell-till-end-of-phrase))
    (merlin-check-for-errors view-errors-p)
    (merlin-update-lock-zone-display))
)    
  
