   "A Chain operator parameter."
   :action 'ecasound-copp-action
   :convert-widget 'ecasound-copp-convert
-  :format "  %i %v (%t)\n  %s\n"
+  :format "  %i %v (%t)\n"
   :format-handler 'ecasound-copp-format-handler
   :size 10)
 

;;; Utility functions for converting strings to data-structures.

(defun eci-process-cop-register (string)
  (let (result (cops (split-string string "\n")))
    (while cops
      (if (string-match "^[0-9]+\\. \\([^,]+\\), \\(-[a-zA-Z]+\\):\\(.*\\)" (car cops))
          (setq
           result
           (cons
            (list (match-string-no-properties 1 (car cops))
                  (match-string-no-properties 2 (car cops))
                  (split-string (match-string-no-properties 3 (car cops)) ","))
            result)))
      (setq cops (cdr cops)))
    (set (make-local-variable 'eci-cop-register)
         result)))

(defun eci-process-ladspa-register (string)
  (let (result)
    (with-temp-buffer
      (insert string)
    (goto-char (point-min))
    (while (re-search-forward "[0-9]+\\. \\(.*\\)\n\t-el:\\([^,\n]+\\),\\(.*\\)" nil t)
      (let ((full-name (match-string-no-properties 1))
            (name (match-string-no-properties 2))
            (args (split-string (concat "'," (match-string-no-properties 3)
                                        ",'") "','")))
        (setq result (cons (list full-name name args) result)))))
    (set (make-local-variable 'eci-ladspa-register)
         (nreverse result))))


  (interactive "@d")
  (let ((button (get-char-property pos 'button)))
    (if button
        (widget-apply-action
         (widget-value-set
          button
          (- pos (overlay-start (widget-get button :button-overlay))))
         event)
      (let ((command (lookup-key widget-global-map (this-command-keys))))
        (when (commandp command)
          (call-interactively command))))))
