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

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

[nongnu] elpa/gnuplot b96c5d8 144/184: Merge pull request #43 from conao


From: ELPA Syncer
Subject: [nongnu] elpa/gnuplot b96c5d8 144/184: Merge pull request #43 from conao3/fix-format
Date: Sun, 29 Aug 2021 11:03:32 -0400 (EDT)

branch: elpa/gnuplot
commit b96c5d8c55b83dd3ae9554d2cfe431e8e9d67fc5
Merge: 55e3f75 14584a0
Author: Naoya Yamashita <conao3@gmail.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #43 from conao3/fix-format
    
    Clean Elisp format
---
 dotemacs.el              |   10 +-
 gnuplot-context.el       | 2964 +++++++++++++++++++++++-----------------------
 gnuplot-debug-context.el |   50 +-
 gnuplot-gui.el           | 2037 +++++++++++++++----------------
 gnuplot-test-context.el  |  442 +++----
 gnuplot-tests.el         |   94 +-
 gnuplot.el               | 1043 ++++++++--------
 7 files changed, 3333 insertions(+), 3307 deletions(-)

diff --git a/dotemacs.el b/dotemacs.el
index 6107f55..310cf03 100644
--- a/dotemacs.el
+++ b/dotemacs.el
@@ -6,16 +6,16 @@
 ;;  (setq load-path (append (list "/path/to/gnuplot") load-path))
 
 ;; these lines enable the use of gnuplot mode
-  (autoload 'gnuplot-mode "gnuplot" "gnuplot major mode" t)
-  (autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot mode" t)
+(autoload 'gnuplot-mode "gnuplot" "gnuplot major mode" t)
+(autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot mode" t)
 
 ;; this line automatically causes all files with the .gp extension to
 ;; be loaded into gnuplot mode
-  (setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode)) auto-mode-alist))
+(setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode)) auto-mode-alist))
 
 ;; This line binds the function-9 key so that it opens a buffer into
-;; gnuplot mode 
-  (global-set-key [(f9)] 'gnuplot-make-buffer)
+;; gnuplot mode
+(global-set-key [(f9)] 'gnuplot-make-buffer)
 
 ;; end of line for gnuplot-mode
 ;;--------------------------------------------------------------------
diff --git a/gnuplot-context.el b/gnuplot-context.el
index d290eab..7ac379d 100644
--- a/gnuplot-context.el
+++ b/gnuplot-context.el
@@ -40,8 +40,8 @@
 ;; This file enhances gnuplot-mode with context-sensitive completion,
 ;; ElDoc support, and info page lookup for gnuplot script and shell
 ;; buffers.
-;; 
-;; Usage 
+;;
+;; Usage
 ;; =====
 ;;
 ;; Make sure to byte-compile this file, or things will be noticeably
@@ -83,7 +83,7 @@
 ;;
 ;; Internal details
 ;; ================
-;; 
+;;
 ;; Gnuplot's command language has a fair amount of syntactic
 ;; complexity, and the only way I could think of to support these
 ;; features was to do a complete parse of the command line. So that's
@@ -138,7 +138,7 @@
 ;;     will match PREFIX plus any number of characters from the
 ;;     beginning of SUFFIX.  Any literal string from ALIASES will
 ;;     also match. The token-id of the matching token is mutated to
-;;     the canonical value of KEYWORD. 
+;;     the canonical value of KEYWORD.
 ;;     Example:
 ;;      (kw ("linew" ."idth") "lw") matches "linew", "linewi",
 ;;     ... "linewidth" as well as "lw". Any of these tokens will
@@ -164,7 +164,7 @@
 ;;
 ;;     For better readability, sequence forms can also be written as
 ;;     a vector, omitting the `sequence': [PATTERN PATTERN ...]
-;;      
+;;
 ;;    (either PATTERN PATTERN...)
 ;;     Match the first PATTERN to succeed, or fail if none
 ;;     matches. Like regexp `|'.
@@ -186,14 +186,14 @@
 ;;     used to store the plotting style, which we need in order to
 ;;     give the correct ElDoc string for "using" clauses, and for
 ;;     info keywords (see below)
-;;     
+;;
 ;;    (info-keyword PATTERN)
 ;;     Match PATTERN, and use whatever the value of the first token
 ;;     it matches is to look up info pages for this pattern. Most
 ;;     Gnuplot info pages have the same name as the keyword they
 ;;     document, so by using this we only have to put :info
 ;;     properties on the few that don't, such as "set".
-;;  
+;;
 ;;    For convenience, "many", "maybe", "capture" and "info-keyword"
 ;;    wrap the rest of their arguments in an implicit "sequence" form,
 ;;    so we can write (maybe "," expression) instead of
@@ -281,17 +281,17 @@
 (eval-when-compile
   (defmacro gnuplot-tokenize-by-regexps (&rest rules)
     `(cond ,@(mapcar
-             (lambda (rule)
-               (let ((regexp (car rule))
-                     (token-type (cadr rule)))
-                 `((looking-at ,regexp)
-                   (let ((str (match-string-no-properties 0)))
-                     (forward-char (length str))
-                     (make-gnuplot-token :id str
-                                         :type ',token-type
-                                         :start (match-beginning 0)
-                                         :end (match-end 0))))))
-             rules))))
+              (lambda (rule)
+                (let ((regexp (car rule))
+                      (token-type (cadr rule)))
+                  `((looking-at ,regexp)
+                    (let ((str (match-string-no-properties 0)))
+                      (forward-char (length str))
+                      (make-gnuplot-token :id str
+                                          :type ',token-type
+                                          :start (match-beginning 0)
+                                          :end (match-end 0))))))
+              rules))))
 
 (defun gnuplot-tokenize (&optional completing-p)
   "Tokenize the Gnuplot command at point. Returns a list of `gnuplot-token' 
objects.
@@ -299,8 +299,8 @@
 If COMPLETING-P is non-nil, omits the token at point if it is a
 name; otherwise continues tokenizing up to the token at point. FIXME"
   (let ((tokens '())
-       (stop-point (min (point)
-                        (gnuplot-point-at-end-of-command))))
+        (stop-point (min (point)
+                         (gnuplot-point-at-end-of-command))))
     (save-excursion
       (if (save-excursion               ; HACK FIXME
             (gnuplot-beginning-of-continuation)
@@ -308,50 +308,50 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
           (gnuplot-beginning-of-continuation)
         (gnuplot-beginning-of-command))
       (while
-         ;; Skip whitespace and continuation lines
-         (progn
-           (skip-syntax-forward "-" stop-point)
-           (while (looking-at "\\\\\n")
-             (forward-line)
-             (skip-syntax-forward "-" stop-point))
-           ;; Don't tokenize anything starting after point
-           (and (not (looking-at "#"))
-                (< (point) stop-point)))
-       (let* ((from (point))
-              (token
-               (cond  
-                ((gnuplot-tokenize-by-regexps
-                  ("[A-Za-z_][A-Za-z0-9_]*" name)
-                  
("[0-9]+\\(\\.[0-9]*\\)?\\([eE][+-]?[0-9]+\\)?\\|\\.[0-9]+\\([eE][+-]?[0-9]+\\)?"
 number)
-                  (gnuplot-operator-regexp operator)
+          ;; Skip whitespace and continuation lines
+          (progn
+            (skip-syntax-forward "-" stop-point)
+            (while (looking-at "\\\\\n")
+              (forward-line)
+              (skip-syntax-forward "-" stop-point))
+            ;; Don't tokenize anything starting after point
+            (and (not (looking-at "#"))
+                 (< (point) stop-point)))
+        (let* ((from (point))
+               (token
+                (cond
+                 ((gnuplot-tokenize-by-regexps
+                   ("[A-Za-z_][A-Za-z0-9_]*" name)
+                   
("[0-9]+\\(\\.[0-9]*\\)?\\([eE][+-]?[0-9]+\\)?\\|\\.[0-9]+\\([eE][+-]?[0-9]+\\)?"
 number)
+                   (gnuplot-operator-regexp operator)
                    (";" separator)))
 
-                ((looking-at "['\"]")
-                 (let* ((bounds (bounds-of-thing-at-point 'sexp))
-                        (to (or (cdr bounds) stop-point)))
-                   (goto-char to)
-                   (make-gnuplot-token
-                    :id (buffer-substring-no-properties from to)
-                    :type 'string
-                    :start from :end to)))
-
-                (t (error
-                    "gnuplot-tokenize: bad token beginning %s"
-                    (buffer-substring-no-properties (point) stop-point))))))
-         
-         (push token tokens))))
-    
+                 ((looking-at "['\"]")
+                  (let* ((bounds (bounds-of-thing-at-point 'sexp))
+                         (to (or (cdr bounds) stop-point)))
+                    (goto-char to)
+                    (make-gnuplot-token
+                     :id (buffer-substring-no-properties from to)
+                     :type 'string
+                     :start from :end to)))
+
+                 (t (error
+                     "gnuplot-tokenize: bad token beginning %s"
+                     (buffer-substring-no-properties (point) stop-point))))))
+
+          (push token tokens))))
+
     ;; If we are looking for completions, AND if the last token
     ;; read is a name, AND if point is within the bounds of the
     ;; last token, then discard it. The matching function
     ;; generates a list of all possible tokens that could appear
     ;; in that position for completion.
     (if (and completing-p
-            tokens
-            (eq (gnuplot-token-type (car tokens)) 'name)
-            (<= (point) (gnuplot-token-end (car tokens))))
-       (pop tokens))
-    
+             tokens
+             (eq (gnuplot-token-type (car tokens)) 'name)
+             (<= (point) (gnuplot-token-end (car tokens))))
+        (pop tokens))
+
     (nreverse tokens)))
 
 
@@ -384,13 +384,13 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
 ;;     Jump to (set PC to) OFFSET if FIXED is non-nil, otherwise to
 ;;     PC + OFFSET
 ;;
-;;    (call OFFSET FIXED) 
+;;    (call OFFSET FIXED)
 ;;     Like "jump", but push a return address onto the stack for
 ;;     (return). (The compiler adds the name of the rule being called
 ;;     as a fourth element on the end of the list, but this is just a
 ;;     comment for debugging purposes).
 ;;
-;;    (return) 
+;;    (return)
 ;;     Return to the PC address on top of the stack, or finish
 ;;     matching if stack is empty. (Usually this doesn't happen,
 ;;     because the machine stops as soon as it gets to the token at
@@ -456,15 +456,15 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
      ((stringp pat)
       ;; Don't add non-words to completion lists
       (let ((wordp (string-match-p "^\\sw\\(\\sw\\|\\s_\\)*$" pat)))
-       `((literal ,pat ,(not wordp)))))
-     
+        `((literal ,pat ,(not wordp)))))
+
      ;; Symbols match token types or calls to other patterns
      ((symbolp pat)
       (case pat
-       ((any) `((any)))
-       ((name number string separator) `((token-type ,pat)))
-       (t `((call ,pat)))))
-     
+        ((any) `((any)))
+        ((name number string separator) `((token-type ,pat)))
+        (t `((call ,pat)))))
+
      ;; Syntactic sugar: write sequences (sequence ...) as vectors [...]
      ((vectorp pat)
       (gnuplot-compile-pattern
@@ -473,130 +473,130 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
      ;; Other forms combine simpler patterns
      (t
       (let ((type (car pat)))
-       (case type
-         ;; (sequence...): concatenate patterns, with optional eldoc
-         ;; and info strings
-         ((sequence)
-          (destructuring-bind
-              (subpats eldoc info)
-              (gnuplot-filter-arg-list (cdr pat))
-            (let ((eldoc-push '()) (eldoc-pop '())
-                  (info-push '()) (info-pop '())
-                  (compiled
-                   (mapcar 'gnuplot-compile-pattern subpats)))
-              (if eldoc
-                  (setq eldoc-push `((push eldoc ,eldoc))
-                        eldoc-pop `((pop eldoc))))
-              (if info
-                  (if (eq info :no-info)
-                      (setq info-push '((push no-scan t))
-                            info-pop '((pop no-scan)))
-                    (setq info-push `((push info ,info))
-                          info-pop `((pop info)))))
-              (apply 'append
-                     `(,info-push
-                       ,eldoc-push
-                       ,@compiled
-                       ,eldoc-pop
-                       ,info-pop)))))
-
-         ;; (either...): choose between patterns
-         ((either)
-          (cond
-           ((= (length pat) 2)         ; trivial case
-            (gnuplot-compile-pattern (cadr pat)))
-
-           ((> (length pat) 3)         ; could be more efficient...
-            (gnuplot-compile-pattern (gnuplot-either-helper pat)))
-
-           (t                          ; two patterns
-            (let* ((pat1 (cadr pat))
-                   (pat2 (caddr pat))
-                   (pat1-c (gnuplot-compile-pattern pat1))
-                   (pat2-c (gnuplot-compile-pattern pat2))
-                   (pat1-l (length pat1-c))
-                   (pat2-l (length pat2-c)))
-              `((choice ,(+ pat1-l 2))
-                ,@pat1-c
-                (commit ,(+ pat2-l 1))
-                ,@pat2-c)))))
-
-         ;; Repetition (*)
-         ((many)
-          (let* ((pat1 (cons 'sequence (cdr pat)))
-                 (pat1-c (gnuplot-compile-pattern pat1))
-                 (pat1-l (length pat1-c)))
-            `((choice ,(+ pat1-l 3))
-              (check-progress)         ; bail out of infinite loops
-              ,@pat1-c
-              (commit ,(- (+ pat1-l 2))))))
-
-         ;; Repetition (+)
-         ((many1)
-          (let* ((pat1 (cdr pat)))
-            (gnuplot-compile-pattern
-             `(sequence ,@pat1 (many ,@pat1)))))
-                 
-
-         ;; Optional (?)
-         ((maybe)
-          (let* ((pat1 (cons 'sequence (cdr pat)))
-                 (pat1-c (gnuplot-compile-pattern pat1))
-                 (pat1-l (length pat1-c)))
-            `((choice ,(+ pat1-l 1))
-              ,@pat1-c)))
-
-         ;; Syntactic sugar for delimited lists
-         ((delimited-list)
-          (let* ((item (cadr pat))
-                 (sep (caddr pat)))
-            (gnuplot-compile-pattern
-             `(sequence ,item (many (sequence ,sep ,item))))))
-
-         ;; keywords
-         ((kw)
-          (destructuring-bind (regex name)
-              (gnuplot-keyword-helper (cdr pat))
-            `((keyword ,regex ,name))))
-
-         ;; Capturing groups
-         ((capture)
-          (let* ((name (cadr pat))
-                 (pat1 (cons 'sequence (cddr pat)))
-                 (pat1-c (gnuplot-compile-pattern pat1)))
-            `((save-start ,name)
-              ,@pat1-c
-              (save-end ,name))))
-         
-         ;; Use the first token as an info keyword
-         ((info-keyword)
-          (let* ((pat1 (cons 'sequence (cdr pat)))
-                 (pat1-c (gnuplot-compile-pattern pat1)))
-            `((push info first-token)
-              ,@pat1-c
-              (pop info))))
-
-         ;; Assertions
-         ((assert)
-          (let* ((form (cadr pat)))
-            `((assert ,form))))
-
-         (t
-          (error "gnuplot-compile-pattern: bad pattern form %s" pat)))))))
+        (case type
+          ;; (sequence...): concatenate patterns, with optional eldoc
+          ;; and info strings
+          ((sequence)
+           (destructuring-bind
+               (subpats eldoc info)
+               (gnuplot-filter-arg-list (cdr pat))
+             (let ((eldoc-push '()) (eldoc-pop '())
+                   (info-push '()) (info-pop '())
+                   (compiled
+                    (mapcar 'gnuplot-compile-pattern subpats)))
+               (if eldoc
+                   (setq eldoc-push `((push eldoc ,eldoc))
+                         eldoc-pop `((pop eldoc))))
+               (if info
+                   (if (eq info :no-info)
+                       (setq info-push '((push no-scan t))
+                             info-pop '((pop no-scan)))
+                     (setq info-push `((push info ,info))
+                           info-pop `((pop info)))))
+               (apply 'append
+                      `(,info-push
+                        ,eldoc-push
+                        ,@compiled
+                        ,eldoc-pop
+                        ,info-pop)))))
+
+          ;; (either...): choose between patterns
+          ((either)
+           (cond
+            ((= (length pat) 2)                ; trivial case
+             (gnuplot-compile-pattern (cadr pat)))
+
+            ((> (length pat) 3)                ; could be more efficient...
+             (gnuplot-compile-pattern (gnuplot-either-helper pat)))
+
+            (t                         ; two patterns
+             (let* ((pat1 (cadr pat))
+                    (pat2 (caddr pat))
+                    (pat1-c (gnuplot-compile-pattern pat1))
+                    (pat2-c (gnuplot-compile-pattern pat2))
+                    (pat1-l (length pat1-c))
+                    (pat2-l (length pat2-c)))
+               `((choice ,(+ pat1-l 2))
+                 ,@pat1-c
+                 (commit ,(+ pat2-l 1))
+                 ,@pat2-c)))))
+
+          ;; Repetition (*)
+          ((many)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-compile-pattern pat1))
+                  (pat1-l (length pat1-c)))
+             `((choice ,(+ pat1-l 3))
+               (check-progress)                ; bail out of infinite loops
+               ,@pat1-c
+               (commit ,(- (+ pat1-l 2))))))
+
+          ;; Repetition (+)
+          ((many1)
+           (let* ((pat1 (cdr pat)))
+             (gnuplot-compile-pattern
+              `(sequence ,@pat1 (many ,@pat1)))))
+
+
+          ;; Optional (?)
+          ((maybe)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-compile-pattern pat1))
+                  (pat1-l (length pat1-c)))
+             `((choice ,(+ pat1-l 1))
+               ,@pat1-c)))
+
+          ;; Syntactic sugar for delimited lists
+          ((delimited-list)
+           (let* ((item (cadr pat))
+                  (sep (caddr pat)))
+             (gnuplot-compile-pattern
+              `(sequence ,item (many (sequence ,sep ,item))))))
+
+          ;; keywords
+          ((kw)
+           (destructuring-bind (regex name)
+               (gnuplot-keyword-helper (cdr pat))
+             `((keyword ,regex ,name))))
+
+          ;; Capturing groups
+          ((capture)
+           (let* ((name (cadr pat))
+                  (pat1 (cons 'sequence (cddr pat)))
+                  (pat1-c (gnuplot-compile-pattern pat1)))
+             `((save-start ,name)
+               ,@pat1-c
+               (save-end ,name))))
+
+          ;; Use the first token as an info keyword
+          ((info-keyword)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-compile-pattern pat1)))
+             `((push info first-token)
+               ,@pat1-c
+               (pop info))))
+
+          ;; Assertions
+          ((assert)
+           (let* ((form (cadr pat)))
+             `((assert ,form))))
+
+          (t
+           (error "gnuplot-compile-pattern: bad pattern form %s" pat)))))))
 
   ;; Helper function for destructuring (sequence ...) forms in patterns
   ;; Takes the cdr of the sequence form, returns a list (PATTERNS ELDOC
   ;; INFO).
-  (defun gnuplot-filter-arg-list (args)  
+  (defun gnuplot-filter-arg-list (args)
     (let ((accum '())
-         (eldoc nil) (info nil))
+          (eldoc nil) (info nil))
       (dolist (item args)
-       (let ((type (car-safe item)))
-         (case type
-           ((:eldoc) (setq eldoc (cadr item)))
-           ((:no-info) (setq info :no-info)) ; inhibit stack scanning
-           ((:info) (setq info (cadr item)))
-           (t (push item accum)))))
+        (let ((type (car-safe item)))
+          (case type
+            ((:eldoc) (setq eldoc (cadr item)))
+            ((:no-info) (setq info :no-info)) ; inhibit stack scanning
+            ((:info) (setq info (cadr item)))
+            (t (push item accum)))))
       (list (reverse accum) eldoc info)))
 
   ;; Helper function for compiling (kw...) patterns
@@ -604,93 +604,93 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
   (defun gnuplot-keyword-helper (args)
     (let ((keyword (car args)) (aliases (cdr args)))
       (when (consp keyword)
-       (let ((pre (car keyword)) (suf (cdr keyword)))
-         (setq keyword (concat pre suf))
-         (while (progn
-                  (push pre aliases)
-                  (not (zerop (length suf))))
-           (setq pre (concat pre (substring suf 0 1))
-                 suf (substring suf 1)))))
+        (let ((pre (car keyword)) (suf (cdr keyword)))
+          (setq keyword (concat pre suf))
+          (while (progn
+                   (push pre aliases)
+                   (not (zerop (length suf))))
+            (setq pre (concat pre (substring suf 0 1))
+                  suf (substring suf 1)))))
       (let ((regex
-            (concat "^"
-                    (regexp-opt (cons keyword aliases))
-                    "$")))
-       (list regex keyword))))
+             (concat "^"
+                     (regexp-opt (cons keyword aliases))
+                     "$")))
+        (list regex keyword))))
 
   ;; Helper function for compiling (either ...) patterns. Rewrites
   ;; alternates (either A B C) into (either A (either B (either C D)))
   (defun gnuplot-either-helper (pat)
     (if (= (length pat) 3)
-       pat
+        pat
       `(either ,(cadr pat)
-              ,(gnuplot-either-helper
-                (cons 'either (cddr pat))))))
-  
+               ,(gnuplot-either-helper
+                 (cons 'either (cddr pat))))))
+
   ;; Compile the grammar (a list of rule-pattern pairs (RULE PATTERN))
   ;; into a single vector of matching-machine instructions. Compiles
   ;; each pattern individually, then "links" them into one vector,
   ;; converting symbolic (call ...) instructions into numeric offsets
   (defun gnuplot-compile-grammar (grammar start-symbol)
     (let ((compiled-pats '())        ; Alist of (name . instructions)
-         ;; Reserve space for a jump to the start symbol
-         (code-length 1))
+          ;; Reserve space for a jump to the start symbol
+          (code-length 1))
 
       ;; Compile each rule and find the total number of instructions
       (dolist (item grammar)
-       (let* ((name (car item))
-              (pat (cadr item))
-              (code (gnuplot-compile-pattern pat)))
-         (push (cons name code) compiled-pats)
-         ;; Reserve space for a label at the beginning and (return) at
-         ;; the end
-         (setq code-length (+ code-length 2 (length code)))))
+        (let* ((name (car item))
+               (pat (cadr item))
+               (code (gnuplot-compile-pattern pat)))
+          (push (cons name code) compiled-pats)
+          ;; Reserve space for a label at the beginning and (return) at
+          ;; the end
+          (setq code-length (+ code-length 2 (length code)))))
 
       ;; Copy instructions into a single vector
       (let ((object-code (make-vector code-length nil))
-           (name->offset (make-hash-table))
-           (i 1))
-       (setf (aref object-code 0) `(jump ,start-symbol))
-       (dolist (chunk compiled-pats)
-         (let ((name (car chunk))
-               (code (cdr chunk)))
-           (setf (aref object-code i) `(label ,name))
-           (incf i)
-           (puthash name i name->offset)
-           (while code
-             (setf (aref object-code i) (car code)
-                   code (cdr code)
-                   i (1+ i)))
-           (setf (aref object-code i) '(return)
-                 i (1+ i))))
-
-       ;; Resolve symbolic and relative jumps 
-       (let ((pattern-name nil))
-         (dotimes (i (length object-code))
-           (let ((inst (aref object-code i)))
-             (case (car inst)
-               ((label)
-                (setq pattern-name (cadr inst)))
-
-               ((jump call choice commit)
-                (cond
-                 ((symbolp (cadr inst))
-                  (let* ((name (cadr inst))
-                         (location (gethash name name->offset)))
-                    (if (not location)
-                        (error
-                         (concat "gnuplot-compile-grammar: "
-                                 "No rule found for symbol `%s' in pattern 
`%s'")
-                         name pattern-name))
-                    (setcdr inst `(,location ,name))))
-
-                 ((numberp (cadr inst))
-                  (let* ((offset (cadr inst))
-                         (location (+ offset i)))
-                    (setcdr inst `(,location))))
-
-                 (t
-                  (error "gnuplot-compile-grammar: bad instruction %s" 
inst))))))))
-       object-code))))
+            (name->offset (make-hash-table))
+            (i 1))
+        (setf (aref object-code 0) `(jump ,start-symbol))
+        (dolist (chunk compiled-pats)
+          (let ((name (car chunk))
+                (code (cdr chunk)))
+            (setf (aref object-code i) `(label ,name))
+            (incf i)
+            (puthash name i name->offset)
+            (while code
+              (setf (aref object-code i) (car code)
+                    code (cdr code)
+                    i (1+ i)))
+            (setf (aref object-code i) '(return)
+                  i (1+ i))))
+
+        ;; Resolve symbolic and relative jumps
+        (let ((pattern-name nil))
+          (dotimes (i (length object-code))
+            (let ((inst (aref object-code i)))
+              (case (car inst)
+                ((label)
+                 (setq pattern-name (cadr inst)))
+
+                ((jump call choice commit)
+                 (cond
+                  ((symbolp (cadr inst))
+                   (let* ((name (cadr inst))
+                          (location (gethash name name->offset)))
+                     (if (not location)
+                         (error
+                          (concat "gnuplot-compile-grammar: "
+                                  "No rule found for symbol `%s' in pattern 
`%s'")
+                          name pattern-name))
+                     (setcdr inst `(,location ,name))))
+
+                  ((numberp (cadr inst))
+                   (let* ((offset (cadr inst))
+                          (location (+ offset i)))
+                     (setcdr inst `(,location))))
+
+                  (t
+                   (error "gnuplot-compile-grammar: bad instruction %s" 
inst))))))))
+        object-code))))
 
 ;;; The grammar.
 (defvar gnuplot-compiled-grammar
@@ -698,86 +698,86 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
     (let ((max-lisp-eval-depth 600))
       (gnuplot-compile-grammar
        '((expression
-         [infix-expression (maybe "?" expression ":" expression)])
-        
-        (prefix-operator
-         (either "!" "~" "-" "+"))
-
-        (infix-operator
-         (either "**" "*" "/" "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" "eq" 
"ne"
-                 "&" "^" "|" "&&" "||"))
-
-        (infix-expression
-         [(many prefix-operator)
-          primary-expression
-          (many infix-operator expression)])
-
-        (primary-expression
-         [(either number string parenthesized-expression
-                  column-ref complex-number function-call name)
-          (many "!")
-          (maybe "**" infix-expression)
-          (maybe substring-range)])
-
-        (function-call
-         (either
-          (info-keyword
-           [(either "abs" "acos" "acosh" "arg" "asin" "asinh" "atan" "atan2" 
"atanh"
-                    "besj0" "besj1" "besy0" "besy1" "ceil" "column" 
"columnhead"
-                    "cos" "cosh" "defined" "erf" "erfc" "exists" "exp" "floor"
-                    "gamma" "gprintf" "ibeta" "igamma" "imag" "int" "inverf"
-                    "invnorm" "lambertw" "lgamma" "log" "log10" "norm" "real"
-                    "sgn" "sin" "sinh" "sprintf" "sqrt" "strftime" 
"stringcolumn"
-                    "strlen" "strptime" "strstrt" "substr" "tan" "tanh" 
"timecolumn"
-                    "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday"
-                    "tm_yday" "tm_year" "valid" "value" "word" "words" "rand")
-            parenthesized-expression])
-          [(:info "elliptic_integrals")
-           (either "EllipticK" "EllipticE" "EllipticPi")
-           parenthesized-expression]
-          [name
-           parenthesized-expression]))
-
-        (parenthesized-expression
-         ["(" comma-list ")"])
-
-        (complex-number
-         ["{" (maybe "-") number "," (maybe "-") number "}"])
-
-        (column-ref
-         ["$" number])
-
-        (substring-range-component
-         (maybe (either "*" expression)))
-
-        (substring-range
-         ["[" (delimited-list substring-range-component ":" 2 2) "]"])
+          [infix-expression (maybe "?" expression ":" expression)])
+
+         (prefix-operator
+          (either "!" "~" "-" "+"))
+
+         (infix-operator
+          (either "**" "*" "/" "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" 
"eq" "ne"
+                  "&" "^" "|" "&&" "||"))
+
+         (infix-expression
+          [(many prefix-operator)
+           primary-expression
+           (many infix-operator expression)])
+
+         (primary-expression
+          [(either number string parenthesized-expression
+                   column-ref complex-number function-call name)
+           (many "!")
+           (maybe "**" infix-expression)
+           (maybe substring-range)])
+
+         (function-call
+          (either
+           (info-keyword
+            [(either "abs" "acos" "acosh" "arg" "asin" "asinh" "atan" "atan2" 
"atanh"
+                     "besj0" "besj1" "besy0" "besy1" "ceil" "column" 
"columnhead"
+                     "cos" "cosh" "defined" "erf" "erfc" "exists" "exp" "floor"
+                     "gamma" "gprintf" "ibeta" "igamma" "imag" "int" "inverf"
+                     "invnorm" "lambertw" "lgamma" "log" "log10" "norm" "real"
+                     "sgn" "sin" "sinh" "sprintf" "sqrt" "strftime" 
"stringcolumn"
+                     "strlen" "strptime" "strstrt" "substr" "tan" "tanh" 
"timecolumn"
+                     "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday"
+                     "tm_yday" "tm_year" "valid" "value" "word" "words" "rand")
+             parenthesized-expression])
+           [(:info "elliptic_integrals")
+            (either "EllipticK" "EllipticE" "EllipticPi")
+            parenthesized-expression]
+           [name
+            parenthesized-expression]))
+
+         (parenthesized-expression
+          ["(" comma-list ")"])
+
+         (complex-number
+          ["{" (maybe "-") number "," (maybe "-") number "}"])
+
+         (column-ref
+          ["$" number])
+
+         (substring-range-component
+          (maybe (either "*" expression)))
+
+         (substring-range
+          ["[" (delimited-list substring-range-component ":" 2 2) "]"])
 
 ;;; Assignments
-        (lhs
-         [name (maybe "(" (delimited-list name "," 1) ")")])
+         (lhs
+          [name (maybe "(" (delimited-list name "," 1) ")")])
 
-        (assignment
-         [lhs "=" (either assignment expression)])
+         (assignment
+          [lhs "=" (either assignment expression)])
 
 ;;; Lists of expressions
-        (comma-list
-         (delimited-list (either assignment expression) ","))
+         (comma-list
+          (delimited-list (either assignment expression) ","))
 
-        (colon-list
-         (delimited-list expression ":"))
+         (colon-list
+          (delimited-list expression ":"))
 
-        (tuple
-         ["(" (delimited-list expression "," 2 3) ")"])
+         (tuple
+          ["(" (delimited-list expression "," 2 3) ")"])
 
 ;;; Commands
-        (command
-         (info-keyword
-          (either plot-command splot-command replot-command fit-command 
print-command
-                  set-command cd-command call-command simple-command
-                  eval-command load-command lower-raise-command pause-command
-                  save-command system-command test-command undefine-command
-                  update-command assignment if-command new-if-command 
do-command)))
+         (command
+          (info-keyword
+           (either plot-command splot-command replot-command fit-command 
print-command
+                   set-command cd-command call-command simple-command
+                   eval-command load-command lower-raise-command pause-command
+                   save-command system-command test-command undefine-command
+                   update-command assignment if-command new-if-command 
do-command)))
 
          (command-list
           (delimited-list command separator))
@@ -801,941 +801,941 @@ name; otherwise continues tokenizing up to the token at 
point. FIXME"
           (info-keyword "do" iteration-spec block))
 
 ;;; PLOT, SPLOT commands
-        (plot-command
-         [(kw ("pl" . "ot"))
-          
-          (either
-           ;; Parametric ranges
-           [(assert (gnuplot-guess-parametric-p))
-            (maybe t-axis-range) (maybe x-axis-range) (maybe y-axis-range)]
+         (plot-command
+          [(kw ("pl" . "ot"))
 
-           ;; Non-parametric ranges
-           [(maybe x-axis-range) (maybe y-axis-range)])
+           (either
+            ;; Parametric ranges
+            [(assert (gnuplot-guess-parametric-p))
+             (maybe t-axis-range) (maybe x-axis-range) (maybe y-axis-range)]
 
-          plot-body])
+            ;; Non-parametric ranges
+            [(maybe x-axis-range) (maybe y-axis-range)])
 
-        (splot-command
-         [ ;; This capturing group lets `gnuplot-find-using-eldoc' know
-          ;; that this is an splot command
-          (capture :splot-command (kw ("spl" . "ot")))
+           plot-body])
 
-          (either
-           ;; Parametric ranges
-           [(assert (gnuplot-guess-parametric-p))
-            (maybe u-axis-range) (maybe v-axis-range)
-            (maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)]
+         (splot-command
+          [ ;; This capturing group lets `gnuplot-find-using-eldoc' know
+           ;; that this is an splot command
+           (capture :splot-command (kw ("spl" . "ot")))
 
-           ;; Non-parametric ranges
-           [(maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)])
+           (either
+            ;; Parametric ranges
+            [(assert (gnuplot-guess-parametric-p))
+             (maybe u-axis-range) (maybe v-axis-range)
+             (maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)]
 
-          plot-body])
+            ;; Non-parametric ranges
+            [(maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)])
+
+           plot-body])
 
          (replot-command [(kw "replot") plot-body])
-        
-        ;; Axis ranges
-        (axis-range-component
-         (maybe (either "*" expression)))
-
-        (axis-range-body
-         (delimited-list axis-range-component ":" 2 3))
-        
-        (axis-range
-         [(:info "ranges")
-          "[" (maybe (maybe name "=") axis-range-body) "]"])
-        
-        (x-axis-range [(:eldoc "X RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-        (y-axis-range [(:eldoc "Y RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-        (z-axis-range [(:eldoc "Z RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-        (t-axis-range [(:eldoc "T RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-        (u-axis-range [(:eldoc "U RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-        (v-axis-range [(:eldoc "V RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-
-        ;; Body of a plot/splot command. Should really be different for
-        ;; parametric vs non-parametric, but that's too hard.
-        (plot-body
-         (delimited-list
-          [(maybe iteration-spec) plot-expression plot-modifiers]
-          ","))
-
-        ;; Iteration: for [... ]
-        (iteration-spec
-         [(:info "iteration")
-          (many1
+
+         ;; Axis ranges
+         (axis-range-component
+          (maybe (either "*" expression)))
+
+         (axis-range-body
+          (delimited-list axis-range-component ":" 2 3))
+
+         (axis-range
+          [(:info "ranges")
+           "[" (maybe (maybe name "=") axis-range-body) "]"])
+
+         (x-axis-range [(:eldoc "X RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+         (y-axis-range [(:eldoc "Y RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+         (z-axis-range [(:eldoc "Z RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+         (t-axis-range [(:eldoc "T RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+         (u-axis-range [(:eldoc "U RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+         (v-axis-range [(:eldoc "V RANGE: [{<dummy>=}<min>:<max>]") 
axis-range])
+
+         ;; Body of a plot/splot command. Should really be different for
+         ;; parametric vs non-parametric, but that's too hard.
+         (plot-body
+          (delimited-list
+           [(maybe iteration-spec) plot-expression plot-modifiers]
+           ","))
+
+         ;; Iteration: for [... ]
+         (iteration-spec
+          [(:info "iteration")
+           (many1
             "for" "[" name
             (either ["=" (delimited-list expression ":")]
                     ["in" expression])
             "]")])
-        
-        ;; Expressions to plot can be preceded by any number of
-        ;; assignments, with or without commas
-        (plot-expression
-         [(many [(:no-info) assignment (maybe ",")])
-          expression])
+
+         ;; Expressions to plot can be preceded by any number of
+         ;; assignments, with or without commas
+         (plot-expression
+          [(many [(:no-info) assignment (maybe ",")])
+           expression])
 
 ;;; Plot/splot modifiers
-        ;; These should probably be more different for plot and splot ...
-        (plot-modifiers (many (either plot-modifier datafile-modifier)))
-
-        (plot-modifier
-         (info-keyword
-          (either
-           ;; simple one-word modifiers
-           (kw "nohidden3d") (kw "nocontours") (kw "nosurface")
-           
-           ;; word followed by expression
-           [(either
-             (kw ("lines" . "tyle") "ls")
-             (kw ("linet" . "ype") "lt")
-             (kw ("linew" . "idth") "lw")
-             (kw ("pointt" . "ype") "pt")
-             (kw ("points" . "ize") "ps")
-             (kw ("pointi" . "nterval") "pi"))
-            expression]
-
-           ;; others defined below
-           title-modifier notitle-modifier axes-modifier with-modifier
-           linecolor-modifier fillstyle-modifier)))
-
-        (title-modifier
-         [(kw ("t" . "itle")) expression])
-        
-        (notitle-modifier
-         [(:info "title")
-          (kw ("not" . "itle"))
-          (maybe string)])
-
-        (axes-modifier
-         [(kw ("ax" . "es")) (either "x1y1" "x1y2" "x2y1" "x2y2")])
-
-        (linecolor-modifier
-         [(kw ("linec" . "olor") "lc") color-spec])
-
-        (fillstyle-modifier
-         [(kw "fillstyle" "fs")
-          ;; fill-style also used by "set style fill"
-          fill-style])
-        
-        (fill-style
-         [(either
-           "empty"
-           [(maybe "transparent")
-            (either "pattern" "solid")
-            (maybe (either fill-style-border-clause expression))])
-          (maybe fill-style-border-clause)])
-
-        (fill-style-border-clause
-         (either "noborder" [(kw ("bo" . "rder")) expression]))
-
-        (color-spec
-         [(:info "colorspec")
-          (either
-           (kw ("var" . "iable"))
-
-           [(kw ("pal" . "ette"))
-            (either "z"
-                    [(either "frac" "cb") expression])]
-
-           [(kw ("rgb" . "color"))
-            (either (kw ("var" . "iable")) string)])])
-
-        (with-modifier
-         [(:info "plotting_styles")
-          (kw ("w" . "ith"))
-          
-          ;; plotting-style also used for "set style data"
-          (capture :with-style plotting-style)])
-
-        (plotting-style
-         (info-keyword
-          (either
-           ;; Simple styles that take no arguments
-           (kw ("l" . "ines")) (kw ("i" . "mpulses")) (kw ("p" . "oints"))
-           (kw ("linesp" . "oints") "lp") (kw ("d" . "ots")) (kw ("yerrorl" . 
"ines"))
-           (kw ("errorl" . "ines")) (kw ("xerrorl" . "ines")) (kw ("xyerrorl" 
. "ines"))
-           (kw ("ye" . "rrorbars")) (kw ("e" . "rrorbars")) (kw ("xe" . 
"rrorbars"))
-           (kw ("xye" . "rrorbars")) (kw "boxes") (kw ("hist" . "ograms"))
-           (kw ("boxer" . "rorbars")) (kw ("boxx" . "yerrorbars")) (kw ("st" . 
"eps"))
-           (kw ("fs" . "teps")) (kw ("his" . "teps")) (kw ("fin" . "ancebars"))
-           (kw ("can" . "dlesticks")) (kw ("pm" . "3d"))
-           (kw ("cir" . "cles"))
-           
-           ;; Image styles all use the same info page
-           [(:info "image")
-            (either (kw ("ima" . "ge"))
-                    (kw ("rgbima" . "ge"))
-                    (kw ("rgba" . "lpha")))]
-           
-           ;; More complicated styles defined below
-           labels-style-clause
-           filledcurves-style-clause
-           vectors-style-clause)))
-
-        (labels-style-clause
-         [(kw "labels")
-          (maybe textcolor-spec)])
-          
-        (filledcurves-style-clause
-         [(kw ("filledc" . "urves"))
-          (maybe
-           (either
-            "closed"
-            
-            ["xy" "=" expression "," expression]
-
-            [(maybe (either "above" "below"))
-             (maybe [(either "x1" "x2" "y1" "y2")
-                     (maybe "=" expression)])]))])
-
-        (vectors-style-clause
-         [(kw ("vec" . "tors"))
-          (many
-           (either
-            "nohead" "head" "heads" "filled" "empty" "nofilled" "front" "back"
-            [(kw "arrowstyle" "as") expression]
-            ["size" (delimited-list expression ",")]
-            linestyle-spec))])
+         ;; These should probably be more different for plot and splot ...
+         (plot-modifiers (many (either plot-modifier datafile-modifier)))
+
+         (plot-modifier
+          (info-keyword
+           (either
+            ;; simple one-word modifiers
+            (kw "nohidden3d") (kw "nocontours") (kw "nosurface")
+
+            ;; word followed by expression
+            [(either
+              (kw ("lines" . "tyle") "ls")
+              (kw ("linet" . "ype") "lt")
+              (kw ("linew" . "idth") "lw")
+              (kw ("pointt" . "ype") "pt")
+              (kw ("points" . "ize") "ps")
+              (kw ("pointi" . "nterval") "pi"))
+             expression]
+
+            ;; others defined below
+            title-modifier notitle-modifier axes-modifier with-modifier
+            linecolor-modifier fillstyle-modifier)))
+
+         (title-modifier
+          [(kw ("t" . "itle")) expression])
+
+         (notitle-modifier
+          [(:info "title")
+           (kw ("not" . "itle"))
+           (maybe string)])
+
+         (axes-modifier
+          [(kw ("ax" . "es")) (either "x1y1" "x1y2" "x2y1" "x2y2")])
+
+         (linecolor-modifier
+          [(kw ("linec" . "olor") "lc") color-spec])
+
+         (fillstyle-modifier
+          [(kw "fillstyle" "fs")
+           ;; fill-style also used by "set style fill"
+           fill-style])
+
+         (fill-style
+          [(either
+            "empty"
+            [(maybe "transparent")
+             (either "pattern" "solid")
+             (maybe (either fill-style-border-clause expression))])
+           (maybe fill-style-border-clause)])
+
+         (fill-style-border-clause
+          (either "noborder" [(kw ("bo" . "rder")) expression]))
+
+         (color-spec
+          [(:info "colorspec")
+           (either
+            (kw ("var" . "iable"))
+
+            [(kw ("pal" . "ette"))
+             (either "z"
+                     [(either "frac" "cb") expression])]
+
+            [(kw ("rgb" . "color"))
+             (either (kw ("var" . "iable")) string)])])
+
+         (with-modifier
+          [(:info "plotting_styles")
+           (kw ("w" . "ith"))
+
+           ;; plotting-style also used for "set style data"
+           (capture :with-style plotting-style)])
+
+         (plotting-style
+          (info-keyword
+           (either
+            ;; Simple styles that take no arguments
+            (kw ("l" . "ines")) (kw ("i" . "mpulses")) (kw ("p" . "oints"))
+            (kw ("linesp" . "oints") "lp") (kw ("d" . "ots")) (kw ("yerrorl" . 
"ines"))
+            (kw ("errorl" . "ines")) (kw ("xerrorl" . "ines")) (kw ("xyerrorl" 
. "ines"))
+            (kw ("ye" . "rrorbars")) (kw ("e" . "rrorbars")) (kw ("xe" . 
"rrorbars"))
+            (kw ("xye" . "rrorbars")) (kw "boxes") (kw ("hist" . "ograms"))
+            (kw ("boxer" . "rorbars")) (kw ("boxx" . "yerrorbars")) (kw ("st" 
. "eps"))
+            (kw ("fs" . "teps")) (kw ("his" . "teps")) (kw ("fin" . 
"ancebars"))
+            (kw ("can" . "dlesticks")) (kw ("pm" . "3d"))
+            (kw ("cir" . "cles"))
+
+            ;; Image styles all use the same info page
+            [(:info "image")
+             (either (kw ("ima" . "ge"))
+                     (kw ("rgbima" . "ge"))
+                     (kw ("rgba" . "lpha")))]
+
+            ;; More complicated styles defined below
+            labels-style-clause
+            filledcurves-style-clause
+            vectors-style-clause)))
+
+         (labels-style-clause
+          [(kw "labels")
+           (maybe textcolor-spec)])
+
+         (filledcurves-style-clause
+          [(kw ("filledc" . "urves"))
+           (maybe
+            (either
+             "closed"
+
+             ["xy" "=" expression "," expression]
+
+             [(maybe (either "above" "below"))
+              (maybe [(either "x1" "x2" "y1" "y2")
+                      (maybe "=" expression)])]))])
+
+         (vectors-style-clause
+          [(kw ("vec" . "tors"))
+           (many
+            (either
+             "nohead" "head" "heads" "filled" "empty" "nofilled" "front" "back"
+             [(kw "arrowstyle" "as") expression]
+             ["size" (delimited-list expression ",")]
+             linestyle-spec))])
 
 ;;; Various style specifiers, used in different places
-        (linestyle-spec
-         (many1
-          (either
-           [(kw ("lines" . "tyle") "ls") expression]
-           [(kw ("linet" . "ype") "lt") expression]
-           [(kw ("linew" . "idth") "lw") expression])))
-        
-        (textcolor-spec
-         [(kw "textcolor" "tc")
-          (either "default"
-                  ["lt" expression]
-                  color-spec)])
-
-        (pointsize-spec [(kw "pointsize" "ps") expression])
+         (linestyle-spec
+          (many1
+           (either
+            [(kw ("lines" . "tyle") "ls") expression]
+            [(kw ("linet" . "ype") "lt") expression]
+            [(kw ("linew" . "idth") "lw") expression])))
+
+         (textcolor-spec
+          [(kw "textcolor" "tc")
+           (either "default"
+                   ["lt" expression]
+                   color-spec)])
+
+         (pointsize-spec [(kw "pointsize" "ps") expression])
 
 ;;; Datafile modifiers
-        (datafile-modifier
-         (info-keyword
-          (either binary-modifier
-                  [(maybe "nonuniform") (kw ("mat" . "rix"))]
-                  index-modifier every-modifier
-                  thru-modifier using-modifier
-                  smooth-modifier
-                  "volatile" "noautoscale")))
-        
-        (index-modifier
-         [(kw ("i" . "ndex"))
-          (either string (delimited-list expression ":" 0 2))])
-
-        (every-modifier
-         [(kw ("ev" . "ery")) (delimited-list (maybe expression) ":")])
-        
-        (thru-modifier
-         [(kw "thru") expression])
-        
-        (using-modifier
-         [(:eldoc gnuplot-find-using-eldoc) 
-          (kw ("u" . "sing"))
-          (either
-           string
-           [colon-list (maybe string)])])
-
-        (smooth-modifier
-         [(kw ("s" . "mooth"))
-          (either (kw ("a" . "csplines")) (kw ("b" . "ezier")) (kw ("c" . 
"splines"))
-                  (kw ("s" . "bezier")) (kw ("u" . "nique")) (kw ("f" . 
"requency"))
-                  (kw ("cum" . "ulative")) (kw ("k" . "density")))])
+         (datafile-modifier
+          (info-keyword
+           (either binary-modifier
+                   [(maybe "nonuniform") (kw ("mat" . "rix"))]
+                   index-modifier every-modifier
+                   thru-modifier using-modifier
+                   smooth-modifier
+                   "volatile" "noautoscale")))
+
+         (index-modifier
+          [(kw ("i" . "ndex"))
+           (either string (delimited-list expression ":" 0 2))])
+
+         (every-modifier
+          [(kw ("ev" . "ery")) (delimited-list (maybe expression) ":")])
+
+         (thru-modifier
+          [(kw "thru") expression])
+
+         (using-modifier
+          [(:eldoc gnuplot-find-using-eldoc)
+           (kw ("u" . "sing"))
+           (either
+            string
+            [colon-list (maybe string)])])
+
+         (smooth-modifier
+          [(kw ("s" . "mooth"))
+           (either (kw ("a" . "csplines")) (kw ("b" . "ezier")) (kw ("c" . 
"splines"))
+                   (kw ("s" . "bezier")) (kw ("u" . "nique")) (kw ("f" . 
"requency"))
+                   (kw ("cum" . "ulative")) (kw ("k" . "density")))])
 
 ;;; Binary datafile modifiers
-        (binary-modifier 
-         ["binary" (many binary-keyword)])
-
-        (binary-keyword
-         (either
-          ;; All of these binary keywords are described on the same
-          ;; info page
-          [(:info "keywords")
-           (either
-            "transpose" "flipx" "flipy" "flipz"
-            ["flip" "=" (either "x" "y" "z")]
-            ["scan" "=" name]
-            [(either "dx" "dy" "dz") "=" number]
-            [(either "origin" "center" "perpendicular") "="
-             (delimited-list tuple ":")]
-            [(kw ("rot" . "ate") "rotation") "="
-             (sequence expression (maybe (kw ("d" . "eg")) (kw ("p" . 
"i"))))])]
-
-          ;; remaining binary keywords have their own info pages
-          (info-keyword
-           (either
-            [(either "array" "record")
-             "="
-             (delimited-list expression ":")]
-
-            [(either "skip")
-             "="
-             (delimited-list expression ":")]
-           
-            [(either "format" "endian" "filetype")
-             "="
-             expression]))))
-        
+         (binary-modifier
+          ["binary" (many binary-keyword)])
+
+         (binary-keyword
+          (either
+           ;; All of these binary keywords are described on the same
+           ;; info page
+           [(:info "keywords")
+            (either
+             "transpose" "flipx" "flipy" "flipz"
+             ["flip" "=" (either "x" "y" "z")]
+             ["scan" "=" name]
+             [(either "dx" "dy" "dz") "=" number]
+             [(either "origin" "center" "perpendicular") "="
+              (delimited-list tuple ":")]
+             [(kw ("rot" . "ate") "rotation") "="
+              (sequence expression (maybe (kw ("d" . "eg")) (kw ("p" . 
"i"))))])]
+
+           ;; remaining binary keywords have their own info pages
+           (info-keyword
+            (either
+             [(either "array" "record")
+              "="
+              (delimited-list expression ":")]
+
+             [(either "skip")
+              "="
+              (delimited-list expression ":")]
+
+             [(either "format" "endian" "filetype")
+              "="
+              expression]))))
+
 ;;; "fit" command
-        (fit-command
-         [(:info "fit")
-          (kw "fit")
-          (many axis-range)
-          expression
-          string
-          (many plot-modifier)
-          (kw "via")
-          (either string (delimited-list name ","))])
+         (fit-command
+          [(:info "fit")
+           (kw "fit")
+           (many axis-range)
+           expression
+           string
+           (many plot-modifier)
+           (kw "via")
+           (either string (delimited-list name ","))])
 
 ;;; print command
-        (print-command
-         [(kw ("pr" . "int")) (delimited-list expression ",")])
+         (print-command
+          [(kw ("pr" . "int")) (delimited-list expression ",")])
 
 ;;; set commands
-        (set-command
-         [(:eldoc "set ...")
-          (:info "set-show")
-          (either (kw "set") (kw "unset") (kw "show"))
-          (maybe iteration-spec)
-          (info-keyword
-           (either set-angles-clause set-arrow-clause
-                   set-autoscale-clause set-bars-clause
-                   set-border-clause set-boxwidth-clause
-                   set-clabel-clause set-clip-clause
-                   set-cntrparam-clause set-colorbox-clause
-                   set-contour-clause set-datafile-clause
-                   set-decimalsign-clause set-dgrid3d-clause
-                   set-dummy-clause set-encoding-clause
-                   set-fit-clause set-fontpath-clause
-                   set-format-clause set-grid-clause
-                   set-hidden3d-clause set-historysize-clause
-                   set-isosamples-clause set-key-clause
-                   set-label-clause set-loadpath-clause
-                   set-locale-clause set-logscale-clause
-                   set-mapping-clause set-margin-clause
-                   set-multiplot-clause set-mxtics-clause
-                   set-object-clause set-offsets-clause
-                   set-origin-clause set-output-clause
-                   set-parametric-clause set-pm3d-clause
-                   set-palette-clause set-pointsize-clause
-                   set-polar-clause set-print-clause
-                   set-samples-clause set-size-clause
-                   set-style-clause
-                   set-surface-clause set-table-clause
-                   set-terminal-clause set-termoption-clause
-                   set-tics-clause set-tics-clause-2
-                   set-xtics-clause
-                   set-timestamp-clause set-timefmt-clause
-                   set-title-clause set-view-clause
-                   set-data-clause set-dtics-clause
-                   set-xlabel-clause
-                   set-mtics-clause set-range-clause
-                   set-xyplane-clause set-zero-clause
-                   set-zeroaxis-clause))])
-        
+         (set-command
+          [(:eldoc "set ...")
+           (:info "set-show")
+           (either (kw "set") (kw "unset") (kw "show"))
+           (maybe iteration-spec)
+           (info-keyword
+            (either set-angles-clause set-arrow-clause
+                    set-autoscale-clause set-bars-clause
+                    set-border-clause set-boxwidth-clause
+                    set-clabel-clause set-clip-clause
+                    set-cntrparam-clause set-colorbox-clause
+                    set-contour-clause set-datafile-clause
+                    set-decimalsign-clause set-dgrid3d-clause
+                    set-dummy-clause set-encoding-clause
+                    set-fit-clause set-fontpath-clause
+                    set-format-clause set-grid-clause
+                    set-hidden3d-clause set-historysize-clause
+                    set-isosamples-clause set-key-clause
+                    set-label-clause set-loadpath-clause
+                    set-locale-clause set-logscale-clause
+                    set-mapping-clause set-margin-clause
+                    set-multiplot-clause set-mxtics-clause
+                    set-object-clause set-offsets-clause
+                    set-origin-clause set-output-clause
+                    set-parametric-clause set-pm3d-clause
+                    set-palette-clause set-pointsize-clause
+                    set-polar-clause set-print-clause
+                    set-samples-clause set-size-clause
+                    set-style-clause
+                    set-surface-clause set-table-clause
+                    set-terminal-clause set-termoption-clause
+                    set-tics-clause set-tics-clause-2
+                    set-xtics-clause
+                    set-timestamp-clause set-timefmt-clause
+                    set-title-clause set-view-clause
+                    set-data-clause set-dtics-clause
+                    set-xlabel-clause
+                    set-mtics-clause set-range-clause
+                    set-xyplane-clause set-zero-clause
+                    set-zeroaxis-clause))])
+
 ;;; positions and coordinate systems for set options
-        (position-system
-         (either "first" "second" "graph" "screen" "character"))
-
-        (dimension [(maybe position-system) expression])
-        
-        (position
-         [dimension "," dimension (maybe "," dimension)])
-        
-        (to (either "to" "rto"))
-        
+         (position-system
+          (either "first" "second" "graph" "screen" "character"))
+
+         (dimension [(maybe position-system) expression])
+
+         (position
+          [dimension "," dimension (maybe "," dimension)])
+
+         (to (either "to" "rto"))
+
 ;;; all the different "set ... " options
-        (set-angles-clause
-         ["angles" (either "degrees" "radians")])
-        
-        (set-arrow-clause
-         ["arrow" (maybe number) 
-          (many
-           (either ["from" position] [to position]
-                   [(kw "arrowstyle" "as") expression]
-                   "nohead" "head" "backhead" "heads"
-                   ["size" dimension "," expression (maybe "," expression)]
-                   "filled" "empty" "nofilled" "front" "back"
-                   linecolor-modifier linestyle-spec))])
-
-        (set-autoscale-clause
-         ["autoscale"
-          (either "fix"
-                  "keepfix"
-                  "x" "y" "z" "cb" "x2" "y2" "xy"
-                  "xmin" "ymin" "zmin" "cbmin" "x2min" "y2min" 
-                  "xmax" "ymax" "zmax" "cbmax" "x2max" "y2max" 
-                  "xfix" "yfix" "zfix" "cbfix" "x2fix" "y2fix"
-                  "xfixmax" "yfixmax" "zfixmax" "cbfixmax" "x2fixmax" 
"y2fixmax"
-                  "xfixmin" "yfixmin" "zfixmin" "cbfixmin" "x2fixmin" 
"y2fixmin")])
-
-        (set-bars-clause
-         ["bars"
-          (either expression "small" "large" "fullwidth")
-          (either "front" "back")])
-
-        (set-border-clause
-         ["border"
-          (maybe number)
-          (maybe (either "front" "back"))
-          (maybe (kw "linewidth" "lw") expression)
-          (maybe
-           (either (kw "linestyle" "ls") (kw "linetype" "lt"))
-           expression)])
-
-        (set-boxwidth-clause
-         ["boxwidth"
-          (maybe expression)
-          (maybe (either (kw ("abs" . "olute")) "relative"))])
-
-        (set-clabel-clause
-         ["clabel" (maybe string)])
-
-        (set-clip-clause
-         ["clip" (maybe (either "points" "one" "two"))])
-
-        (set-cntrparam-clause
-         [(kw "cntrparam")
-          (either
-           "linear" "cubicspline" "bspline"
-           
-           [(either "points" "order") number]
-           
-           [(kw "levels")
-            (either
-             number
-             (sequence (kw "auto") (maybe number))
-             (sequence
-              (kw "discrete") comma-list)
-             (sequence
-              (kw "incremental") (delimited-list expression "," 2 3)))])])
-
-        (set-colorbox-clause
-         [(:info "color_box")
-          (kw ("colorb" . "ox"))
-          (many
-           (either
-            (kw ("vert" . "ical")) (kw ("horiz" . "ontal"))
-            "default" "user"
-            ["origin" expression "," expression]
-            ["size" expression "," expression]
-            "front" "back"
-            "noborder" "bdefault"
-            ["border" expression]))])
-
-        (set-contour-clause
-         ["contour" (either "base" "surface" "both")])
-
-        (set-datafile-clause
-         ["datafile"
-          (either [(:info "set_datafile_fortran")
-                   "fortran"]
-                  [(:info "set_datafile_nofpe_trap")
-                   "nofpe_trap"]
-                  [(:info "set_datafile_missing")
-                   "missing" (maybe string)]
-                  [(:info "set_datafile_separator")
-                   "separator" (either "whitespace" string)]
-                  [(:info "set_datafile_commentschars")
-                   "commentschars" (maybe string)]
-                  [(:info "set_datafile_binary")
-                   "binary" (many binary-keyword)])])
-
-        (set-decimalsign-clause
-         ["decimalsign"
-          (either string ["locale" (maybe string)])])
-
-        (set-dgrid3d-clause
-         ["dgrid3d"
-          (maybe expression)           ; fixme
-          (maybe "," expression)
-          (either
-           "splines"
-           ["qnorm" expression]
-           [(either "gauss" "cauchy" "exp" "box" "hann")
-            (maybe expression)
-            (maybe "," expression)])])
-
-        (set-dummy-clause
-         ["dummy"
-          name (maybe "," name)])
-
-        (set-encoding-clause
-         ["encoding"
-          (either "default" "iso_8859_1" "iso_8859_15" "iso_8859_2" 
"iso_8859_9"
-                  "koi8r" "koi8u" "cp437" "cp850" "cp852" "cp1250" "cp1251" 
"cp1254"
-                  "utf8" "locale")])
-
-        (set-fit-clause
-         [(:info "fit_")
-          "fit"
-          (either
-           ["logfile" string]
-           "errorvariables" "noerrorvariables")])
-
-        (set-fontpath-clause
-         ["fontpath" (many string)])
-
-        (set-format-clause
-         [(:info "format_")
-          "format"
-          (maybe (either "x" "y" "xy" "x2" "y2" "z" "cb"))
-          string])
-
-        (set-grid-clause
-         ["grid"
-          (either "nomxtics" "mxtics" "noxtics" "xtics" "nomytics" "mytics"
-                  "noytics" "ytics" "nomztics" "mztics" "noztics" "ztics"
-                  "nomx2tics" "mx2tics" "nox2tics" "x2tics" "nomy2tics"
-                  "my2tics" "noy2tics" "y2tics" "nomcbtics" "mcbtics"
-                  "nocbtics" "cbtics" "layerdefault" "front" "back"
-                  [linestyle-spec (maybe "," linestyle-spec)])])
-
-        (set-hidden3d-clause
-         [(kw ("hidden" . "3d"))
-          (many
-           (either
-            "defaults" "front" "back"
-            ["offset" expression] "nooffset"
-            ["trianglepattern"
-             (either "0" "1" "2" "3" "4" "5" "6" "7")]
-            ["undefined" (either "1" "2" "3")]
-            ["noundefined"]
-            "altdiagonal" "noaltdiagonal"
-            "bentover" "nobentover"))])
-        
-        (set-historysize-clause
-         ["historysize" number])
-
-        (set-isosamples-clause
-         [(kw ("isosam" . "ples")) number (maybe "," number)])
-
-        (set-key-clause
-         ["key"
-          (many
-           (either "on" "off" "default"
-                   [(either "inside" "outside")
-                    (either "lmargin" "rmargin" "tmargin" "bmargin")]
-                   ["at" expression "," expression]
-                   "left" "right" "center" "top" "bottom" "vertical"
-                   "horizontal" "Left" "Right" "reverse" "noreverse" "invert"
-                   "noinvert" "above" "over" "below" "under"
-                   ["samplen" number]
-                   ["spacing" number]
-                   ["width" number]
-                   [(either "autotitle" "noautotitle") (maybe "columnheader")]
-                   ["title" expression] "enhanced" "noenhanced" ["font" string]
-                   textcolor-spec
-                   [(either "box" "nobox") linestyle-spec]
-                   ["maxcols" (either expression "auto")]
-                   ["maxrows" (either expression "auto")]))])
-
-        (set-label-clause
-         ["label"
-          (maybe expression)
-          (either label-clause-component expression)
-          (many label-clause-component)])
-
-        (label-clause-component
-         (either
-          ["at" position]
-          "left" "center" "right"
-          (either "norotate" ["rotate" "by" expression])
-          ["font" string]
-          "noenhanced"
-          "front" "back"
-          textcolor-spec
-          "nopoint" ["point" (many (either pointsize-spec linestyle-spec))]
-          ["offset" position]))
-
-        (set-loadpath-clause
-         ["loadpath" (many string)])
-
-        (set-locale-clause
-         ["locale" (maybe string)])
-
-        (set-logscale-clause
-         ["logscale"
-          (either "x" "y" "xy" "x2" "y2" "z" "cb" name)])
-
-        (set-mapping-clause
-         ["mapping" (either "cartesian" "spherical" "cylindrical")])
-
-        (set-margin-clause
-         [(either "bmargin" "lmargin" "rmargin" "tmargin")
-          (maybe "at" "screen") expression])
-
-        ;; TODO: set-mouse-clause
-
-        (set-multiplot-clause
-         ["multiplot"
-          (maybe
-           ["layout" number "," number
-            (maybe (either "rowsfirst" "columnsfirst"))
-            (maybe (either "downwards" "upwards"))
-            (maybe "title" string)
-            (maybe "scale" number (maybe "," number))
-            (maybe "offset" number (maybe "," number))])])
-
-        (set-mxtics-clause
-         [(:info "mxtics")
-          (either "mxtics" "mytics" "mztics" "mx2tics" "my2tics" "mcbtics")
-          (either "default" number)])
-
-        ;; "set object", objects, dimensions, positions
-        (set-object-clause
-         ["object"
-          (maybe number)
-          (info-keyword
-           (either rectangle-object ellipse-object circle-object 
polygon-object))
-          (maybe (either "front" "back" "behind"))
-          (maybe (kw "fillcolor" "fc") color-spec)
-          (maybe "fs" expression)
-          (maybe "default")
-          (maybe (kw "linewidth" "lw") expression)])
-        
-        (rectangle-object
-         [(kw ("rect" . "angle"))
-          (maybe
-           (either
-            ["from" position (either "to" "rto") position]
-            ["center" position "size" dimension "," dimension]
-            ["at" position "size" dimension "," dimension]))])
-
-        (ellipse-object
-         ["ellipse"
-          (either "at" "center") position
-          "size" dimension "," dimension
-          (maybe "angle" number)])
-
-        (circle-object
-         ["circle"
-          (either "at" "center") position
-          "size" dimension
-          (maybe "arc" "[" number ":" number "]")])
-
-        (polygon-object
-         ["polygon"
-          "from" position (many (either "to" "rto") position)])
-
-        ;; "set offsets"
-        (set-offsets-clause
-         ["offsets"
-          (delimited-list [(maybe "graph") expression] "," 4 4)])
-
-        (set-origin-clause
-         ["origin" expression "," expression])
-
-        (set-output-clause
-         ["output" (maybe string)])
-
-        (set-parametric-clause
-         [(:info "parametric_")
-          (kw ("param" . "etric"))])
-
-        (set-pm3d-clause
-         ["pm3d"
-          (many
-           (either
-            ["at" name]
-            ["interpolate" number "," number]
-            (either "scansautomatic" "scansforward" "scansbackward" 
"depthorder")
-            ["flush" (either "begin" "center" "end")]
-            (either "ftriangles" "noftriangles")
-            (either "clip1in" "clip4in")
-            ["corners2color"
-             (either "mean" "geomean" "median" "min" "max" "c1" "c2" "c3" 
"c4")]
-            ["hidden3d" number]
-            "nohidden3d"
-            "implicit" "explicit" "map"))])
-
-        (set-palette-clause
-         ["palette"
-          (many
-           (either
-            "gray" "color"
-            ["gamma" number]
-            ["rgbformulae" number "," number "," number]
-            "defined"                  ; not complete
-            ["functions" expression "," expression "," expression]
-            ["file" string (many datafile-modifier)]
-            "RGB" "HSV" "CMY" "YIQ" "XYZ"
-            "positive" "negative"
-            "nops_allcF" "ps_allcF"
-            ["maxcolors" number]))])
-
-        (set-pointsize-clause pointsize-spec)
-
-        (set-polar-clause "polar")
-
-        (set-print-clause
-         [(:info "print_")
-          "print"
-          (maybe string)])
-
-        (set-samples-clause
-         ["samples" expression (maybe "," expression)])
-
-        (set-size-clause
-         ["size"
-          (either
-           "square" "nosquare"
-           ["ratio" expression]
-           "noratio"
-           [expression "," expression])])
-
-        (set-style-clause
-         ["style"
-          (either style-arrow-clause style-data-clause style-fill-clause
-                  style-function-clause style-increment-clause
-                  style-line-clause style-circle-clause 
style-rectangle-clause)])
-
-        ;; begin subclauses of "set style ..."
-        (style-arrow-clause
-         [(:info "set_style_arrow")
-          "arrow"
-          number
-          (either
-           "default"
-           (many
-            (either "nohead" "head" "heads"
-                    "filled" "empty" "nofilled"
-                    "front" "back"
-                    ["size" dimension "," number (maybe "," number)]
-                    linestyle-spec)))])
-
-        (style-data-clause
-         [(:info "set_style_data")
-          "data" plotting-style])
-
-        (style-fill-clause
-         [(:info "set_style_fill")
-          "fill" fill-style])
-
-        (style-function-clause
-         [(:info "set_style_function")
-          "function" plotting-style])
-
-        (style-increment-clause
-         [(:info "set_style_increment")
-          "increment"
-          (either (kw ("d" . "efault")) (kw ("u" . "serstyles")))])
-
-        (style-line-clause
-         [(:info "set_style_line")
-          "line"
-          expression
-          (either
-           "default"
-           (many
-            (either
-             "palette"
-             [(kw ("linet" . "ype") "lt")
-              (either expression color-spec)]
-             [(kw ("linec" . "olor") "lc") color-spec]
-             [(either (kw ("linew" . "idth") "lw")
-                      (kw ("pointt" . "ype") "pt")
-                      (kw ("points" . "ize") "ps")
-                      (kw ("pointi" . "nterval") "pi"))
-              expression])))])
-
-        (style-circle-clause
-         [(:info "set_style_circle")
-          "circle" "radius" dimension])
-
-        (style-rectangle-clause
-         [(:info "set_style_rectangle")
-          "rectangle"
-          (many
-           (either
-            "front" "back"
-            [(kw ("linew" . "idth") "lw") expression]
-            [(kw "fillcolor" "fc") color-spec]
-            ["fs" expression]))])
-        ;; end of "set style ..." clauses
-
-        (set-surface-clause "surface")
-        
-        (set-table-clause ["table" (maybe string)])
-
-        (set-terminal-clause           ; not sure how to do this...
-         ["terminal" (maybe (either "push" "pop"))])
-
-        (set-termoption-clause
-         ["termoption"
-          (either
-           "enhanced" "noenhanced"
-           ["font" string]
-           "solid" "dashed"
-           [(kw "linewidth" "lw") expression])])
-
-        (set-tics-clause
-         ["tics"
-          (many
-           (either
-            "axis" "border" "mirror" "nomirror" "in" "out"
-            ["scale" (either "default" [expression (maybe "," expression)])]
-            [(either "rotate" "norotate") (maybe "by" expression)]
-            ["offset" expression] "nooffset"
-            ["format" string]
-            ["font" string]
-            textcolor-spec))])
-
-        (set-tics-clause-2
-         ["tics" (either "front" "back")])
-        
-        (set-xtics-clause
-         [(:info "xtics")
-          (either "xtics" "ytics" "ztics" "x2tics" "y2tics" "cbtics")
-          (many
-           (either
-            "axis" "border" "mirror" "nomirror" "in" "out"
-            ["scale" (either "default" [expression (maybe "," expression)])]
-            [(either "rotate" "norotate") (maybe "by" expression)]
-            ["offset" position] "nooffset"
-            "add" "autofreq"
-            ["(" (delimited-list [(maybe string) expression (maybe number)] 
",") ")"]
-            ["format" string]
-            ["font" string]
-            "rangelimited"
-            textcolor-spec
-            (delimited-list expression ",")))])
-
-        (set-timestamp-clause
-         ["timestamp"
-          (maybe string)
-          (maybe (either "top" "bottom"))
-          (maybe (either "rotate" "norotate"))
-          (maybe "offset" position)
-          (maybe "font" string)])
-
-        (set-timefmt-clause
-         ["timefmt" string])
-
-        (set-title-clause
-         [(:info "title_")
-          "title" 
-          (maybe expression)
-          (many
-           (either
-            ["offset" position] 
-            ["font" string]
-            textcolor-spec
-            "enhanced" "noenhanced"))])
-
-        (set-view-clause
-         ["view"
-          (either
-           "map"
-           [(either "equal" "noequal") (maybe (either "xy" "xyz"))]
-           (delimited-list (maybe expression) ","))])
-
-        (set-data-clause
-         [(:info "xdata")
-          (either "xdata" "ydata" "zdata" "x2data" "y2data" "cbdata")
-          (maybe (either "time" "geographic"))])
-
-        (set-dtics-clause
-         [(:info "xdtics")
-          (either "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics" "cbdtics")])
-
-        (set-xlabel-clause
-         [(:info "xlabel")
-          (either (kw ("xlab" . "el")) (kw ("ylab" . "el"))
-                  (kw ("zlab" . "el")) (kw ("x2lab" . "el"))
-                  (kw ("y2lab" . "el")) (kw ("cblab" . "el")))
-          (maybe expression)
-          (many
-           (either
-            ["offset" position] 
-            ["font" string]
-            textcolor-spec
-            "enhanced" "noenhanced"))])
-        
-        (set-mtics-clause
-         [(:info "xmtics")
-          (either "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics" "cbmtics")])
-        
-        (set-range-clause
-         [(:info "xrange")
-          (either (kw ("xr" . "ange")) (kw ("yr" . "ange"))
+         (set-angles-clause
+          ["angles" (either "degrees" "radians")])
+
+         (set-arrow-clause
+          ["arrow" (maybe number)
+           (many
+            (either ["from" position] [to position]
+                    [(kw "arrowstyle" "as") expression]
+                    "nohead" "head" "backhead" "heads"
+                    ["size" dimension "," expression (maybe "," expression)]
+                    "filled" "empty" "nofilled" "front" "back"
+                    linecolor-modifier linestyle-spec))])
+
+         (set-autoscale-clause
+          ["autoscale"
+           (either "fix"
+                   "keepfix"
+                   "x" "y" "z" "cb" "x2" "y2" "xy"
+                   "xmin" "ymin" "zmin" "cbmin" "x2min" "y2min"
+                   "xmax" "ymax" "zmax" "cbmax" "x2max" "y2max"
+                   "xfix" "yfix" "zfix" "cbfix" "x2fix" "y2fix"
+                   "xfixmax" "yfixmax" "zfixmax" "cbfixmax" "x2fixmax" 
"y2fixmax"
+                   "xfixmin" "yfixmin" "zfixmin" "cbfixmin" "x2fixmin" 
"y2fixmin")])
+
+         (set-bars-clause
+          ["bars"
+           (either expression "small" "large" "fullwidth")
+           (either "front" "back")])
+
+         (set-border-clause
+          ["border"
+           (maybe number)
+           (maybe (either "front" "back"))
+           (maybe (kw "linewidth" "lw") expression)
+           (maybe
+            (either (kw "linestyle" "ls") (kw "linetype" "lt"))
+            expression)])
+
+         (set-boxwidth-clause
+          ["boxwidth"
+           (maybe expression)
+           (maybe (either (kw ("abs" . "olute")) "relative"))])
+
+         (set-clabel-clause
+          ["clabel" (maybe string)])
+
+         (set-clip-clause
+          ["clip" (maybe (either "points" "one" "two"))])
+
+         (set-cntrparam-clause
+          [(kw "cntrparam")
+           (either
+            "linear" "cubicspline" "bspline"
+
+            [(either "points" "order") number]
+
+            [(kw "levels")
+             (either
+              number
+              (sequence (kw "auto") (maybe number))
+              (sequence
+               (kw "discrete") comma-list)
+              (sequence
+               (kw "incremental") (delimited-list expression "," 2 3)))])])
+
+         (set-colorbox-clause
+          [(:info "color_box")
+           (kw ("colorb" . "ox"))
+           (many
+            (either
+             (kw ("vert" . "ical")) (kw ("horiz" . "ontal"))
+             "default" "user"
+             ["origin" expression "," expression]
+             ["size" expression "," expression]
+             "front" "back"
+             "noborder" "bdefault"
+             ["border" expression]))])
+
+         (set-contour-clause
+          ["contour" (either "base" "surface" "both")])
+
+         (set-datafile-clause
+          ["datafile"
+           (either [(:info "set_datafile_fortran")
+                    "fortran"]
+                   [(:info "set_datafile_nofpe_trap")
+                    "nofpe_trap"]
+                   [(:info "set_datafile_missing")
+                    "missing" (maybe string)]
+                   [(:info "set_datafile_separator")
+                    "separator" (either "whitespace" string)]
+                   [(:info "set_datafile_commentschars")
+                    "commentschars" (maybe string)]
+                   [(:info "set_datafile_binary")
+                    "binary" (many binary-keyword)])])
+
+         (set-decimalsign-clause
+          ["decimalsign"
+           (either string ["locale" (maybe string)])])
+
+         (set-dgrid3d-clause
+          ["dgrid3d"
+           (maybe expression)          ; fixme
+           (maybe "," expression)
+           (either
+            "splines"
+            ["qnorm" expression]
+            [(either "gauss" "cauchy" "exp" "box" "hann")
+             (maybe expression)
+             (maybe "," expression)])])
+
+         (set-dummy-clause
+          ["dummy"
+           name (maybe "," name)])
+
+         (set-encoding-clause
+          ["encoding"
+           (either "default" "iso_8859_1" "iso_8859_15" "iso_8859_2" 
"iso_8859_9"
+                   "koi8r" "koi8u" "cp437" "cp850" "cp852" "cp1250" "cp1251" 
"cp1254"
+                   "utf8" "locale")])
+
+         (set-fit-clause
+          [(:info "fit_")
+           "fit"
+           (either
+            ["logfile" string]
+            "errorvariables" "noerrorvariables")])
+
+         (set-fontpath-clause
+          ["fontpath" (many string)])
+
+         (set-format-clause
+          [(:info "format_")
+           "format"
+           (maybe (either "x" "y" "xy" "x2" "y2" "z" "cb"))
+           string])
+
+         (set-grid-clause
+          ["grid"
+           (either "nomxtics" "mxtics" "noxtics" "xtics" "nomytics" "mytics"
+                   "noytics" "ytics" "nomztics" "mztics" "noztics" "ztics"
+                   "nomx2tics" "mx2tics" "nox2tics" "x2tics" "nomy2tics"
+                   "my2tics" "noy2tics" "y2tics" "nomcbtics" "mcbtics"
+                   "nocbtics" "cbtics" "layerdefault" "front" "back"
+                   [linestyle-spec (maybe "," linestyle-spec)])])
+
+         (set-hidden3d-clause
+          [(kw ("hidden" . "3d"))
+           (many
+            (either
+             "defaults" "front" "back"
+             ["offset" expression] "nooffset"
+             ["trianglepattern"
+              (either "0" "1" "2" "3" "4" "5" "6" "7")]
+             ["undefined" (either "1" "2" "3")]
+             ["noundefined"]
+             "altdiagonal" "noaltdiagonal"
+             "bentover" "nobentover"))])
+
+         (set-historysize-clause
+          ["historysize" number])
+
+         (set-isosamples-clause
+          [(kw ("isosam" . "ples")) number (maybe "," number)])
+
+         (set-key-clause
+          ["key"
+           (many
+            (either "on" "off" "default"
+                    [(either "inside" "outside")
+                     (either "lmargin" "rmargin" "tmargin" "bmargin")]
+                    ["at" expression "," expression]
+                    "left" "right" "center" "top" "bottom" "vertical"
+                    "horizontal" "Left" "Right" "reverse" "noreverse" "invert"
+                    "noinvert" "above" "over" "below" "under"
+                    ["samplen" number]
+                    ["spacing" number]
+                    ["width" number]
+                    [(either "autotitle" "noautotitle") (maybe "columnheader")]
+                    ["title" expression] "enhanced" "noenhanced" ["font" 
string]
+                    textcolor-spec
+                    [(either "box" "nobox") linestyle-spec]
+                    ["maxcols" (either expression "auto")]
+                    ["maxrows" (either expression "auto")]))])
+
+         (set-label-clause
+          ["label"
+           (maybe expression)
+           (either label-clause-component expression)
+           (many label-clause-component)])
+
+         (label-clause-component
+          (either
+           ["at" position]
+           "left" "center" "right"
+           (either "norotate" ["rotate" "by" expression])
+           ["font" string]
+           "noenhanced"
+           "front" "back"
+           textcolor-spec
+           "nopoint" ["point" (many (either pointsize-spec linestyle-spec))]
+           ["offset" position]))
+
+         (set-loadpath-clause
+          ["loadpath" (many string)])
+
+         (set-locale-clause
+          ["locale" (maybe string)])
+
+         (set-logscale-clause
+          ["logscale"
+           (either "x" "y" "xy" "x2" "y2" "z" "cb" name)])
+
+         (set-mapping-clause
+          ["mapping" (either "cartesian" "spherical" "cylindrical")])
+
+         (set-margin-clause
+          [(either "bmargin" "lmargin" "rmargin" "tmargin")
+           (maybe "at" "screen") expression])
+
+         ;; TODO: set-mouse-clause
+
+         (set-multiplot-clause
+          ["multiplot"
+           (maybe
+            ["layout" number "," number
+             (maybe (either "rowsfirst" "columnsfirst"))
+             (maybe (either "downwards" "upwards"))
+             (maybe "title" string)
+             (maybe "scale" number (maybe "," number))
+             (maybe "offset" number (maybe "," number))])])
+
+         (set-mxtics-clause
+          [(:info "mxtics")
+           (either "mxtics" "mytics" "mztics" "mx2tics" "my2tics" "mcbtics")
+           (either "default" number)])
+
+         ;; "set object", objects, dimensions, positions
+         (set-object-clause
+          ["object"
+           (maybe number)
+           (info-keyword
+            (either rectangle-object ellipse-object circle-object 
polygon-object))
+           (maybe (either "front" "back" "behind"))
+           (maybe (kw "fillcolor" "fc") color-spec)
+           (maybe "fs" expression)
+           (maybe "default")
+           (maybe (kw "linewidth" "lw") expression)])
+
+         (rectangle-object
+          [(kw ("rect" . "angle"))
+           (maybe
+            (either
+             ["from" position (either "to" "rto") position]
+             ["center" position "size" dimension "," dimension]
+             ["at" position "size" dimension "," dimension]))])
+
+         (ellipse-object
+          ["ellipse"
+           (either "at" "center") position
+           "size" dimension "," dimension
+           (maybe "angle" number)])
+
+         (circle-object
+          ["circle"
+           (either "at" "center") position
+           "size" dimension
+           (maybe "arc" "[" number ":" number "]")])
+
+         (polygon-object
+          ["polygon"
+           "from" position (many (either "to" "rto") position)])
+
+         ;; "set offsets"
+         (set-offsets-clause
+          ["offsets"
+           (delimited-list [(maybe "graph") expression] "," 4 4)])
+
+         (set-origin-clause
+          ["origin" expression "," expression])
+
+         (set-output-clause
+          ["output" (maybe string)])
+
+         (set-parametric-clause
+          [(:info "parametric_")
+           (kw ("param" . "etric"))])
+
+         (set-pm3d-clause
+          ["pm3d"
+           (many
+            (either
+             ["at" name]
+             ["interpolate" number "," number]
+             (either "scansautomatic" "scansforward" "scansbackward" 
"depthorder")
+             ["flush" (either "begin" "center" "end")]
+             (either "ftriangles" "noftriangles")
+             (either "clip1in" "clip4in")
+             ["corners2color"
+              (either "mean" "geomean" "median" "min" "max" "c1" "c2" "c3" 
"c4")]
+             ["hidden3d" number]
+             "nohidden3d"
+             "implicit" "explicit" "map"))])
+
+         (set-palette-clause
+          ["palette"
+           (many
+            (either
+             "gray" "color"
+             ["gamma" number]
+             ["rgbformulae" number "," number "," number]
+             "defined"                 ; not complete
+             ["functions" expression "," expression "," expression]
+             ["file" string (many datafile-modifier)]
+             "RGB" "HSV" "CMY" "YIQ" "XYZ"
+             "positive" "negative"
+             "nops_allcF" "ps_allcF"
+             ["maxcolors" number]))])
+
+         (set-pointsize-clause pointsize-spec)
+
+         (set-polar-clause "polar")
+
+         (set-print-clause
+          [(:info "print_")
+           "print"
+           (maybe string)])
+
+         (set-samples-clause
+          ["samples" expression (maybe "," expression)])
+
+         (set-size-clause
+          ["size"
+           (either
+            "square" "nosquare"
+            ["ratio" expression]
+            "noratio"
+            [expression "," expression])])
+
+         (set-style-clause
+          ["style"
+           (either style-arrow-clause style-data-clause style-fill-clause
+                   style-function-clause style-increment-clause
+                   style-line-clause style-circle-clause 
style-rectangle-clause)])
+
+         ;; begin subclauses of "set style ..."
+         (style-arrow-clause
+          [(:info "set_style_arrow")
+           "arrow"
+           number
+           (either
+            "default"
+            (many
+             (either "nohead" "head" "heads"
+                     "filled" "empty" "nofilled"
+                     "front" "back"
+                     ["size" dimension "," number (maybe "," number)]
+                     linestyle-spec)))])
+
+         (style-data-clause
+          [(:info "set_style_data")
+           "data" plotting-style])
+
+         (style-fill-clause
+          [(:info "set_style_fill")
+           "fill" fill-style])
+
+         (style-function-clause
+          [(:info "set_style_function")
+           "function" plotting-style])
+
+         (style-increment-clause
+          [(:info "set_style_increment")
+           "increment"
+           (either (kw ("d" . "efault")) (kw ("u" . "serstyles")))])
+
+         (style-line-clause
+          [(:info "set_style_line")
+           "line"
+           expression
+           (either
+            "default"
+            (many
+             (either
+              "palette"
+              [(kw ("linet" . "ype") "lt")
+               (either expression color-spec)]
+              [(kw ("linec" . "olor") "lc") color-spec]
+              [(either (kw ("linew" . "idth") "lw")
+                       (kw ("pointt" . "ype") "pt")
+                       (kw ("points" . "ize") "ps")
+                       (kw ("pointi" . "nterval") "pi"))
+               expression])))])
+
+         (style-circle-clause
+          [(:info "set_style_circle")
+           "circle" "radius" dimension])
+
+         (style-rectangle-clause
+          [(:info "set_style_rectangle")
+           "rectangle"
+           (many
+            (either
+             "front" "back"
+             [(kw ("linew" . "idth") "lw") expression]
+             [(kw "fillcolor" "fc") color-spec]
+             ["fs" expression]))])
+         ;; end of "set style ..." clauses
+
+         (set-surface-clause "surface")
+
+         (set-table-clause ["table" (maybe string)])
+
+         (set-terminal-clause          ; not sure how to do this...
+          ["terminal" (maybe (either "push" "pop"))])
+
+         (set-termoption-clause
+          ["termoption"
+           (either
+            "enhanced" "noenhanced"
+            ["font" string]
+            "solid" "dashed"
+            [(kw "linewidth" "lw") expression])])
+
+         (set-tics-clause
+          ["tics"
+           (many
+            (either
+             "axis" "border" "mirror" "nomirror" "in" "out"
+             ["scale" (either "default" [expression (maybe "," expression)])]
+             [(either "rotate" "norotate") (maybe "by" expression)]
+             ["offset" expression] "nooffset"
+             ["format" string]
+             ["font" string]
+             textcolor-spec))])
+
+         (set-tics-clause-2
+          ["tics" (either "front" "back")])
+
+         (set-xtics-clause
+          [(:info "xtics")
+           (either "xtics" "ytics" "ztics" "x2tics" "y2tics" "cbtics")
+           (many
+            (either
+             "axis" "border" "mirror" "nomirror" "in" "out"
+             ["scale" (either "default" [expression (maybe "," expression)])]
+             [(either "rotate" "norotate") (maybe "by" expression)]
+             ["offset" position] "nooffset"
+             "add" "autofreq"
+             ["(" (delimited-list [(maybe string) expression (maybe number)] 
",") ")"]
+             ["format" string]
+             ["font" string]
+             "rangelimited"
+             textcolor-spec
+             (delimited-list expression ",")))])
+
+         (set-timestamp-clause
+          ["timestamp"
+           (maybe string)
+           (maybe (either "top" "bottom"))
+           (maybe (either "rotate" "norotate"))
+           (maybe "offset" position)
+           (maybe "font" string)])
+
+         (set-timefmt-clause
+          ["timefmt" string])
+
+         (set-title-clause
+          [(:info "title_")
+           "title"
+           (maybe expression)
+           (many
+            (either
+             ["offset" position]
+             ["font" string]
+             textcolor-spec
+             "enhanced" "noenhanced"))])
+
+         (set-view-clause
+          ["view"
+           (either
+            "map"
+            [(either "equal" "noequal") (maybe (either "xy" "xyz"))]
+            (delimited-list (maybe expression) ","))])
+
+         (set-data-clause
+          [(:info "xdata")
+           (either "xdata" "ydata" "zdata" "x2data" "y2data" "cbdata")
+           (maybe (either "time" "geographic"))])
+
+         (set-dtics-clause
+          [(:info "xdtics")
+           (either "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics" "cbdtics")])
+
+         (set-xlabel-clause
+          [(:info "xlabel")
+           (either (kw ("xlab" . "el")) (kw ("ylab" . "el"))
+                   (kw ("zlab" . "el")) (kw ("x2lab" . "el"))
+                   (kw ("y2lab" . "el")) (kw ("cblab" . "el")))
+           (maybe expression)
+           (many
+            (either
+             ["offset" position]
+             ["font" string]
+             textcolor-spec
+             "enhanced" "noenhanced"))])
+
+         (set-mtics-clause
+          [(:info "xmtics")
+           (either "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics" "cbmtics")])
+
+         (set-range-clause
+          [(:info "xrange")
+           (either (kw ("xr" . "ange")) (kw ("yr" . "ange"))
                    (kw ("x2r" . "ange")) (kw ("y2r" . "ange"))
-                  (kw ("zr" . "ange")) (kw ("tr" . "ange"))
-                  (kw ("ur" . "ange")) (kw ("vr" . "ange"))
-                  (kw ("rr" . "ange")) (kw ("cbr" . "ange")))
-          (either
-           "restore"
-           ["[" (maybe
-                 [(maybe axis-range-component) ":"
-                  (maybe axis-range-component)])
-            "]"
-            (many (either "reverse" "noreverse" "writeback" "nowriteback"))])])
-            
-        (set-xyplane-clause
-         ["xyplane" (either "at" "relative") expression])
-
-        (set-zero-clause
-         ["zero" expression])
-
-        (set-zeroaxis-clause
-         [(:info "zeroaxis")
-          (either "zeroaxis" "xzeroaxis" "x2zeroaxis" "yzeroaxis" "y2zeroaxis"
-                  "zzeroaxis")
-          (maybe linestyle-spec)])
-        
+                   (kw ("zr" . "ange")) (kw ("tr" . "ange"))
+                   (kw ("ur" . "ange")) (kw ("vr" . "ange"))
+                   (kw ("rr" . "ange")) (kw ("cbr" . "ange")))
+           (either
+            "restore"
+            ["[" (maybe
+                  [(maybe axis-range-component) ":"
+                   (maybe axis-range-component)])
+             "]"
+             (many (either "reverse" "noreverse" "writeback" 
"nowriteback"))])])
+
+         (set-xyplane-clause
+          ["xyplane" (either "at" "relative") expression])
+
+         (set-zero-clause
+          ["zero" expression])
+
+         (set-zeroaxis-clause
+          [(:info "zeroaxis")
+           (either "zeroaxis" "xzeroaxis" "x2zeroaxis" "yzeroaxis" "y2zeroaxis"
+                   "zzeroaxis")
+           (maybe linestyle-spec)])
+
 
 ;;; Other commands
-        (cd-command
-         ["cd" string])
+         (cd-command
+          ["cd" string])
 
-        (call-command
-         ["call" string (many expression)])
+         (call-command
+          ["call" string (many expression)])
 
-        (simple-command
-         (either "clear" "exit" "quit" "pwd" "refresh" "reread" "reset"
-                 "shell"))
+         (simple-command
+          (either "clear" "exit" "quit" "pwd" "refresh" "reread" "reset"
+                  "shell"))
 
-        (eval-command
-         ["eval" expression])
+         (eval-command
+          ["eval" expression])
 
-        (load-command
-         ["load" string])
+         (load-command
+          ["load" string])
 
-        (lower-raise-command [(either "lower" "raise") number])
+         (lower-raise-command [(either "lower" "raise") number])
 
-        (pause-command
-         ["pause"
-          (either
-           expression
-           ["mouse" (maybe endcondition (maybe "," endcondition))])
-          string])
+         (pause-command
+          ["pause"
+           (either
+            expression
+            ["mouse" (maybe endcondition (maybe "," endcondition))])
+           string])
 
-        (endcondition (either "keypress" "button1" "button2" "button3" "close" 
"any"))
+         (endcondition (either "keypress" "button1" "button2" "button3" 
"close" "any"))
 
-        (save-command
-         ["save"
-          (either "functions" "variables" "terminal" "set")
-          string])
+         (save-command
+          ["save"
+           (either "functions" "variables" "terminal" "set")
+           string])
 
-        (system-command
-         ["system" string])
+         (system-command
+          ["system" string])
 
-        (test-command
-         ["test"
-          (either
-           "terminal"
-           ["palette"
-            (maybe
-             (either "rgb" "rbg" "grb" "gbr" "brg" "bgr"))])])
+         (test-command
+          ["test"
+           (either
+            "terminal"
+            ["palette"
+             (maybe
+              (either "rgb" "rbg" "grb" "gbr" "brg" "bgr"))])])
 
-        (undefine-command
-         ["undefine" (many name)])
+         (undefine-command
+          ["undefine" (many name)])
+
+         (update-command
+          ["update" string (maybe string)]))
 
-        (update-command
-         ["update" string (maybe string)]))
-       
        ;; This is the start symbol
        'command))))
 
@@ -1780,9 +1780,9 @@ list beginning the capture group, and END is the tail of 
the
 token list just after the end of the capture group.")
 
 
-;;;; The pattern matching machine 
+;;;; The pattern matching machine
 (defun gnuplot-match-pattern (instructions tokens completing-p
-                                  &optional start-symbol)
+                                           &optional start-symbol)
   "Parse TOKENS, setting completions, info and ElDoc information.
 
 This function parses TOKENS by simulating a stack machine with
@@ -1794,216 +1794,216 @@ and `gnuplot-info-at-point' based on the contents of 
the stack
 there."
   (catch 'return
     (let ((pc 0)                       ; Program counter
-         ;; Stack of return addresses (return PC), eldoc strings
-         ;; (eldoc STRING) and info pages (info STRING)
-         (stack '())
-         ;; Stack of backtracking records:
-         ;; ((STACK TOKENS RESUME-PC CAPTURES PROGRESS) ...)
-         (backtrack '())
-         ;; Match failure flag, set to `t' to cause backtracking
-         (fail nil)
-         ;; Flag set by JUMP and CALL instructions to stop PC advance
-         (jump nil)
-         ;; Record of progress made within (many ...) loops, an alist
-         ;; of conses (pc . tokens)
-         (progress '()))
+          ;; Stack of return addresses (return PC), eldoc strings
+          ;; (eldoc STRING) and info pages (info STRING)
+          (stack '())
+          ;; Stack of backtracking records:
+          ;; ((STACK TOKENS RESUME-PC CAPTURES PROGRESS) ...)
+          (backtrack '())
+          ;; Match failure flag, set to `t' to cause backtracking
+          (fail nil)
+          ;; Flag set by JUMP and CALL instructions to stop PC advance
+          (jump nil)
+          ;; Record of progress made within (many ...) loops, an alist
+          ;; of conses (pc . tokens)
+          (progress '()))
 
       (with-gnuplot-trace-buffer (erase-buffer))
 
       (when start-symbol               ; HACK FIXME
-       (let ((look-for `(label ,start-symbol)))
-         (while (not (equal (aref instructions pc) look-for))
-           (incf pc))
-         (incf pc)))
+        (let ((look-for `(label ,start-symbol)))
+          (while (not (equal (aref instructions pc) look-for))
+            (incf pc))
+          (incf pc)))
 
       (setq gnuplot-completions nil
-           gnuplot-eldoc nil
-           gnuplot-info-at-point nil
-           gnuplot-captures nil)
+            gnuplot-eldoc nil
+            gnuplot-info-at-point nil
+            gnuplot-captures nil)
 
       (flet ((advance
-             ()
-             (pop tokens)
-             (if (and (null tokens) (not completing-p))
-                 (gnuplot-scan-stack stack tokens)))
-            (fail () (setq fail t)))
-       
-       ;; Main loop
-       (while t
-         (let* ((inst (aref instructions pc))
-                (opcode (car inst))
-                (token (car tokens))
-                (end-of-tokens (null tokens)))
-           (gnuplot-trace "%s\t%s\t%s\n" pc inst (and token (gnuplot-token-id 
token)))
-           
-           (case opcode
-             ;; (literal LITERAL NO-COMPLETE)
-             ((literal)
-              (let ((expect (cadr inst))
-                    (no-complete (caddr inst)))
-                (cond (end-of-tokens
-                       (unless no-complete
-                         (gnuplot-trace "\tpushing \"%s\" to completions\n" 
expect)
-                         (push expect gnuplot-completions))
-                       (fail))
-                      
-                      ((not (equal (gnuplot-token-id token) expect))
-                       (fail))
-
-                      ;; otherwise succeed
-                      (t (advance)))))
-
-             ;; (token-type TYPE)
-             ((token-type)
-              (let ((expect (cadr inst)))
-                (if (or end-of-tokens
-                        (not (eq (gnuplot-token-type token) expect)))
-                    (fail)
-                  (advance))))
-
-             ;; (keyword REGEXP NAME): match any token whose ID
-             ;; regexp-matches REGEXP, use NAME for completions
-             ((keyword)
-              (let ((regexp (cadr inst))
-                    (name (caddr inst)))
-                (cond (end-of-tokens
-                       (gnuplot-trace "\tpushing \"%s\" to completions\n" name)
-                       (push name gnuplot-completions)
-                       (fail))
-                      
-                      ((not (string-match-p regexp (gnuplot-token-id token)))
-                       (fail))
-
-                      ;; otherwise succeed
-                      (t
-                       (setf (gnuplot-token-id token) name)
-                       (advance)))))
-
-             ;; (any): match any token
-             ((any)
-              (if end-of-tokens
-                  (fail)
-                (advance)))
-             
-             ;; (jump LOCATION): jump to instruction at LOCATION
-             ((jump)
-              (let ((location (cadr inst)))
-                (setq jump location)))
-
-             ;; (call LOCATION): push the next instruction as a
-             ;; return location and jump
-             ((call)
-              (let ((location (cadr inst)))
-                (push `(return ,(+ pc 1)) stack)
-                (setq jump location)))
-
-             ;; (return): return to address at topmost RETURN record on
-             ;; stack, or stop matching and return if stack is empty
-             ((return)
-              (while (and stack
-                          (not (eq (caar stack) 'return)))
-                (pop stack))
-              (if (not stack)
-                  ;; Successful match
-                  (throw 'return (list tokens))
-                ;; Otherwise, return to caller
-                (let* ((r (pop stack))
-                       (r-pc (cadr r)))
-                  (setq jump r-pc))))
-
-             ;; (choice LOCATION): push LOCATION onto the stack of
-             ;; backtracking points and continue at next instruction
-             ((choice)
-              (let ((location (cadr inst)))
-                (push `(,stack ,tokens ,location ,gnuplot-captures
-                               ,progress)
-                      backtrack)))
-
-             ;; (commit LOCATION): discard most recent backtrack point
-             ;; and jump to LOCATION
-             ((commit)
-              (let ((location (cadr inst)))
-                (if (not backtrack)
-                    (error "no more backtrack points in commit"))
-                (pop backtrack)
-                (setq jump location)))
-
-             ;; (fail): force this match to fail, going back to most
-             ;; recent backtrack point
-             ((fail)
-              (fail))
-
-             ;; (assert): run Lisp code and fail if it returns NIL
-             ((assert)
-              (let ((form (cadr inst)))
-                (if (not (eval form)) (fail))))
-
-             ;; (push TYPE VALUE): push an info page or eldoc string
-             ;; onto the stack
-             ((push)
-              (let* ((type (cadr inst))
-                     (value (caddr inst)))
-                (push `(,type ,value ,tokens) stack)))
-
-             ;; (pop TYPE): pop something off the stack
-             ((pop)
-              (let ((type (cadr inst)))
-                (if (not (and stack
-                              (eq (caar stack) type)))
-                    (error "Expected a %s on the stack but found %s" type 
stack))
-                (pop stack)))
-
-             ;; (save-start NAME): save current token pointer as
-             ;; beginning of capture group NAME
-             ((save-start)
-              (let ((name (cadr inst)))
-                (push `(,name ,tokens nil) gnuplot-captures)))
-
-             ;; (save-end NAME): save current token pointer as end of
-             ;; capture group NAME
-             ((save-end)
-              (let* ((name (cadr inst))
-                     (record (assoc name gnuplot-captures)))
-                (if (not record)
-                    (error "gnuplot-match-tokens: no open capture group named 
%s" name)
-                  (setf (caddr record) tokens)
-                  (gnuplot-debug (gnuplot-dump-captures)))))
-
-             ;; (check-progress): make sure not stuck in an infinite loop
-             ((check-progress)
-              (let ((prev-progress (cdr (assoc pc progress))))
-                (if (and prev-progress (eq prev-progress tokens))
-                    (fail)
-                  (push (cons pc tokens) progress))))
-
-             (t
-              (error "bad instruction: %s" inst)))
-
-           ;; Increment PC or jump
-           (setq pc (or jump (1+ pc))
-                 jump nil)
-                 
-           ;; Backtrack on failure
-           (when fail
-             (if (not backtrack)       ; Out of backtracking stack: failed 
match
-                 (throw 'return nil)
-               (gnuplot-trace "\t*fail*\t%s\n" (length backtrack))
-               (gnuplot-debug (gnuplot-dump-backtrack backtrack))
-               ;; If we got as far as token-at-point before failing,
-               ;; scan the stack for eldoc and info strings
-               (when (and end-of-tokens (not completing-p))
-                 (gnuplot-scan-stack stack tokens))
-               
-               (destructuring-bind
-                   (bt-stack bt-tokens bt-pc bt-captures bt-progress)
-                   (pop backtrack)
-                 (setq stack bt-stack
-                       tokens bt-tokens
-                       pc bt-pc
-                       gnuplot-captures bt-captures
-                       progress bt-progress
-                       fail nil)
-                 (gnuplot-debug (gnuplot-dump-progress progress)))))))))))
+              ()
+              (pop tokens)
+              (if (and (null tokens) (not completing-p))
+                  (gnuplot-scan-stack stack tokens)))
+             (fail () (setq fail t)))
+
+        ;; Main loop
+        (while t
+          (let* ((inst (aref instructions pc))
+                 (opcode (car inst))
+                 (token (car tokens))
+                 (end-of-tokens (null tokens)))
+            (gnuplot-trace "%s\t%s\t%s\n" pc inst (and token (gnuplot-token-id 
token)))
+
+            (case opcode
+              ;; (literal LITERAL NO-COMPLETE)
+              ((literal)
+               (let ((expect (cadr inst))
+                     (no-complete (caddr inst)))
+                 (cond (end-of-tokens
+                        (unless no-complete
+                          (gnuplot-trace "\tpushing \"%s\" to completions\n" 
expect)
+                          (push expect gnuplot-completions))
+                        (fail))
+
+                       ((not (equal (gnuplot-token-id token) expect))
+                        (fail))
+
+                       ;; otherwise succeed
+                       (t (advance)))))
+
+              ;; (token-type TYPE)
+              ((token-type)
+               (let ((expect (cadr inst)))
+                 (if (or end-of-tokens
+                         (not (eq (gnuplot-token-type token) expect)))
+                     (fail)
+                   (advance))))
+
+              ;; (keyword REGEXP NAME): match any token whose ID
+              ;; regexp-matches REGEXP, use NAME for completions
+              ((keyword)
+               (let ((regexp (cadr inst))
+                     (name (caddr inst)))
+                 (cond (end-of-tokens
+                        (gnuplot-trace "\tpushing \"%s\" to completions\n" 
name)
+                        (push name gnuplot-completions)
+                        (fail))
+
+                       ((not (string-match-p regexp (gnuplot-token-id token)))
+                        (fail))
+
+                       ;; otherwise succeed
+                       (t
+                        (setf (gnuplot-token-id token) name)
+                        (advance)))))
+
+              ;; (any): match any token
+              ((any)
+               (if end-of-tokens
+                   (fail)
+                 (advance)))
+
+              ;; (jump LOCATION): jump to instruction at LOCATION
+              ((jump)
+               (let ((location (cadr inst)))
+                 (setq jump location)))
+
+              ;; (call LOCATION): push the next instruction as a
+              ;; return location and jump
+              ((call)
+               (let ((location (cadr inst)))
+                 (push `(return ,(+ pc 1)) stack)
+                 (setq jump location)))
+
+              ;; (return): return to address at topmost RETURN record on
+              ;; stack, or stop matching and return if stack is empty
+              ((return)
+               (while (and stack
+                           (not (eq (caar stack) 'return)))
+                 (pop stack))
+               (if (not stack)
+                   ;; Successful match
+                   (throw 'return (list tokens))
+                 ;; Otherwise, return to caller
+                 (let* ((r (pop stack))
+                        (r-pc (cadr r)))
+                   (setq jump r-pc))))
+
+              ;; (choice LOCATION): push LOCATION onto the stack of
+              ;; backtracking points and continue at next instruction
+              ((choice)
+               (let ((location (cadr inst)))
+                 (push `(,stack ,tokens ,location ,gnuplot-captures
+                                ,progress)
+                       backtrack)))
+
+              ;; (commit LOCATION): discard most recent backtrack point
+              ;; and jump to LOCATION
+              ((commit)
+               (let ((location (cadr inst)))
+                 (if (not backtrack)
+                     (error "no more backtrack points in commit"))
+                 (pop backtrack)
+                 (setq jump location)))
+
+              ;; (fail): force this match to fail, going back to most
+              ;; recent backtrack point
+              ((fail)
+               (fail))
+
+              ;; (assert): run Lisp code and fail if it returns NIL
+              ((assert)
+               (let ((form (cadr inst)))
+                 (if (not (eval form)) (fail))))
+
+              ;; (push TYPE VALUE): push an info page or eldoc string
+              ;; onto the stack
+              ((push)
+               (let* ((type (cadr inst))
+                      (value (caddr inst)))
+                 (push `(,type ,value ,tokens) stack)))
+
+              ;; (pop TYPE): pop something off the stack
+              ((pop)
+               (let ((type (cadr inst)))
+                 (if (not (and stack
+                               (eq (caar stack) type)))
+                     (error "Expected a %s on the stack but found %s" type 
stack))
+                 (pop stack)))
+
+              ;; (save-start NAME): save current token pointer as
+              ;; beginning of capture group NAME
+              ((save-start)
+               (let ((name (cadr inst)))
+                 (push `(,name ,tokens nil) gnuplot-captures)))
+
+              ;; (save-end NAME): save current token pointer as end of
+              ;; capture group NAME
+              ((save-end)
+               (let* ((name (cadr inst))
+                      (record (assoc name gnuplot-captures)))
+                 (if (not record)
+                     (error "gnuplot-match-tokens: no open capture group named 
%s" name)
+                   (setf (caddr record) tokens)
+                   (gnuplot-debug (gnuplot-dump-captures)))))
+
+              ;; (check-progress): make sure not stuck in an infinite loop
+              ((check-progress)
+               (let ((prev-progress (cdr (assoc pc progress))))
+                 (if (and prev-progress (eq prev-progress tokens))
+                     (fail)
+                   (push (cons pc tokens) progress))))
+
+              (t
+               (error "bad instruction: %s" inst)))
+
+            ;; Increment PC or jump
+            (setq pc (or jump (1+ pc))
+                  jump nil)
+
+            ;; Backtrack on failure
+            (when fail
+              (if (not backtrack)      ; Out of backtracking stack: failed 
match
+                  (throw 'return nil)
+                (gnuplot-trace "\t*fail*\t%s\n" (length backtrack))
+                (gnuplot-debug (gnuplot-dump-backtrack backtrack))
+                ;; If we got as far as token-at-point before failing,
+                ;; scan the stack for eldoc and info strings
+                (when (and end-of-tokens (not completing-p))
+                  (gnuplot-scan-stack stack tokens))
+
+                (destructuring-bind
+                    (bt-stack bt-tokens bt-pc bt-captures bt-progress)
+                    (pop backtrack)
+                  (setq stack bt-stack
+                        tokens bt-tokens
+                        pc bt-pc
+                        gnuplot-captures bt-captures
+                        progress bt-progress
+                        fail nil)
+                  (gnuplot-debug (gnuplot-dump-progress progress)))))))))))
 
 (defun gnuplot-scan-stack (stack tokens)
   "Scan STACK for the most recently pushed eldoc and info strings"
@@ -2013,40 +2013,40 @@ there."
 
   (catch 'no-scan
     (while (and stack
-               (not (and gnuplot-info-at-point gnuplot-eldoc)))
+                (not (and gnuplot-info-at-point gnuplot-eldoc)))
       (let* ((item (car stack))
-            (type (car item))
-            (position (caddr item))) ; must progress by at least one token
-       (if (and (memq type '(info eldoc no-scan))
-                (not (eq position tokens)))
-           (case type
-             ((no-scan)
-              (throw 'no-scan nil))
-
-             ((info)
-              (when (not gnuplot-info-at-point)
-                (let ((info (cadr item)))
-                  (setq gnuplot-info-at-point
-                        (cond
-                         ((eq info 'first-token)
-                          (gnuplot-token-id (car position)))
-                         ((functionp info) (funcall info))
-                         (t info)))
-                  (when gnuplot-info-at-point
-                    (gnuplot-trace "\tset info to \"%s\"\n" 
gnuplot-info-at-point)
-                    (when (and (not gnuplot-eldoc) gnuplot-eldoc-hash)
+             (type (car item))
+             (position (caddr item))) ; must progress by at least one token
+        (if (and (memq type '(info eldoc no-scan))
+                 (not (eq position tokens)))
+            (case type
+              ((no-scan)
+               (throw 'no-scan nil))
+
+              ((info)
+               (when (not gnuplot-info-at-point)
+                 (let ((info (cadr item)))
+                   (setq gnuplot-info-at-point
+                         (cond
+                          ((eq info 'first-token)
+                           (gnuplot-token-id (car position)))
+                          ((functionp info) (funcall info))
+                          (t info)))
+                   (when gnuplot-info-at-point
+                     (gnuplot-trace "\tset info to \"%s\"\n" 
gnuplot-info-at-point)
+                     (when (and (not gnuplot-eldoc) gnuplot-eldoc-hash)
                        (let ((eldoc
                               (car (gethash gnuplot-info-at-point 
gnuplot-eldoc-hash))))
                          (when eldoc
-                          (setq gnuplot-eldoc eldoc)
-                          (gnuplot-trace "\tand set eldoc to \"%s\"\n" 
eldoc))))))))
-
-             ((eldoc)
-              (when (not gnuplot-eldoc)
-                (let ((eldoc (cadr item)))
-                  (setq gnuplot-eldoc
-                        (if (functionp eldoc) (funcall eldoc) eldoc))
-                  (gnuplot-trace "\tset eldoc to \"%s\"\n" gnuplot-eldoc)))))))
+                           (setq gnuplot-eldoc eldoc)
+                           (gnuplot-trace "\tand set eldoc to \"%s\"\n" 
eldoc))))))))
+
+              ((eldoc)
+               (when (not gnuplot-eldoc)
+                 (let ((eldoc (cadr item)))
+                   (setq gnuplot-eldoc
+                         (if (functionp eldoc) (funcall eldoc) eldoc))
+                   (gnuplot-trace "\tset eldoc to \"%s\"\n" 
gnuplot-eldoc)))))))
       (pop stack))))
 
 (defun gnuplot-capture-group (name)
@@ -2054,16 +2054,16 @@ there."
   (let ((record (assoc name gnuplot-captures)))
     (if (not record) nil
       (let ((begin (cadr record))
-           (end (caddr record))
-           (accum '()))
-       (while (and begin (not (eq begin end)))
-         (push (pop begin) accum))
-       (nreverse accum)))))
+            (end (caddr record))
+            (accum '()))
+        (while (and begin (not (eq begin end)))
+          (push (pop begin) accum))
+        (nreverse accum)))))
 
 (defun gnuplot-capture-group->string (name)
   (let ((tokens (gnuplot-capture-group name)))
     (and tokens
-        (mapconcat 'gnuplot-token-id tokens " "))))
+         (mapconcat 'gnuplot-token-id tokens " "))))
 
 
 ;;; Interface to the matching machine
@@ -2081,18 +2081,18 @@ there."
 (defun gnuplot-context-completion-at-point ()
   "Return completions of keyword preceding point, using context."
   (let* ((end (point))
-        (beg
-         (save-excursion
-           (skip-syntax-backward "w_" (gnuplot-point-at-beginning-of-command))
-           (point)))
-        (word nil)
-        (completions (gnuplot-completions)))
-    
+         (beg
+          (save-excursion
+            (skip-syntax-backward "w_" (gnuplot-point-at-beginning-of-command))
+            (point)))
+         (word nil)
+         (completions (gnuplot-completions)))
+
     (setq word (buffer-substring beg end)
           completions (all-completions word completions))
 
     (if completions
-       (list beg end completions)
+        (list beg end completions)
       (if (not (equal "" word))
           (message "No gnuplot keywords complete '%s'" word)
         (message "No completions at point"))
@@ -2101,7 +2101,7 @@ there."
 ;; Eldoc help
 (defun gnuplot-eldoc-function ()
   "Return the ElDoc string for the Gnuplot construction at point."
-  (gnuplot-parse-at-point nil)  
+  (gnuplot-parse-at-point nil)
   gnuplot-eldoc)
 
 (defun gnuplot-help-function ()
@@ -2110,8 +2110,8 @@ there."
   (gnuplot-parse-at-point nil)
   (if (and gnuplot-info-at-point gnuplot-eldoc-hash)
       (let ((eldoc
-            (cadr (gethash gnuplot-info-at-point gnuplot-eldoc-hash))))
-       (if eldoc (message eldoc)))))
+             (cadr (gethash gnuplot-info-at-point gnuplot-eldoc-hash))))
+        (if eldoc (message eldoc)))))
 
 ;; Info lookup
 (defun gnuplot-info-at-point (&optional query)
@@ -2122,8 +2122,8 @@ there."
     (gnuplot-parse-at-point nil))
   (if (or query (not gnuplot-info-at-point))
       (let ((info
-            (info-lookup-interactive-arguments 'symbol)))
-       (setq gnuplot-info-at-point (car info))))
+             (info-lookup-interactive-arguments 'symbol)))
+        (setq gnuplot-info-at-point (car info))))
   (when gnuplot-info-at-point
     (gnuplot--find-info-node gnuplot-info-at-point)))
 
@@ -2136,7 +2136,7 @@ there."
   (gnuplot--adjust-info-display))
 
 
-;;; Some context-sensitive hacks 
+;;; Some context-sensitive hacks
 
 ;; ElDoc strings for "using" specs, which depend on other information
 ;; from the parsed command
@@ -2190,15 +2190,15 @@ there."
 This will fail if the \"using\" clause comes before the \"with\"
 clause."
   (let ((with-style (gnuplot-capture-group :with-style))
-       (3d-p (gnuplot-capture-group :splot-command))
-       (column-description nil))
+        (3d-p (gnuplot-capture-group :splot-command))
+        (column-description nil))
     (if with-style
-       (let ((with-style-string (gnuplot-token-id (car with-style))))
-         (setq column-description
-               (or (and 3d-p
-                        (cdr (assoc with-style-string gnuplot-using-3d-eldoc)))
-                   (cdr (assoc with-style-string gnuplot-using-eldoc))
-                   "<columns>"))))
+        (let ((with-style-string (gnuplot-token-id (car with-style))))
+          (setq column-description
+                (or (and 3d-p
+                         (cdr (assoc with-style-string 
gnuplot-using-3d-eldoc)))
+                    (cdr (assoc with-style-string gnuplot-using-eldoc))
+                    "<columns>"))))
     (format "using %s {'format'}" column-description)))
 
 ;;; Needed for correctly parsing plot commands
@@ -2211,10 +2211,10 @@ command."
     (and start (goto-char start))
     (catch 'result
       (while
-         (search-backward-regexp "reset\\|set\\s-+parametric" (point-min) t)
-       (gnuplot-beginning-of-command)
-       (cond ((looking-at "reset\\|unset\\s-+parametric") (throw 'result nil))
-             ((looking-at "set\\s-+parametric") (throw 'result t))))
+          (search-backward-regexp "reset\\|set\\s-+parametric" (point-min) t)
+        (gnuplot-beginning-of-command)
+        (cond ((looking-at "reset\\|unset\\s-+parametric") (throw 'result nil))
+              ((looking-at "set\\s-+parametric") (throw 'result t))))
       nil)))
 
 
@@ -2222,4 +2222,8 @@ command."
 ;;; All done!
 (provide 'gnuplot-context)
 
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
 ;;; gnuplot-context.el ends here
diff --git a/gnuplot-debug-context.el b/gnuplot-debug-context.el
index ae9c114..7d425e1 100644
--- a/gnuplot-debug-context.el
+++ b/gnuplot-debug-context.el
@@ -9,8 +9,8 @@
   (mapatoms
    (lambda (sym)
      (when (string-match
-           "gnuplot"
-           (symbol-name sym))
+            "gnuplot"
+            (symbol-name sym))
        (unintern sym obarray)))))
 
 (defun gnuplot-reload (&optional context)
@@ -21,7 +21,7 @@
   (require 'gnuplot)
   (when context
     (if (= context 16)
-       (require 'gnuplot-debug-context))
+        (require 'gnuplot-debug-context))
     (require 'gnuplot-context)))
 
 (defsubst gnuplot-recompile ()
@@ -31,13 +31,13 @@
       (delete-file "gnuplot-context.elc")
       (emacs-lisp-byte-compile)
       (load-file "gnuplot-context.elc"))))
-  
+
 (defun gnuplot-nodebug ()
   (interactive)
   (when (featurep 'gnuplot-debug-context)
-      (let ((savef (symbol-function 'gnuplot-debug-on)))
-       (unload-feature 'gnuplot-debug-context)
-       (fset 'gnuplot-debug-on savef)))
+    (let ((savef (symbol-function 'gnuplot-debug-on)))
+      (unload-feature 'gnuplot-debug-context)
+      (fset 'gnuplot-debug-on savef)))
   (gnuplot-recompile))
 
 (defun gnuplot-debug-on ()
@@ -61,11 +61,11 @@
       (with-gnuplot-trace-buffer
        (insert "\n-- * backtrace: * --\n")
        (dolist (x stack)
-        (insert (format "%s\n"
-                        (if (eq (car x) 'return)
-                            x
-                          (list (car x) (cadr x)
-                                (gnuplot-simplify-tokens (caddr x)))))))
+         (insert (format "%s\n"
+                         (if (eq (car x) 'return)
+                             x
+                           (list (car x) (cadr x)
+                                 (gnuplot-simplify-tokens (caddr x)))))))
        (insert "-- end backtrace  --\n"))))
 
 (defun gnuplot-dump-backtrack (backtrack)
@@ -73,7 +73,7 @@
       (with-gnuplot-trace-buffer
        (insert "\n-- * backtrack records: * --\n")
        (dolist (x backtrack)
-        (insert (format "%s\t%s\n" (caddr x) (gnuplot-simplify-tokens (cadr 
x)))))
+         (insert (format "%s\t%s\n" (caddr x) (gnuplot-simplify-tokens (cadr 
x)))))
        (insert "-- end backtrack records  --\n\n"))))
 
 (defun gnuplot-dump-progress (progress)
@@ -81,7 +81,7 @@
       (with-gnuplot-trace-buffer
        (insert "\n-- * progress records: * --\n")
        (dolist (x progress)
-        (insert (format "%s\t%s\n" (car x) (gnuplot-simplify-tokens (cdr x)))))
+         (insert (format "%s\t%s\n" (car x) (gnuplot-simplify-tokens (cdr 
x)))))
        (insert "-- end progress records  --\n\n"))))
 
 (defun gnuplot-dump-code (&optional inst)
@@ -100,16 +100,22 @@
       (with-gnuplot-trace-buffer
        (insert "\n-- * capture groups: * --\n")
        (loop for c on gnuplot-captures
-            do
-            (let ((name (caar c))
-                  (gnuplot-captures c))
-              (insert (format "%s\t%s\n"
-                              name
-                              (mapconcat 'gnuplot-token-id
-                                         (gnuplot-capture-group name)
-                                         " ")))))
+             do
+             (let ((name (caar c))
+                   (gnuplot-captures c))
+               (insert (format "%s\t%s\n"
+                               name
+                               (mapconcat 'gnuplot-token-id
+                                          (gnuplot-capture-group name)
+                                          " ")))))
        (insert "-- end capture groups  --\n\n"))))
 
 (provide 'gnuplot-debug-context)
 
 (gnuplot-debug-on)
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
+;;; gnuplot-debug-context.el ends here
diff --git a/gnuplot-gui.el b/gnuplot-gui.el
index 02960b0..669ec7f 100644
--- a/gnuplot-gui.el
+++ b/gnuplot-gui.el
@@ -82,8 +82,8 @@
 (eval-and-compile
   (condition-case ()
       (progn
-       (require 'widget)
-       (require 'wid-edit))
+        (require 'widget)
+        (require 'wid-edit))
     (error nil)))
 (require 'cl)
 (eval-when-compile                     ; suppress some compiler warnings
@@ -102,14 +102,14 @@
       "Return a list of substrings of STRING which are separated by PATTERN.
 If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
       (or pattern
-         (setq pattern "[ \f\t\n\r\v]+"))
+          (setq pattern "[ \f\t\n\r\v]+"))
       ;; The FSF version of this function takes care not to cons in case
       ;; of infloop.  Maybe we should synch?
       (let (parts (start 0))
-       (while (string-match pattern string start)
-         (setq parts (cons (substring string start (match-beginning 0)) parts)
-               start (match-end 0)))
-       (nreverse (cons (substring string start) parts)))) ))
+        (while (string-match pattern string start)
+          (setq parts (cons (substring string start (match-beginning 0)) parts)
+                start (match-end 0)))
+        (nreverse (cons (substring string start) parts)))) ))
 
 
 
@@ -130,14 +130,14 @@ This would be done after menu insertion of Gnuplot 
commands."
   "Frame used to hold the buffer for setting options.")
 (defcustom gnuplot-gui-frame-plist
   '(height 18 width 65 border-width 0
-          user-position t top 150 left 150
-          internal-border-width 0 unsplittable t
-          default-toolbar-visible-p nil has-modeline-p nil
-          menubar-visible-p nil)
+           user-position t top 150 left 150
+           internal-border-width 0 unsplittable t
+           default-toolbar-visible-p nil has-modeline-p nil
+           menubar-visible-p nil)
   "Frame plist for the input run-time display frame in XEmacs."
   :type '(repeat (group :inline t
-                       (symbol :tag "Property")
-                       (sexp :tag "Value")))
+                        (symbol :tag "Property")
+                        (sexp :tag "Value")))
   :group 'gnuplot-gui)
 (defcustom gnuplot-gui-frame-parameters
   '((height . 18)
@@ -183,7 +183,7 @@ the first entry in the list be a blank string."
 (defun gnuplot-this-word ()
   "Return the word under point."
   (let ((begin (save-excursion (beginning-of-line) (point-marker)))
-       (end   (save-excursion (end-of-line)       (point-marker))))
+        (end   (save-excursion (end-of-line)       (point-marker))))
     (save-excursion
       (or (looking-at "\\<") (= (current-column) 0) (forward-word -1))
       (if (> (point) begin) (setq begin (point-marker)))
@@ -224,131 +224,131 @@ the first entry in the list be a blank string."
 See the doc-string for `gnuplot-gui-all-types'.")
 (setq gnuplot-gui-terminal-types
       (list (cons "aifm"
-                 '(("COLOR"     'list " " "monochrome" "gray" "color")
-                   ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
-                   ("FONTSIZE"  'fontsize " ")))
-           (cons "cgm"
-                 '(("MODE"      'list   " " "landscape" "portrait" "default")
-                   ("COLOR"     'list   " " "color" "monochrome")
-                   ("ROTATION"  'list   " " "rotate" "norotate")
-                   ("WIDTH"     'number " " "width")
-                   ("LINEWIDTH" 'number " " "linewidth")
-                   ("FONTNAME"  'list   " " "\"Arial\"" "\"Arial Italic\""
-                    "\"Arial Bold\"" "\"Arial Bold Italic\""
-                    "\"Times Roman\"" "\"Times Roman Italic\""
-                    "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
-                    "\"Helvetica\"" "\"Roman\"")
-                   ("FONTSIZE"  'fontsize " ")))
-           (cons "corel"
-                 '(("COLOR"            'list " " "default" "color" 
"monochrome")
-                   ("FONTNAME"         'list " " "\"SwitzerlandLight\""
-                    "\"Helvetica\"" "\"Times-Roman\"")
-                   ("FONTSIZE "        'number " ")
-                   ("X-SIZE   "        'number " ")
-                   ("Y-SIZE   "        'number " ")
-                   ("LINEWIDTH"        'number " ")))
-           (cons "dumb"
-                 '(("LINEFEED"         'list   " " "feed" "nofeed")
-                   ("X-SIZE"           'number " ")
-                   ("Y-SIZE"           'number " ")))
-           (cons "emf"
-                 '(("COLOR"            'list " " "color" "monochrome")
-                   ("LINE"             'list " " "solid" "dashed")
-                   ("FONTNAME"         'string " ")
-                   ("FONTSIZE"         'number " ")))
-           (cons "emtex"
-                 '(("FONTNAME"         'list     " " "courier" "roman")
-                   ("FONTSIZE"         'fontsize " ")))
-           (cons "fig"
-                 '(("COLOR"            'list   " " "color" "monochrome")
-                   ("FRAMESIZE"        'list   " " "small" "big")
-                   ("POINTSMAX"        'number " " "pointsmax")
-                   ("ORIENTATION"      'list   " " "landscape" "portrait")
-                   ("UNITS"            'list   " " "metric" "inches")
-                   ("FONT SIZE"        'number " " "fontsize")
-                   ("SIZE"             'pair   (" " . " ") "size")
-                   ("LINE THICKNESS"   'number " " "thickness")
-                   ("LAYER DEPTH"      'number " " "depth")))
-           (cons "hp500c"
-                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")
-                   ("COMPRESSION"      'list " " "rle" "tiff")))
-           (cons "hpgl"
-                 '(("PENS"             'number " ")
-                   ("EJECT"            'list   " " "eject")))
-           (cons "hpdj"
-                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
-           (cons "hpljii"
-                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
-           (cons "hppj"
-                 '(("FONT"             'list " " "FNT9X17" "FNT5X9" 
"FNT13X25")))
-           (cons "imagen"
-                 '(("FONT SIZE"        'number " ")
-                   ("LAYOUT"           'list   " " "portrait" "landscape")
-                   ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
-           (cons "gpic"
-                 '(("X ORIGIN"         'number " ")
-                   ("Y ORIGIN"         'number " " ",")))
-           (cons "latex"
-                 '(("FONTNAME"         'list " " "courier" "roman")
-                   ("FONTSIZE"         'fontsize " ")))
-           (cons "mif"
-                 '(("COLOUR"           'list " " "colour" "monochrome")
-                   ("LINETYPE"         'list " " "polyline" "vectors")))
-           (cons "nec-cp6"
-                 '(("MODE"             'list " " "monochrome" "colour" 
"draft")))
-           (cons "pbm"
-                 '(("SIZE"      'list " " "small" "medium" "large")
-                   ("COLOR"     'list " " "monochrome" "gray" "color")))
-           (cons "pcl5L"
-                 '(("MODE"      'list " " "landscape" "portrait")
-                   ("FONTNAME"  'list " " "stick" "univers" "cg_times")
-                   ("FONTSIZE"  'fontsize " ")))
-           (cons "png"
-                 '(("SIZE"      'list " " "small" "medium" "large")
-                   ("COLOR"     'list " " "monochrome" "gray" "color")))
-           (cons "postscript"
-                 '(("MODE"      'list " " "landscape" "portrait" "eps" 
"default")
-                   ("ENHANCED"  'list " " "enhanced" "noenhanced")
-                   ("COLOR"     'list " " "color" "monochrome")
-                   ("SOLID"     'list " " "solid" "dashed")
-                   ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
-                   ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
-                   ("FONTSIZE"  'fontsize " ")))
-           (cons "pslatex"
-                 '(("COLOR"     'list " " "monochrome" "color")
-                   ("DASHED"    'list " " "dashed")
-                   ("ROTATION"  'list " " "rotate" "norotate")
-                   ("AUXFILE"   'list " " "auxfile")))
-           (cons "pstex"
-                 '(("COLOR"     'list " " "monochrome" "color")
-                   ("DASHED"    'list " " "dashed")
-                   ("ROTATION"  'list " " "rotate" "norotate")
-                   ("AUXFILE"   'list " " "auxfile")))
-           (cons "pstricks"
-                 '(("HACK TEXT"        'list " " "hacktext" "nohacktext")
-                   ("PLOT SCALING"     'list " " "nounit" "unit")))
-           (cons "regis"
-                 '(("COLOR DEPTH"      'list "4" "16")))
-           (cons "tgif"
-                 '(("LAYOUT"           'list   " " "portrait" "landscape")
-                   ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
-                   ("LINE TYPE"        'list " " "solid" "dashed")
-                   ("FONTNAME"         'list " " gnuplot-gui-fontname-list)
-                   ("FONTSIZE"         'fontsize " ")))
-           (cons "tpic"
-                 '(("POINTSIZE"        'number " ")
-                   ("LINEWIDTH"        'number " ")
-                   ("INTERVAL "        'number " ")))
-           (cons "vgagl"               ; for pm3d patch (also persist, raise 
in x11) <MT>
-                 '(("BACKGROUND"       'position  " " "background" 3)
-                   ("INTERPOLATION"    'list " " "uniform" "interpolate")
-                   ("DUMP"             'file " ")
-                   ("MODE"             'string  " " "")))
-           (cons "x11"
-                 '(("RESET"            'list " " "reset")
-                   ("TERMINAL NUMBER"  'number " ")
-                   ("PERSIST"          'list " " "persist" "nopersist")
-                   ("RAISE"            'list " " "raise" "noraise"))) ))
+                  '(("COLOR"     'list " " "monochrome" "gray" "color")
+                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "cgm"
+                  '(("MODE"      'list   " " "landscape" "portrait" "default")
+                    ("COLOR"     'list   " " "color" "monochrome")
+                    ("ROTATION"  'list   " " "rotate" "norotate")
+                    ("WIDTH"     'number " " "width")
+                    ("LINEWIDTH" 'number " " "linewidth")
+                    ("FONTNAME"  'list   " " "\"Arial\"" "\"Arial Italic\""
+                     "\"Arial Bold\"" "\"Arial Bold Italic\""
+                     "\"Times Roman\"" "\"Times Roman Italic\""
+                     "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
+                     "\"Helvetica\"" "\"Roman\"")
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "corel"
+                  '(("COLOR"            'list " " "default" "color" 
"monochrome")
+                    ("FONTNAME"         'list " " "\"SwitzerlandLight\""
+                     "\"Helvetica\"" "\"Times-Roman\"")
+                    ("FONTSIZE "        'number " ")
+                    ("X-SIZE   "        'number " ")
+                    ("Y-SIZE   "        'number " ")
+                    ("LINEWIDTH"        'number " ")))
+            (cons "dumb"
+                  '(("LINEFEED"         'list   " " "feed" "nofeed")
+                    ("X-SIZE"           'number " ")
+                    ("Y-SIZE"           'number " ")))
+            (cons "emf"
+                  '(("COLOR"            'list " " "color" "monochrome")
+                    ("LINE"             'list " " "solid" "dashed")
+                    ("FONTNAME"         'string " ")
+                    ("FONTSIZE"         'number " ")))
+            (cons "emtex"
+                  '(("FONTNAME"         'list     " " "courier" "roman")
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "fig"
+                  '(("COLOR"            'list   " " "color" "monochrome")
+                    ("FRAMESIZE"        'list   " " "small" "big")
+                    ("POINTSMAX"        'number " " "pointsmax")
+                    ("ORIENTATION"      'list   " " "landscape" "portrait")
+                    ("UNITS"            'list   " " "metric" "inches")
+                    ("FONT SIZE"        'number " " "fontsize")
+                    ("SIZE"             'pair   (" " . " ") "size")
+                    ("LINE THICKNESS"   'number " " "thickness")
+                    ("LAYER DEPTH"      'number " " "depth")))
+            (cons "hp500c"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")
+                    ("COMPRESSION"      'list " " "rle" "tiff")))
+            (cons "hpgl"
+                  '(("PENS"             'number " ")
+                    ("EJECT"            'list   " " "eject")))
+            (cons "hpdj"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+            (cons "hpljii"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+            (cons "hppj"
+                  '(("FONT"             'list " " "FNT9X17" "FNT5X9" 
"FNT13X25")))
+            (cons "imagen"
+                  '(("FONT SIZE"        'number " ")
+                    ("LAYOUT"           'list   " " "portrait" "landscape")
+                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
+            (cons "gpic"
+                  '(("X ORIGIN"         'number " ")
+                    ("Y ORIGIN"         'number " " ",")))
+            (cons "latex"
+                  '(("FONTNAME"         'list " " "courier" "roman")
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "mif"
+                  '(("COLOUR"           'list " " "colour" "monochrome")
+                    ("LINETYPE"         'list " " "polyline" "vectors")))
+            (cons "nec-cp6"
+                  '(("MODE"             'list " " "monochrome" "colour" 
"draft")))
+            (cons "pbm"
+                  '(("SIZE"      'list " " "small" "medium" "large")
+                    ("COLOR"     'list " " "monochrome" "gray" "color")))
+            (cons "pcl5L"
+                  '(("MODE"      'list " " "landscape" "portrait")
+                    ("FONTNAME"  'list " " "stick" "univers" "cg_times")
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "png"
+                  '(("SIZE"      'list " " "small" "medium" "large")
+                    ("COLOR"     'list " " "monochrome" "gray" "color")))
+            (cons "postscript"
+                  '(("MODE"      'list " " "landscape" "portrait" "eps" 
"default")
+                    ("ENHANCED"  'list " " "enhanced" "noenhanced")
+                    ("COLOR"     'list " " "color" "monochrome")
+                    ("SOLID"     'list " " "solid" "dashed")
+                    ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
+                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "pslatex"
+                  '(("COLOR"     'list " " "monochrome" "color")
+                    ("DASHED"    'list " " "dashed")
+                    ("ROTATION"  'list " " "rotate" "norotate")
+                    ("AUXFILE"   'list " " "auxfile")))
+            (cons "pstex"
+                  '(("COLOR"     'list " " "monochrome" "color")
+                    ("DASHED"    'list " " "dashed")
+                    ("ROTATION"  'list " " "rotate" "norotate")
+                    ("AUXFILE"   'list " " "auxfile")))
+            (cons "pstricks"
+                  '(("HACK TEXT"        'list " " "hacktext" "nohacktext")
+                    ("PLOT SCALING"     'list " " "nounit" "unit")))
+            (cons "regis"
+                  '(("COLOR DEPTH"      'list "4" "16")))
+            (cons "tgif"
+                  '(("LAYOUT"           'list   " " "portrait" "landscape")
+                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
+                    ("LINE TYPE"        'list " " "solid" "dashed")
+                    ("FONTNAME"         'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "tpic"
+                  '(("POINTSIZE"        'number " ")
+                    ("LINEWIDTH"        'number " ")
+                    ("INTERVAL "        'number " ")))
+            (cons "vgagl"              ; for pm3d patch (also persist, raise 
in x11) <MT>
+                  '(("BACKGROUND"       'position  " " "background" 3)
+                    ("INTERPOLATION"    'list " " "uniform" "interpolate")
+                    ("DUMP"             'file " ")
+                    ("MODE"             'string  " " "")))
+            (cons "x11"
+                  '(("RESET"            'list " " "reset")
+                    ("TERMINAL NUMBER"  'number " ")
+                    ("PERSIST"          'list " " "persist" "nopersist")
+                    ("RAISE"            'list " " "raise" "noraise"))) ))
 
 (defvar gnuplot-gui-terminal-list nil)
 (setq gnuplot-gui-terminal-list
@@ -359,302 +359,302 @@ See the doc-string for `gnuplot-gui-all-types'.")
 See the doc-string for `gnuplot-gui-all-types'.")
 (setq gnuplot-gui-set-types
       (list (cons "angles"
-                 '(("UNITS" 'list " " "degrees" "radians")))
-           (cons "arrow"
-                 '(("TAG"       'tag " ")
-                   ("FROM"      'position " " "from" 3)
-                   ("TO"        'position " " "to" 3)
-                   ("HEAD"      'list " " "head" "nohead")
-                   ("LINESTYLE" 'number " " "ls")
-                   ("LINETYPE " 'number " " "lt")
-                   ("LINEWIDTH" 'number " " "lw")))
-           (cons "noarrow"
-                 '(("TAG" 'tag " ")))
-           (cons "autoscale"
-                 '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
-                    "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
-                    "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
-           (cons "noautoscale"
-                 '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
-                    "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
-                    "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
-           (cons "bar"
-                 '(("SIZE" 'list " " "small" "large")))
-           (cons "border"
-                 '(("BORDER CODE" 'number " ")
-                   ("LINE STYLE"  'list   " " "lines"
-                    "dots" "points" "linespoints")
-                   ("LINESTYLE"   'number " " "ls")
-                   ("LINETYPE"    'number " " "lt")
-                   ("LINEWIDTH"   'number " " "lw")
-                   ))
-           (cons "boxwidth"
-                 '(("WIDTH" 'number " ")))
-           (cons "clabel"
-                 '(("FORMAT" 'format " ")))
-           (cons "clip"
-                 '(("CLIP TYPE" 'list " " "points" "one" "two")))
-           (cons "noclip"
-                 '(("CLIP TYPE" 'list " " "points" "one" "two")))
-           ;;(cons "cntrparam"
-               ;;  '(("INTERPOLATION" 'list " " "linear" "cubicspline" 
"bspline")
-               ;;    ("POINTS" 'number " " "points")
-               ;;    ("ORDER"  'number " " "order")))
-           (cons "contour"
-                 '(("WHERE"     'list " " "base" "surface" "both")))
-           (cons "dgrid3d"
-                  '(("ROW,COLUMN,NORM" 'position " " "" 3)))
-           (cons "encoding"
-                 '(("ENCODING" 'list " " "default" "iso_8859_1"
-                    "cp850" "cp437")))
-           (cons "format"
-                 '(("AXIS"   'list " " "x" "y" "z" "xy" "x2" "y2")
-                   ("FORMAT" 'format  " ")))
-           (cons "dummy"
-                 '(("VAR 1" 'string " " "")
-                   ("VAR 2" 'string " " ",")))
-           (cons "grid"
-                 '(("XTICS"  'list " " "xtics" "mxtics" "noxtics" "nomxtics")
-                   ("YTICS"  'list " " "ytics" "mytics" "noytics" "nomytics")
-                   ("ZTICS"  'list " " "ztics" "mztics" "noztics" "nomztics")
-                   ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" 
"nomx2tics")
-                   ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" 
"nomy2tics")
-                   ("POLAR"  'number " " "polar")
-                   ("MAJOR LINETYPE" 'number " ")
-                   ("MINOR LINETYPE" 'number " ")))
-           (cons "hidden3d"
-                 '(("ALGORITHM" 'list " " "defaults"
-                    "offset"
-                   "nooffset"
-                    ;;"trianglepattern  # bitpattern between 0 and 7"
-                   "trianglepattern 0" "trianglepattern 1"
-                    "trianglepattern 2" "trianglepattern 3"
-                    "trianglepattern 4" "trianglepattern 5"
-                    "trianglepattern 6" "trianglepattern 7"
-                    ;;"undefined        # level between 0 and 3"
-                   "undefined 0" "undefined 1" "undefined 2" "undefined 3"
-                   "noundefined" "altdiagonal" "noaltdiagonal"
-                   "bentover" "nobentover")))
-           (cons "historysize"
-                 '(("SIZE" 'number " ")))
-           (cons "isosamples"
-                 '(("ISO_U LINES" 'number " ")
-                   ("ISO_V LINES" 'number " " ",")))
-           (cons "key"
-                 '(("LOCATION"      'list " " "left" "right" "top" "bottom"
-                                          "outside" "below")
-                   ("POSITION"      'position  " " "" 3)
-                   ("JUSTIFICATION" 'list " " "Left" "Right")
-                   ("REVERSE"       'list " " "reverse" "noreverse")
-                   ("SAMPLE LENGTH" 'number " " "samplen")
-                   ("SPACING"       'number " " "spacing")
-                   ("WIDTH"         'number " " "width")
-                   ("TITLE"         'string " " "title ")
-                   ("BOX LINETYPE"  'number " " "box") ;; linetype data
-                   ("NOBOX"         'list   " " "nobox")))
-           (cons "label"
-                 '(("TAG" 'tag " ")
-                   ("LABEL TEXT" 'string " ")
-                   ("POSITION"   'position " " "at" 3)
-                   ;; first, second, graph, screen
-                   ("JUSTIFICATION" 'list " " "left" "right" "center")
-                   ("ROTATE"        'list " " "rotate" "norotate")
-                   ("FONT"          'string " " "font"))) ;; font "name,size"
-           (cons "nolabel"
-                 '(("TAG"        'tag " ")))
-           (cons "linestyle"
-                 '(("TAG      "  'tag " ")
-                   ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
-                    "boxxyerrorbars" "candlesticks" "dots"
-                    "financebars" "fsteps" "histeps" "impulses"
-                    "lines" "linespoints" "points" "steps" "vector"
-                    "xerrorbars" "xyerrorbars" "yerrorbars")
-                   ("LINETYPE " 'number " " "lt")
-                   ("LINEWIDTH" 'number " " "lw")
-                   ("POINTTYPE" 'number " " "pt")
-                   ("POINTSIZE" 'number " " "ps")))
-           (cons "locale"
-                 '(("LOCALE" 'string " ")))
-           (cons "logscale"
-                 '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
-                    "x2" "y2")
-                   ("BASE" 'number " ")))
-           (cons "nologscale"
-                 '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
-                    "x2" "y2")))
-           (cons "mapping"
-                 '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
-                    "cylindrical")))
-                                       ; _margin
-           (cons "bmargin"
-                 '(("BOTTOM MARGIN" 'number " ")))
-           (cons "lmargin"
-                 '(("LEFT MARGIN"   'number " ")))
-           (cons "rmargin"
-                 '(("RIGHT MARGIN"  'number " ")))
-           (cons "tmargin"
-                 '(("TOP MARGIN"    'number " ")))
-
-           (cons "missing"
-                 '(("CHARACTER" 'string " " 1)))
-                                       ; m_tics
-           (cons "mxtics"  gnuplot-gui-mtics-list)
-           (cons "mytics"  gnuplot-gui-mtics-list)
-           (cons "mztics"  gnuplot-gui-mtics-list)
-           (cons "mx2tics" gnuplot-gui-mtics-list)
-           (cons "my2tics" gnuplot-gui-mtics-list)
-
-                                       ; pm3d additions <MT>
-           (cons "mouse"
-                 '(("DOUBLECLICK"     'number " " "doubleclick")
-                   ("ZOOM"            'list   " " "zoomcoordinates" 
"nozoomcoordinates")
-                   ("POLAR"           'list   " " "polarcoordinates" 
"nopolarcoordinates")
-                   ("FORMAT"          'string " " "format")
-                   ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
-                   ("MOUSEFORMAT"     'string " " "mouseformat")
-                   ("LABELS"          'list   " " "labels" "nolabels")
-                   ("LABELOPTIONS"    'string " " "labeloptions")
-                   ("ZOOMJUMP"        'list   " " "zoomjump" "nozoomjump")
-                   ("VERBOSE"         'list   " " "verbose" "noverbose")))
-           (cons "palette"
-                 '(("COLOR"       'list     " " "gray" "color")
-                   ("RGBFORMULAE" 'position " " "rgbformulae" 3)
-                   ("PARITY"      'list     " " "positive" "negative")
-                   ("FORMULAE"    'list     " " "nops_allcF" "ps_allcF")
-                   ("MAXCOLORS"   'number   " ")
-                   ("COLOR_BOX"   'list     " " "nocb" "cbdefault" "cbuser")
-                   ("ORIENTATION" 'list     " " "cbvertical" "cbhorizontal")
-                   ("ORIGIN"      'position " " "origin" 2)
-                   ("SIZE"        'position " " "size" 2)
-                   ("BORDER"      'number   " ")
-                   ("NOBORDER"    'list     " " "bdefault" "noborder")))
-           (cons "pm3d"
-                 '(("AT"         'list*  " " "b" "s" "t" "bs" "bt" "st" "bst")
-                   ("SCANS"      'list   " " "scansautomatic" "scansforward" 
"scansbackward")
-                   ("FLUSH"      'list*  " " "begin" "center" "end")
-                   ("CLIP"       'list   " " "clip1in" "clip4in")
-                   ("ZRANGE"     'range (" " . " ") ":")
-                   ("HIDDEN3D"   'number " ")
-                   ("NOHIDDEN3D" 'list   " " "nohidden3d")
-                   ("FILLING"    'list   " " "transparent" "solid")
-                   ("MAP"        'list   " " "map")))
-
-           (cons "offsets"
-                 '(("LEFT  " 'number " ")
-                   ("RIGHT " 'number " " ",")
-                   ("TOP   " 'number " " ",")
-                   ("BOTTOM" 'number " " ",")))
-           (cons "origin"
-                 '(("X ORIGIN"   'number " ")
-                   ("Y ORIGIN"   'number " " ",")))
-           (cons "output"
-                 '(("FILENAME"   'file " ")))
-           (cons "pointsize"
-                 '(("MULTIPLIER" 'number " ")))
-           (cons "samples"
-                 '(("2D PLOT"    'number " ")
-                   ("3D PLOT"    'number " " ",")))
-           (cons "size"
-                 '(("ASPECT"           'list " " "square" "nosquare"
-                                                 "ratio" "noratio")
-                   ("X-SCALE OR RATIO" 'number " ")
-                   ("Y-SCALE"          'number " " ",")))
-           (cons "style"
-                 '(("DATA TYPE"  'list " " "data" "function")
-                   ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
-                    "boxxyerrorbars" "candlesticks" "dots"
-                    "financebars" "fsteps" "histeps" "impulses"
-                    "lines" "linespoints" "points" "steps" "vector"
-                    "xerrorbars" "xyerrorbars" "yerrorbars")))
-           (cons "terminal"
-                 '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
-           (cons "tics"
-                 '(("DIRECTION"  'list " " "in" "out")))
-           (cons "ticslevel"
-                 '(("RELATIVE HEIGHT" 'number " ")))
-           (cons "ticscale"
-                 '(("MAJOR" 'number " ")
-                   ("MINOR" 'number " ")))
-           (cons "timestamp"
-                 '(("FORMAT STRING" 'format " ")
-                   ("WHERE"         'list " " "top" "bottom")
-                   ("ROTATE"        'list " " "rotate" "norotate")
-                   ("X-OFFSET"      'number " ")
-                   ("Y-OFFSET"      'number " " ",")
-                   ("FONTNAME"      'list " " gnuplot-gui-fontname-list)))
-           (cons "timefmt"
-                 '(("FORMAT STRING" 'string " ")))
-           (cons "title"
-                 '(("TITLE" 'string " ")))
-           (cons "view"
-                 '(("X-ROTATION" 'number " ")
-                   ("Z-ROTATION" 'number " " ",")
-                   ("SCALE"      'number " " ",")
-                   ("Z-SCALE"    'number " " ",")))
-           ;; ("SCALE" 'position " " "," 4)
-                                       ; _data
-           (cons "xdata"      gnuplot-gui-data-list)
-           (cons "ydata"      gnuplot-gui-data-list)
-           (cons "zdata"      gnuplot-gui-data-list)
-           (cons "x2data"     gnuplot-gui-data-list)
-           (cons "y2data"     gnuplot-gui-data-list)
-                                       ; _label
-           (cons "xlabel"     gnuplot-gui-label-list)
-           (cons "ylabel"     gnuplot-gui-label-list)
-           (cons "zlabel"     gnuplot-gui-label-list)
-           (cons "x2label"    gnuplot-gui-label-list)
-           (cons "y2label"    gnuplot-gui-label-list)
-                                       ; _range, note that the [] syntax for
-                                       ;         the writeback argument is
-                                       ;         not properly supported
-           (cons "xrange"     gnuplot-gui-range-list)
-           (cons "yrange"     gnuplot-gui-range-list)
-           (cons "zrange"     gnuplot-gui-range-list)
-           (cons "x2range"    gnuplot-gui-range-list)
-           (cons "y2range"    gnuplot-gui-range-list)
-           (cons "trange"     gnuplot-gui-range-list)
-           (cons "rrange"     gnuplot-gui-range-list)
-           (cons "urange"     gnuplot-gui-range-list)
-           (cons "vrange"     gnuplot-gui-range-list)
-                                       ; _tics
-           (cons "xtics"      gnuplot-gui-tics-list)
-           (cons "ytics"      gnuplot-gui-tics-list)
-           (cons "ztics"      gnuplot-gui-tics-list)
-           (cons "x2tics"     gnuplot-gui-tics-list)
-           (cons "y2tics"     gnuplot-gui-tics-list)
-                                       ; zeroaxis
-           (cons "zeroaxis"   gnuplot-gui-zeroaxis-list)
-           (cons "xzeroaxis"  gnuplot-gui-zeroaxis-list)
-           (cons "yzeroaxis"  gnuplot-gui-zeroaxis-list)
-           (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
-           (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
-
-           (cons "zero"
-                 '(("THRESHOLD" 'number " ")))
-           ))
+                  '(("UNITS" 'list " " "degrees" "radians")))
+            (cons "arrow"
+                  '(("TAG"       'tag " ")
+                    ("FROM"      'position " " "from" 3)
+                    ("TO"        'position " " "to" 3)
+                    ("HEAD"      'list " " "head" "nohead")
+                    ("LINESTYLE" 'number " " "ls")
+                    ("LINETYPE " 'number " " "lt")
+                    ("LINEWIDTH" 'number " " "lw")))
+            (cons "noarrow"
+                  '(("TAG" 'tag " ")))
+            (cons "autoscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+            (cons "noautoscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+            (cons "bar"
+                  '(("SIZE" 'list " " "small" "large")))
+            (cons "border"
+                  '(("BORDER CODE" 'number " ")
+                    ("LINE STYLE"  'list   " " "lines"
+                     "dots" "points" "linespoints")
+                    ("LINESTYLE"   'number " " "ls")
+                    ("LINETYPE"    'number " " "lt")
+                    ("LINEWIDTH"   'number " " "lw")
+                    ))
+            (cons "boxwidth"
+                  '(("WIDTH" 'number " ")))
+            (cons "clabel"
+                  '(("FORMAT" 'format " ")))
+            (cons "clip"
+                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
+            (cons "noclip"
+                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
+            ;;(cons "cntrparam"
+            ;;  '(("INTERPOLATION" 'list " " "linear" "cubicspline" "bspline")
+            ;;    ("POINTS" 'number " " "points")
+            ;;    ("ORDER"  'number " " "order")))
+            (cons "contour"
+                  '(("WHERE"     'list " " "base" "surface" "both")))
+            (cons "dgrid3d"
+                  '(("ROW,COLUMN,NORM" 'position " " "" 3)))
+            (cons "encoding"
+                  '(("ENCODING" 'list " " "default" "iso_8859_1"
+                     "cp850" "cp437")))
+            (cons "format"
+                  '(("AXIS"   'list " " "x" "y" "z" "xy" "x2" "y2")
+                    ("FORMAT" 'format  " ")))
+            (cons "dummy"
+                  '(("VAR 1" 'string " " "")
+                    ("VAR 2" 'string " " ",")))
+            (cons "grid"
+                  '(("XTICS"  'list " " "xtics" "mxtics" "noxtics" "nomxtics")
+                    ("YTICS"  'list " " "ytics" "mytics" "noytics" "nomytics")
+                    ("ZTICS"  'list " " "ztics" "mztics" "noztics" "nomztics")
+                    ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" 
"nomx2tics")
+                    ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" 
"nomy2tics")
+                    ("POLAR"  'number " " "polar")
+                    ("MAJOR LINETYPE" 'number " ")
+                    ("MINOR LINETYPE" 'number " ")))
+            (cons "hidden3d"
+                  '(("ALGORITHM" 'list " " "defaults"
+                     "offset"
+                     "nooffset"
+                     ;;"trianglepattern  # bitpattern between 0 and 7"
+                     "trianglepattern 0" "trianglepattern 1"
+                     "trianglepattern 2" "trianglepattern 3"
+                     "trianglepattern 4" "trianglepattern 5"
+                     "trianglepattern 6" "trianglepattern 7"
+                     ;;"undefined        # level between 0 and 3"
+                     "undefined 0" "undefined 1" "undefined 2" "undefined 3"
+                     "noundefined" "altdiagonal" "noaltdiagonal"
+                     "bentover" "nobentover")))
+            (cons "historysize"
+                  '(("SIZE" 'number " ")))
+            (cons "isosamples"
+                  '(("ISO_U LINES" 'number " ")
+                    ("ISO_V LINES" 'number " " ",")))
+            (cons "key"
+                  '(("LOCATION"      'list " " "left" "right" "top" "bottom"
+                     "outside" "below")
+                    ("POSITION"      'position  " " "" 3)
+                    ("JUSTIFICATION" 'list " " "Left" "Right")
+                    ("REVERSE"       'list " " "reverse" "noreverse")
+                    ("SAMPLE LENGTH" 'number " " "samplen")
+                    ("SPACING"       'number " " "spacing")
+                    ("WIDTH"         'number " " "width")
+                    ("TITLE"         'string " " "title ")
+                    ("BOX LINETYPE"  'number " " "box") ;; linetype data
+                    ("NOBOX"         'list   " " "nobox")))
+            (cons "label"
+                  '(("TAG" 'tag " ")
+                    ("LABEL TEXT" 'string " ")
+                    ("POSITION"   'position " " "at" 3)
+                    ;; first, second, graph, screen
+                    ("JUSTIFICATION" 'list " " "left" "right" "center")
+                    ("ROTATE"        'list " " "rotate" "norotate")
+                    ("FONT"          'string " " "font"))) ;; font "name,size"
+            (cons "nolabel"
+                  '(("TAG"        'tag " ")))
+            (cons "linestyle"
+                  '(("TAG      "  'tag " ")
+                    ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
+                     "boxxyerrorbars" "candlesticks" "dots"
+                     "financebars" "fsteps" "histeps" "impulses"
+                     "lines" "linespoints" "points" "steps" "vector"
+                     "xerrorbars" "xyerrorbars" "yerrorbars")
+                    ("LINETYPE " 'number " " "lt")
+                    ("LINEWIDTH" 'number " " "lw")
+                    ("POINTTYPE" 'number " " "pt")
+                    ("POINTSIZE" 'number " " "ps")))
+            (cons "locale"
+                  '(("LOCALE" 'string " ")))
+            (cons "logscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                     "x2" "y2")
+                    ("BASE" 'number " ")))
+            (cons "nologscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                     "x2" "y2")))
+            (cons "mapping"
+                  '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
+                     "cylindrical")))
+                                        ; _margin
+            (cons "bmargin"
+                  '(("BOTTOM MARGIN" 'number " ")))
+            (cons "lmargin"
+                  '(("LEFT MARGIN"   'number " ")))
+            (cons "rmargin"
+                  '(("RIGHT MARGIN"  'number " ")))
+            (cons "tmargin"
+                  '(("TOP MARGIN"    'number " ")))
+
+            (cons "missing"
+                  '(("CHARACTER" 'string " " 1)))
+                                        ; m_tics
+            (cons "mxtics"  gnuplot-gui-mtics-list)
+            (cons "mytics"  gnuplot-gui-mtics-list)
+            (cons "mztics"  gnuplot-gui-mtics-list)
+            (cons "mx2tics" gnuplot-gui-mtics-list)
+            (cons "my2tics" gnuplot-gui-mtics-list)
+
+                                        ; pm3d additions <MT>
+            (cons "mouse"
+                  '(("DOUBLECLICK"     'number " " "doubleclick")
+                    ("ZOOM"            'list   " " "zoomcoordinates" 
"nozoomcoordinates")
+                    ("POLAR"           'list   " " "polarcoordinates" 
"nopolarcoordinates")
+                    ("FORMAT"          'string " " "format")
+                    ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
+                    ("MOUSEFORMAT"     'string " " "mouseformat")
+                    ("LABELS"          'list   " " "labels" "nolabels")
+                    ("LABELOPTIONS"    'string " " "labeloptions")
+                    ("ZOOMJUMP"        'list   " " "zoomjump" "nozoomjump")
+                    ("VERBOSE"         'list   " " "verbose" "noverbose")))
+            (cons "palette"
+                  '(("COLOR"       'list     " " "gray" "color")
+                    ("RGBFORMULAE" 'position " " "rgbformulae" 3)
+                    ("PARITY"      'list     " " "positive" "negative")
+                    ("FORMULAE"    'list     " " "nops_allcF" "ps_allcF")
+                    ("MAXCOLORS"   'number   " ")
+                    ("COLOR_BOX"   'list     " " "nocb" "cbdefault" "cbuser")
+                    ("ORIENTATION" 'list     " " "cbvertical" "cbhorizontal")
+                    ("ORIGIN"      'position " " "origin" 2)
+                    ("SIZE"        'position " " "size" 2)
+                    ("BORDER"      'number   " ")
+                    ("NOBORDER"    'list     " " "bdefault" "noborder")))
+            (cons "pm3d"
+                  '(("AT"         'list*  " " "b" "s" "t" "bs" "bt" "st" "bst")
+                    ("SCANS"      'list   " " "scansautomatic" "scansforward" 
"scansbackward")
+                    ("FLUSH"      'list*  " " "begin" "center" "end")
+                    ("CLIP"       'list   " " "clip1in" "clip4in")
+                    ("ZRANGE"     'range (" " . " ") ":")
+                    ("HIDDEN3D"   'number " ")
+                    ("NOHIDDEN3D" 'list   " " "nohidden3d")
+                    ("FILLING"    'list   " " "transparent" "solid")
+                    ("MAP"        'list   " " "map")))
+
+            (cons "offsets"
+                  '(("LEFT  " 'number " ")
+                    ("RIGHT " 'number " " ",")
+                    ("TOP   " 'number " " ",")
+                    ("BOTTOM" 'number " " ",")))
+            (cons "origin"
+                  '(("X ORIGIN"   'number " ")
+                    ("Y ORIGIN"   'number " " ",")))
+            (cons "output"
+                  '(("FILENAME"   'file " ")))
+            (cons "pointsize"
+                  '(("MULTIPLIER" 'number " ")))
+            (cons "samples"
+                  '(("2D PLOT"    'number " ")
+                    ("3D PLOT"    'number " " ",")))
+            (cons "size"
+                  '(("ASPECT"           'list " " "square" "nosquare"
+                     "ratio" "noratio")
+                    ("X-SCALE OR RATIO" 'number " ")
+                    ("Y-SCALE"          'number " " ",")))
+            (cons "style"
+                  '(("DATA TYPE"  'list " " "data" "function")
+                    ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
+                     "boxxyerrorbars" "candlesticks" "dots"
+                     "financebars" "fsteps" "histeps" "impulses"
+                     "lines" "linespoints" "points" "steps" "vector"
+                     "xerrorbars" "xyerrorbars" "yerrorbars")))
+            (cons "terminal"
+                  '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
+            (cons "tics"
+                  '(("DIRECTION"  'list " " "in" "out")))
+            (cons "ticslevel"
+                  '(("RELATIVE HEIGHT" 'number " ")))
+            (cons "ticscale"
+                  '(("MAJOR" 'number " ")
+                    ("MINOR" 'number " ")))
+            (cons "timestamp"
+                  '(("FORMAT STRING" 'format " ")
+                    ("WHERE"         'list " " "top" "bottom")
+                    ("ROTATE"        'list " " "rotate" "norotate")
+                    ("X-OFFSET"      'number " ")
+                    ("Y-OFFSET"      'number " " ",")
+                    ("FONTNAME"      'list " " gnuplot-gui-fontname-list)))
+            (cons "timefmt"
+                  '(("FORMAT STRING" 'string " ")))
+            (cons "title"
+                  '(("TITLE" 'string " ")))
+            (cons "view"
+                  '(("X-ROTATION" 'number " ")
+                    ("Z-ROTATION" 'number " " ",")
+                    ("SCALE"      'number " " ",")
+                    ("Z-SCALE"    'number " " ",")))
+            ;; ("SCALE" 'position " " "," 4)
+                                        ; _data
+            (cons "xdata"      gnuplot-gui-data-list)
+            (cons "ydata"      gnuplot-gui-data-list)
+            (cons "zdata"      gnuplot-gui-data-list)
+            (cons "x2data"     gnuplot-gui-data-list)
+            (cons "y2data"     gnuplot-gui-data-list)
+                                        ; _label
+            (cons "xlabel"     gnuplot-gui-label-list)
+            (cons "ylabel"     gnuplot-gui-label-list)
+            (cons "zlabel"     gnuplot-gui-label-list)
+            (cons "x2label"    gnuplot-gui-label-list)
+            (cons "y2label"    gnuplot-gui-label-list)
+                                        ; _range, note that the [] syntax for
+                                        ;         the writeback argument is
+                                        ;         not properly supported
+            (cons "xrange"     gnuplot-gui-range-list)
+            (cons "yrange"     gnuplot-gui-range-list)
+            (cons "zrange"     gnuplot-gui-range-list)
+            (cons "x2range"    gnuplot-gui-range-list)
+            (cons "y2range"    gnuplot-gui-range-list)
+            (cons "trange"     gnuplot-gui-range-list)
+            (cons "rrange"     gnuplot-gui-range-list)
+            (cons "urange"     gnuplot-gui-range-list)
+            (cons "vrange"     gnuplot-gui-range-list)
+                                        ; _tics
+            (cons "xtics"      gnuplot-gui-tics-list)
+            (cons "ytics"      gnuplot-gui-tics-list)
+            (cons "ztics"      gnuplot-gui-tics-list)
+            (cons "x2tics"     gnuplot-gui-tics-list)
+            (cons "y2tics"     gnuplot-gui-tics-list)
+                                        ; zeroaxis
+            (cons "zeroaxis"   gnuplot-gui-zeroaxis-list)
+            (cons "xzeroaxis"  gnuplot-gui-zeroaxis-list)
+            (cons "yzeroaxis"  gnuplot-gui-zeroaxis-list)
+            (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
+            (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
+
+            (cons "zero"
+                  '(("THRESHOLD" 'number " ")))
+            ))
 
 (defvar gnuplot-gui-command-types nil
   "Associated list of command descriptions.
 See the doc-string for `gnuplot-gui-all-types'.")
 (setq gnuplot-gui-command-types
       (list (cons "cd"
-                 '(("FILENAME"       'file   " ")))
-           (cons "call"
-                 '(("INPUT FILE"     'file   " ")
-                   ("PARAMETER LIST" 'string " ")))
-           (cons "load"
-                 '(("INPUT FILE"     'file   " ")))
-           (cons "pause"
-                 '(("TIME"           'number " ")
-                   ("MESSAGE"        'string " ")))
-           (cons "print"
-                 '(("EXPRESSION"     'string " ")))
-           (cons "save"
-                 '(("SAVE"           'list   " " "functions" "variables" "set")
-                   ("FILE"           'file   " ")))
-           (cons "update"
-                 '(("INITIAL FILE"   'file   " " t)
-                   ("UPDATED FILE"   'file   " " t))) ))
+                  '(("FILENAME"       'file   " ")))
+            (cons "call"
+                  '(("INPUT FILE"     'file   " ")
+                    ("PARAMETER LIST" 'string " ")))
+            (cons "load"
+                  '(("INPUT FILE"     'file   " ")))
+            (cons "pause"
+                  '(("TIME"           'number " ")
+                    ("MESSAGE"        'string " ")))
+            (cons "print"
+                  '(("EXPRESSION"     'string " ")))
+            (cons "save"
+                  '(("SAVE"           'list   " " "functions" "variables" 
"set")
+                    ("FILE"           'file   " ")))
+            (cons "update"
+                  '(("INITIAL FILE"   'file   " " t)
+                    ("UPDATED FILE"   'file   " " t))) ))
 
 
 (defcustom gnuplot-gui-plot-splot-fit-style 'simple
@@ -665,7 +665,7 @@ all options.  The 'complete setting is prone to making 
errors when
 parsing values already in the script buffer."
   :group 'gnuplot-gui
   :type '(radio (const :tag "Simple listing"   simple)
-               (const :tag "Complete listing" complete)))
+                (const :tag "Complete listing" complete)))
 
 
 (defconst gnuplot-gui-plot-simple-list
@@ -762,36 +762,36 @@ parsing values already in the script buffer."
 See the doc-string for `gnuplot-gui-all-types'.")
 (setq gnuplot-gui-plot-splot-fit
       (list (cons "plot"  (if (equal gnuplot-gui-plot-splot-fit-style 
'complete)
-                             gnuplot-gui-plot-full-list
-                           gnuplot-gui-plot-simple-list))
-           (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                             gnuplot-gui-splot-full-list
-                           gnuplot-gui-splot-simple-list))
-           (cons "fit"   (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                             gnuplot-gui-fit-full-list
-                           gnuplot-gui-fit-simple-list))) )
+                              gnuplot-gui-plot-full-list
+                            gnuplot-gui-plot-simple-list))
+            (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                              gnuplot-gui-splot-full-list
+                            gnuplot-gui-splot-simple-list))
+            (cons "fit"   (if (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                              gnuplot-gui-fit-full-list
+                            gnuplot-gui-fit-simple-list))) )
 
 
 (defvar gnuplot-gui-test-type nil)
 (setq gnuplot-gui-test-type
       (list (cons "test"
-                 '(("TAG"      'tag      " ")
-                   ("LIST"     'list     " " "1" "2" "3")
-                   ("LIST*"    'list*    " " "1" "2" "3")
-                   ("NUMBER"   'number   " " "number")
-                   ("RANGE"    'range   (" " . " ") ":")
-                   ("PAIR"     'pair    (" " . " ") "pair")
-                   ("LABELS"   'labels   ())
-                   ("FILE"     'file     " ")
-                   ("TEXT"     'text     "this is text")
-                   ("STRING"   'string   " ")
-                   ("STRING*"  'string*  " " "string*")
-                   ("FORMAT"   'format   " ")
-                   ("POSITION" 'position " " "at" 3)
-                   ("FONTSIZE" 'fontsize " ") ))))
+                  '(("TAG"      'tag      " ")
+                    ("LIST"     'list     " " "1" "2" "3")
+                    ("LIST*"    'list*    " " "1" "2" "3")
+                    ("NUMBER"   'number   " " "number")
+                    ("RANGE"    'range   (" " . " ") ":")
+                    ("PAIR"     'pair    (" " . " ") "pair")
+                    ("LABELS"   'labels   ())
+                    ("FILE"     'file     " ")
+                    ("TEXT"     'text     "this is text")
+                    ("STRING"   'string   " ")
+                    ("STRING*"  'string*  " " "string*")
+                    ("FORMAT"   'format   " ")
+                    ("POSITION" 'position " " "at" 3)
+                    ("FONTSIZE" 'fontsize " ") ))))
 
 (defvar gnuplot-gui-all-types nil
-    "Associated list of terminal, set option, and command arguments.
+  "Associated list of terminal, set option, and command arguments.
 
 Each entry in the list is a cons cell of the form
       (OPTION . ALIST)
@@ -862,28 +862,28 @@ This alist is formed at load time by appending together
 `gnuplot-gui-command-types'.")
 
 (setq gnuplot-gui-all-types (append gnuplot-gui-terminal-types
-                                   gnuplot-gui-set-types
-                                   gnuplot-gui-command-types
-                                   gnuplot-gui-plot-splot-fit
-                                   gnuplot-gui-test-type
-                                   ))
+                                    gnuplot-gui-set-types
+                                    gnuplot-gui-command-types
+                                    gnuplot-gui-plot-splot-fit
+                                    gnuplot-gui-test-type
+                                    ))
 
 
 (defun gnuplot-gui-swap-simple-complete ()
   (interactive)
   (setq gnuplot-gui-plot-splot-fit-style
-       (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-           'simple 'complete))
+        (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+            'simple 'complete))
   (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
       (progn
-       (setcdr (assoc "plot"  gnuplot-gui-all-types) 
gnuplot-gui-plot-full-list)
-       (setcdr (assoc "splot" gnuplot-gui-all-types) 
gnuplot-gui-splot-full-list)
-       (setcdr (assoc "fit"   gnuplot-gui-all-types) 
gnuplot-gui-fit-full-list))
+        (setcdr (assoc "plot"  gnuplot-gui-all-types) 
gnuplot-gui-plot-full-list)
+        (setcdr (assoc "splot" gnuplot-gui-all-types) 
gnuplot-gui-splot-full-list)
+        (setcdr (assoc "fit"   gnuplot-gui-all-types) 
gnuplot-gui-fit-full-list))
     (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-simple-list)
     (setcdr (assoc "splot" gnuplot-gui-all-types) 
gnuplot-gui-splot-simple-list)
     (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-simple-list))
   (message "Using %s lists for plot, splot, and fit."
-          gnuplot-gui-plot-splot-fit-style) )
+           gnuplot-gui-plot-splot-fit-style) )
 
 
 
@@ -918,86 +918,86 @@ Note that \"cntrparam\" is not currently supported."
   (interactive)
   (when (fboundp 'widget-create)
     (let ((begin  (gnuplot-point-at-beginning-of-command))
-         (end    (save-excursion (end-of-line)       (point-marker)))
-         (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
-         (set nil) (term nil))
+          (end    (save-excursion (end-of-line)       (point-marker)))
+          (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
+          (set nil) (term nil))
       (save-excursion
-       ;; there can be more then one command per line
-       (if (re-search-forward termin end "to_limit")
-           (progn (backward-char (length (match-string 1)))
-                  (setq end (point-marker))))
-       (goto-char begin)
-       (skip-syntax-forward "-" end)
-       ;; various constructions are recognized here. at the end of this
-       ;; cond, point should be just after the word whose arguments are
-       ;; to be set
-       (cond ((looking-at "set\\s-+")
-              (setq set t)
-              (goto-char (match-end 0))
-              (if (looking-at "\\sw+") (goto-char (match-end 0)))
-              (when (string-match "^ter" (gnuplot-this-word)) ; terminal?
-                (setq term t)
-                (forward-word 1))
-              (when (string-match "^\\(da\\|fu\\)" (gnuplot-this-word))
-                (unless (looking-at "\\s-+st")
-                  (insert " style") (forward-word 1))
-                (forward-word 1)))
-             ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
-                                  "\\w*"
-                                  "[\\s-\\']"))
-              (forward-word 1))
-             ;;(goto-char (match-end 0)))
-             (t
-              (forward-word 1)))
-       (if (> (point) end) (goto-char end))
-       (let* ((w (gnuplot-this-word))
-              (wd (try-completion w gnuplot-gui-all-types))
-              (word "") wrd list)
-         (cond ((equal wd t)                     (setq word w))
-               ((equal wd nil)                   (setq word w))
-               ((assoc wd gnuplot-gui-all-types) (setq word wd))
-               (t                                (setq wd nil)))
-         (cond ((equal (string-match "^\\s-*$" w) 0)
-                (message "Blank line"))
-               ((and wd (stringp word))
-                (gnuplot-gui-correct-command word set term begin)
-                (setq gnuplot-gui-alist nil
-                      gnuplot-gui-current-string
-                      (buffer-substring-no-properties (point) end))
-                (gnuplot-gui-set-alist word gnuplot-gui-current-string)
-                (let* ((old-height (gnuplot-gui-get-frame-param 'height))
-                       (old-top    (gnuplot-gui-get-frame-param 'top)))
-                  (when (or
-                         (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
-                              (member* word '("plot" "splot" "fit")
-                                       :test 'string=))
-                         (equal word "test"))
-                    (gnuplot-gui-set-frame-param 'height 32)
-                    (gnuplot-gui-set-frame-param 'top    50))
-                  (gnuplot-gui-prompt-for-frame word)
-                  (when (or
-                         (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
-                              (member* word '("plot" "splot" "fit")
-                                       :test 'string=))
-                         (equal word "test"))
-                    (gnuplot-gui-set-frame-param 'height old-height)
-                    (gnuplot-gui-set-frame-param 'top    old-top)) ))
-               ((setq wrd (car (all-completions w '(("cntrparam")))))
-                (message
-                 "Setting arguments for %S is currently unsuported in 
gnuplot-mode"
-                 wrd))
-               ((setq list (all-completions w gnuplot-gui-all-types))
-                (message "%S could be one of %S" w list))
-               (t
-                (message
-                 "%S is not a gnuplot command which takes options" w)))) ))))
+        ;; there can be more then one command per line
+        (if (re-search-forward termin end "to_limit")
+            (progn (backward-char (length (match-string 1)))
+                   (setq end (point-marker))))
+        (goto-char begin)
+        (skip-syntax-forward "-" end)
+        ;; various constructions are recognized here. at the end of this
+        ;; cond, point should be just after the word whose arguments are
+        ;; to be set
+        (cond ((looking-at "set\\s-+")
+               (setq set t)
+               (goto-char (match-end 0))
+               (if (looking-at "\\sw+") (goto-char (match-end 0)))
+               (when (string-match "^ter" (gnuplot-this-word)) ; terminal?
+                 (setq term t)
+                 (forward-word 1))
+               (when (string-match "^\\(da\\|fu\\)" (gnuplot-this-word))
+                 (unless (looking-at "\\s-+st")
+                   (insert " style") (forward-word 1))
+                 (forward-word 1)))
+              ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
+                                   "\\w*"
+                                   "[\\s-\\']"))
+               (forward-word 1))
+              ;;(goto-char (match-end 0)))
+              (t
+               (forward-word 1)))
+        (if (> (point) end) (goto-char end))
+        (let* ((w (gnuplot-this-word))
+               (wd (try-completion w gnuplot-gui-all-types))
+               (word "") wrd list)
+          (cond ((equal wd t)                     (setq word w))
+                ((equal wd nil)                   (setq word w))
+                ((assoc wd gnuplot-gui-all-types) (setq word wd))
+                (t                                (setq wd nil)))
+          (cond ((equal (string-match "^\\s-*$" w) 0)
+                 (message "Blank line"))
+                ((and wd (stringp word))
+                 (gnuplot-gui-correct-command word set term begin)
+                 (setq gnuplot-gui-alist nil
+                       gnuplot-gui-current-string
+                       (buffer-substring-no-properties (point) end))
+                 (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                 (let* ((old-height (gnuplot-gui-get-frame-param 'height))
+                        (old-top    (gnuplot-gui-get-frame-param 'top)))
+                   (when (or
+                          (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                               (member* word '("plot" "splot" "fit")
+                                        :test 'string=))
+                          (equal word "test"))
+                     (gnuplot-gui-set-frame-param 'height 32)
+                     (gnuplot-gui-set-frame-param 'top    50))
+                   (gnuplot-gui-prompt-for-frame word)
+                   (when (or
+                          (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                               (member* word '("plot" "splot" "fit")
+                                        :test 'string=))
+                          (equal word "test"))
+                     (gnuplot-gui-set-frame-param 'height old-height)
+                     (gnuplot-gui-set-frame-param 'top    old-top)) ))
+                ((setq wrd (car (all-completions w '(("cntrparam")))))
+                 (message
+                  "Setting arguments for %S is currently unsuported in 
gnuplot-mode"
+                  wrd))
+                ((setq list (all-completions w gnuplot-gui-all-types))
+                 (message "%S could be one of %S" w list))
+                (t
+                 (message
+                  "%S is not a gnuplot command which takes options" w)))) ))))
 
 (defun gnuplot-gui-toggle-popup ()
   (interactive)
   (setq gnuplot-gui-popup-flag (not gnuplot-gui-popup-flag))
   (message (if gnuplot-gui-popup-flag
-              "Argument popup will appear after insertions."
-            "Argument popup will no longer appear after insertions.")))
+               "Argument popup will appear after insertions."
+             "Argument popup will no longer appear after insertions.")))
 
 
 (defun gnuplot-gui-y-n (foo))
@@ -1012,28 +1012,28 @@ WORD is the item being set. SET and TERM are non-nil if 
the words
 BEGIN is the beginning of the command."
   (save-excursion
     (cond ((assoc word gnuplot-gui-terminal-types)
-          (when (and (not (and set term))
-                     (gnuplot-gui-y-n
-                      (format
-                       "%S must be preceded by \"set terminal\".  Add it? "
-                       word)))
-            (backward-word 1)
-            (let ((e (point-marker)))
-              (goto-char begin)
-              (skip-syntax-forward "-" e)
-              (delete-region (point) e)
-              (insert "set terminal "))))
-         ((assoc word gnuplot-gui-set-types)
-          (when (and (not set)
-                     (gnuplot-gui-y-n
-                      (format
-                       "%S must be preceded by \"set\".  Add \"set\"? " word)))
-            (backward-word 1)
-            (let ((e (point-marker)))
-              (goto-char begin)
-              (skip-syntax-forward "-" e)
-              (delete-region (point) e)
-              (insert "set "))))))
+           (when (and (not (and set term))
+                      (gnuplot-gui-y-n
+                       (format
+                        "%S must be preceded by \"set terminal\".  Add it? "
+                        word)))
+             (backward-word 1)
+             (let ((e (point-marker)))
+               (goto-char begin)
+               (skip-syntax-forward "-" e)
+               (delete-region (point) e)
+               (insert "set terminal "))))
+          ((assoc word gnuplot-gui-set-types)
+           (when (and (not set)
+                      (gnuplot-gui-y-n
+                       (format
+                        "%S must be preceded by \"set\".  Add \"set\"? " 
word)))
+             (backward-word 1)
+             (let ((e (point-marker)))
+               (goto-char begin)
+               (skip-syntax-forward "-" e)
+               (delete-region (point) e)
+               (insert "set "))))))
   (message nil))
 
 
@@ -1049,24 +1049,24 @@ bounding single quotes with double quotes, since double 
quotes are
 used in `gnuplot-gui-all-types'."
   (let (fixed-list quote quoted)       ; remove blanks
     (setq list (remove* "\\s-+" list :test 'string-match)
-         list (remove* ""      list :test 'string=))
+          list (remove* ""      list :test 'string=))
     (while list                                ; concatinate parts of quoted 
string
       (if (not (string-match "^\\([\]\[()'\"]\\)" (car list)))
-         (setq fixed-list (append fixed-list (list (car list))))
-       (setq quote (match-string 1 (car list))
-             quoted (car list))
-       (if (string= quote "[") (setq quote "]"))
-       (if (string= quote "(") (setq quote ")"))
-       (while (and list
-                   (or (equal (length quoted) 1)
-                       (not (string-match (concat (regexp-quote quote) "$")
-                                          quoted))))
-         (setq quoted (concat quoted " " (cadr list))
-               list (cdr list)))
-       (if (string= quote "'")
-           (setq quoted (concat "\"" (substring quoted 1))
-                 quoted (concat (substring quoted 0 -1) "\"")))
-       (setq fixed-list (append fixed-list (list quoted))))
+          (setq fixed-list (append fixed-list (list (car list))))
+        (setq quote (match-string 1 (car list))
+              quoted (car list))
+        (if (string= quote "[") (setq quote "]"))
+        (if (string= quote "(") (setq quote ")"))
+        (while (and list
+                    (or (equal (length quoted) 1)
+                        (not (string-match (concat (regexp-quote quote) "$")
+                                           quoted))))
+          (setq quoted (concat quoted " " (cadr list))
+                list (cdr list)))
+        (if (string= quote "'")
+            (setq quoted (concat "\"" (substring quoted 1))
+                  quoted (concat (substring quoted 0 -1) "\"")))
+        (setq fixed-list (append fixed-list (list quoted))))
       (setq list (cdr list)) )
     fixed-list))
 
@@ -1076,146 +1076,146 @@ WORD is the Gnuplot expression whose arguments are 
being set.  STRING
 is text from the buffer containing the previous values for WORD's
 arguments."
   (let ((alist    (cdr (assoc word gnuplot-gui-all-types)))
-       (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
+        (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
     ;; arg-list contains the arguments taken from the buffer
     (setq gnuplot-gui-alist nil)
     (while alist
       (let* ((list      (car alist))
-            (tag       (gnuplot-gui-type-tag     list))
-            (symbol    (eval (gnuplot-gui-type-symbol list)))
-            (default   (gnuplot-gui-type-default list))
-            (prefix    (gnuplot-gui-type-prefix  list))
-            (values    (gnuplot-gui-type-list    list))
-            (this-cons (cond ((stringp default) (cons tag default))
-                             ((consp default) ; set cons valued default w/care
-                              (cons tag (cons (car default) (cdr default))))
-                             (t (cons tag default))))
-            (temp-list arg-list) )
-       ;;(message "%S" temp-list)      ; want to lop values off arg-list
-                                       ; as they are found
-       (if (symbolp (cadr values))
-         (setq values (symbol-value (cadr values))))
-       ;; check if an argument of this type is in arg-list
-       ;; set the current cons cell if it is
-       (while temp-list
-         (cond
-          ;; ---------------------------- list
-          ((member* symbol '(list list*) :test 'equal)
-           (let* ((case-fold-search nil)
-                  (match-cons (member* (concat "^" (car temp-list))
-                                       values :test 'string-match)))
-             (if (and (car match-cons) ; " " may be first elem. of list
-                      (not (string= " " (car match-cons))))
-                 (setq this-cons (cons tag (car match-cons))
-                       arg-list (remove* (car temp-list) arg-list
-                                         :test 'string= :count 1)
-                       temp-list nil)
-               (setq temp-list (cdr temp-list)))))
-          ;; ---------------------------- tag (first number in list)
-          ((equal symbol 'tag)
-           (if (string-match "^[-0-9.]+$" (car arg-list))
-               (setq this-cons (cons  tag (car arg-list))
-                     temp-list nil)
-             (setq temp-list (cdr temp-list))) )
-          ;; ---------------------------- fontsize (last number in list)
-          ((equal symbol 'fontsize)
-           (if (string-match "^[-0-9.]+$" (car (last arg-list)))
-               (setq this-cons (cons  tag (car (last arg-list)))
-                     temp-list nil)
-             (setq temp-list (cdr temp-list))) )
-          ;; ---------------------------- number with prefix
-          ((equal symbol 'number)
-           (cond ((and (string= prefix (car temp-list))
-                       (string-match "^[-0-9.]+$" (cadr temp-list)))
-                  (setq this-cons (cons tag (cadr temp-list))
-                        arg-list (remove* (car temp-list) arg-list
-                                          :test 'string= :count 1)
-                        arg-list (remove* (cadr temp-list) arg-list
-                                          :test 'string= :count 1)
-                        temp-list nil))
-                 ;; --------------------- number without prefix
-                 ((and (not prefix)
-                       (string-match "^[-0-9.]+$" (car temp-list)))
-                  (setq this-cons (cons tag (car temp-list))
-                        arg-list (remove* (car temp-list) arg-list
-                                          :test 'string= :count 1)
-                        temp-list nil))
-                 (t
-                  (setq temp-list (cdr temp-list)))))
-          ;; ---------------------------- pair with prefix
-          ((equal symbol 'pair)
-           (if (and (string= prefix (car temp-list))
-                    (string-match "^[-0-9.]+$" (cadr temp-list)))
-               (let ((this-car (cadr temp-list))
-                     (this-cdr (if (string-match "^[-0-9.]+$" (caddr 
temp-list))
-                                   (caddr temp-list) "")))
-                 (setq this-cons (cons tag (cons this-car this-cdr))
-                       temp-list nil))
-             (setq temp-list (cdr temp-list))))
-          ;; ---------------------------- range
-          ((equal symbol 'range)
-           (if (string-match (concat "\\[\\s-*" ; opening bracket
-                                     "\\([^:, \t]*\\)" ; first argument
-                                     "\\s-*[:,]\\s-*" ; separator
-                                     "\\([^\] \t]*\\)" ; second argument
-                                     "\\s-*\\]") ; closing bracket
-                             (car temp-list))
-               (setq this-cons
-                     (cons tag (cons (match-string 1 (car temp-list))
-                                     (match-string 2 (car temp-list))))
-                     arg-list (remove* (car temp-list) arg-list
-                                       :test 'string= :count 1)
-                     temp-list nil)
-             (setq temp-list (cdr temp-list)) ))
-          ;; ---------------------------- labels
-          ((equal symbol 'labels)
-           (if (string-match (concat "(" ; opening paren
-                                     "\\([^\)]*\\)" ; string
-                                     ")") ; closing paren
-                             (car temp-list))
-               (let* ((list (split-string (car temp-list) "[ \t(),]+"))
-                      (list (remove* "" list :test 'string=))
-                      (return ()))
-                 (while list
-                   (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
-                       (setq return (append return
-                                            (list (match-string 1 (car list))))
-                             list (cdr list)
-                             return (append return (list (car list))) )
-                     (setq return (append return (list "" (car list)))))
-                   (setq list (cdr list)) )
-                 (setq this-cons (cons tag return)
-                       arg-list (remove* (car temp-list) arg-list
-                                         :test 'string= :count 1)
-                       temp-list nil))
-             (setq temp-list (cdr temp-list))) )
-          ;; ---------------------------- string, file, format
-          ((member* symbol '(string file format) :test 'equal)
-           (if (string-match (concat "['\"]" ; opening quote
-                                     "\\([^'\"]*\\)" ; string
-                                     "['\"]") ; closing quote
-                             (car temp-list))
-               (setq this-cons (cons tag (match-string 0 (car temp-list)))
-                     arg-list (remove* (car temp-list) arg-list
-                                       :test 'string= :count 1)
-                     temp-list nil)
-             (setq temp-list (cdr temp-list)) ))
-          ;; ---------------------------- string*
-          ((equal symbol 'string*)
-           (if (string= prefix (car temp-list))
-               (setq this-cons (cons tag (cadr temp-list))
-                     arg-list (remove* (car temp-list) arg-list
-                                       :test 'string= :count 1)
-                     arg-list (remove* (cadr temp-list) arg-list
-                                       :test 'string= :count 1)
-                     temp-list nil)
-             (setq temp-list (cdr temp-list)) ) )
-          ;; ---------------------------- other or unknown
-          (t
-           (setq temp-list nil))
-          ))
-       (setq gnuplot-gui-alist
-             (append gnuplot-gui-alist (list this-cons))))
+             (tag       (gnuplot-gui-type-tag     list))
+             (symbol    (eval (gnuplot-gui-type-symbol list)))
+             (default   (gnuplot-gui-type-default list))
+             (prefix    (gnuplot-gui-type-prefix  list))
+             (values    (gnuplot-gui-type-list    list))
+             (this-cons (cond ((stringp default) (cons tag default))
+                              ((consp default) ; set cons valued default w/care
+                               (cons tag (cons (car default) (cdr default))))
+                              (t (cons tag default))))
+             (temp-list arg-list) )
+        ;;(message "%S" temp-list)     ; want to lop values off arg-list
+                                        ; as they are found
+        (if (symbolp (cadr values))
+            (setq values (symbol-value (cadr values))))
+        ;; check if an argument of this type is in arg-list
+        ;; set the current cons cell if it is
+        (while temp-list
+          (cond
+           ;; ---------------------------- list
+           ((member* symbol '(list list*) :test 'equal)
+            (let* ((case-fold-search nil)
+                   (match-cons (member* (concat "^" (car temp-list))
+                                        values :test 'string-match)))
+              (if (and (car match-cons) ; " " may be first elem. of list
+                       (not (string= " " (car match-cons))))
+                  (setq this-cons (cons tag (car match-cons))
+                        arg-list (remove* (car temp-list) arg-list
+                                          :test 'string= :count 1)
+                        temp-list nil)
+                (setq temp-list (cdr temp-list)))))
+           ;; ---------------------------- tag (first number in list)
+           ((equal symbol 'tag)
+            (if (string-match "^[-0-9.]+$" (car arg-list))
+                (setq this-cons (cons  tag (car arg-list))
+                      temp-list nil)
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- fontsize (last number in list)
+           ((equal symbol 'fontsize)
+            (if (string-match "^[-0-9.]+$" (car (last arg-list)))
+                (setq this-cons (cons  tag (car (last arg-list)))
+                      temp-list nil)
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- number with prefix
+           ((equal symbol 'number)
+            (cond ((and (string= prefix (car temp-list))
+                        (string-match "^[-0-9.]+$" (cadr temp-list)))
+                   (setq this-cons (cons tag (cadr temp-list))
+                         arg-list (remove* (car temp-list) arg-list
+                                           :test 'string= :count 1)
+                         arg-list (remove* (cadr temp-list) arg-list
+                                           :test 'string= :count 1)
+                         temp-list nil))
+                  ;; --------------------- number without prefix
+                  ((and (not prefix)
+                        (string-match "^[-0-9.]+$" (car temp-list)))
+                   (setq this-cons (cons tag (car temp-list))
+                         arg-list (remove* (car temp-list) arg-list
+                                           :test 'string= :count 1)
+                         temp-list nil))
+                  (t
+                   (setq temp-list (cdr temp-list)))))
+           ;; ---------------------------- pair with prefix
+           ((equal symbol 'pair)
+            (if (and (string= prefix (car temp-list))
+                     (string-match "^[-0-9.]+$" (cadr temp-list)))
+                (let ((this-car (cadr temp-list))
+                      (this-cdr (if (string-match "^[-0-9.]+$" (caddr 
temp-list))
+                                    (caddr temp-list) "")))
+                  (setq this-cons (cons tag (cons this-car this-cdr))
+                        temp-list nil))
+              (setq temp-list (cdr temp-list))))
+           ;; ---------------------------- range
+           ((equal symbol 'range)
+            (if (string-match (concat "\\[\\s-*" ; opening bracket
+                                      "\\([^:, \t]*\\)"        ; first argument
+                                      "\\s-*[:,]\\s-*" ; separator
+                                      "\\([^\] \t]*\\)"        ; second 
argument
+                                      "\\s-*\\]") ; closing bracket
+                              (car temp-list))
+                (setq this-cons
+                      (cons tag (cons (match-string 1 (car temp-list))
+                                      (match-string 2 (car temp-list))))
+                      arg-list (remove* (car temp-list) arg-list
+                                        :test 'string= :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ))
+           ;; ---------------------------- labels
+           ((equal symbol 'labels)
+            (if (string-match (concat "(" ; opening paren
+                                      "\\([^\)]*\\)" ; string
+                                      ")") ; closing paren
+                              (car temp-list))
+                (let* ((list (split-string (car temp-list) "[ \t(),]+"))
+                       (list (remove* "" list :test 'string=))
+                       (return ()))
+                  (while list
+                    (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
+                        (setq return (append return
+                                             (list (match-string 1 (car 
list))))
+                              list (cdr list)
+                              return (append return (list (car list))) )
+                      (setq return (append return (list "" (car list)))))
+                    (setq list (cdr list)) )
+                  (setq this-cons (cons tag return)
+                        arg-list (remove* (car temp-list) arg-list
+                                          :test 'string= :count 1)
+                        temp-list nil))
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- string, file, format
+           ((member* symbol '(string file format) :test 'equal)
+            (if (string-match (concat "['\"]" ; opening quote
+                                      "\\([^'\"]*\\)" ; string
+                                      "['\"]") ; closing quote
+                              (car temp-list))
+                (setq this-cons (cons tag (match-string 0 (car temp-list)))
+                      arg-list (remove* (car temp-list) arg-list
+                                        :test 'string= :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ))
+           ;; ---------------------------- string*
+           ((equal symbol 'string*)
+            (if (string= prefix (car temp-list))
+                (setq this-cons (cons tag (cadr temp-list))
+                      arg-list (remove* (car temp-list) arg-list
+                                        :test 'string= :count 1)
+                      arg-list (remove* (cadr temp-list) arg-list
+                                        :test 'string= :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ) )
+           ;; ---------------------------- other or unknown
+           (t
+            (setq temp-list nil))
+           ))
+        (setq gnuplot-gui-alist
+              (append gnuplot-gui-alist (list this-cons))))
       (setq alist (cdr alist))) ))
 
 
@@ -1225,67 +1225,67 @@ arguments."
 into strings.  This is called right before inserting the arguments
 into the buffer.  TYPE is the object whose arguments are being set."
   (let ((alist gnuplot-gui-alist)
-       (types (cdr (assoc type gnuplot-gui-all-types))) )
+        (types (cdr (assoc type gnuplot-gui-all-types))) )
     (while alist  ;; loop thru alist looking for tyeps needing post-processing
       (let* ((list   (assoc (caar alist) types))
-            (value  (cdr (assoc (caar alist) gnuplot-gui-alist)))
-            (prefix (gnuplot-gui-type-prefix list))
-            (symb   (gnuplot-gui-type-symbol list)) )
-       (cond
-        ;;-------------------------- flat text
-        ((equal (eval symb) 'text)
-         (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
-        ;;-------------------------- range [#:#] or [#,#]
-        ((equal (eval symb) 'range)
-         (if (and (string-match "^\\s-*$" (car value))
-                  (string-match "^\\s-*$" (cdr value)))
-             (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
-           (setcdr (assoc (caar alist) gnuplot-gui-alist)
-                   (concat "[" (car value) prefix (cdr value) "]")) ) )
-        ;;-------------------------- pair
-        ((equal (eval symb) 'pair)
-         (if (and (string-match "^\\s-*$" (car value))
-                  (string-match "^\\s-*$" (cdr value)))
-             (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
-           (setcdr (assoc (caar alist) gnuplot-gui-alist)
-                   (concat prefix " " (car value) " " (cdr value) )) ) )
-        ;;-------------------------- labels
-        ((equal (eval symb) 'labels)
-         (if (consp value)
-             (let ((word "") (list value))
-               (while list
-                 (if (string-match "^\\s-*$" (car list))
-                     (setq word (concat word (format "%s, " (cadr list))))
-                   (setq word (concat word (format "%S %s, " (car list)
-                                                   (cadr list)))))
-                 (setq list (cddr list)) )
-               (setq value (concat "(" (substring word 0 -2) ")")))
-           (setq value "") )
-         (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
-
-       (setq alist (cdr alist))) )))
+             (value  (cdr (assoc (caar alist) gnuplot-gui-alist)))
+             (prefix (gnuplot-gui-type-prefix list))
+             (symb   (gnuplot-gui-type-symbol list)) )
+        (cond
+         ;;-------------------------- flat text
+         ((equal (eval symb) 'text)
+          (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
+         ;;-------------------------- range [#:#] or [#,#]
+         ((equal (eval symb) 'range)
+          (if (and (string-match "^\\s-*$" (car value))
+                   (string-match "^\\s-*$" (cdr value)))
+              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+            (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                    (concat "[" (car value) prefix (cdr value) "]")) ) )
+         ;;-------------------------- pair
+         ((equal (eval symb) 'pair)
+          (if (and (string-match "^\\s-*$" (car value))
+                   (string-match "^\\s-*$" (cdr value)))
+              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+            (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                    (concat prefix " " (car value) " " (cdr value) )) ) )
+         ;;-------------------------- labels
+         ((equal (eval symb) 'labels)
+          (if (consp value)
+              (let ((word "") (list value))
+                (while list
+                  (if (string-match "^\\s-*$" (car list))
+                      (setq word (concat word (format "%s, " (cadr list))))
+                    (setq word (concat word (format "%S %s, " (car list)
+                                                    (cadr list)))))
+                  (setq list (cddr list)) )
+                (setq value (concat "(" (substring word 0 -2) ")")))
+            (setq value "") )
+          (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
+
+        (setq alist (cdr alist))) )))
 
 
 ;;; GUI frames
 
 (defun gnuplot-gui-prompt-for-frame (&optional option save-frame)
   (setq option (or option (completing-read "Option: " gnuplot-gui-all-types
-                                          nil t nil t)))
+                                           nil t nil t)))
   (gnuplot-gui-make-frame
    option (cdr (assoc option gnuplot-gui-all-types)) save-frame) )
 
 
 (defface gnuplot-gui-error-face '((((class color) (background light))
-                                 (:foreground "grey30"))
-                                (((class color) (background dark))
-                                 (:foreground "grey70")))
+                                   (:foreground "grey30"))
+                                  (((class color) (background dark))
+                                   (:foreground "grey70")))
   "Face used to display message about unknown widget types."
   :group 'gnuplot-faces)
 
 (defface gnuplot-gui-flat-text-face '((((class color) (background light))
-                                      (:foreground "MediumBlue"))
-                                     (((class color) (background dark))
-                                      (:foreground "LightSteelBlue")))
+                                       (:foreground "MediumBlue"))
+                                      (((class color) (background dark))
+                                       (:foreground "LightSteelBlue")))
   "Face used to display message about unknown widget types."
   :group 'gnuplot-faces)
 
@@ -1296,173 +1296,173 @@ the alist of arguments for ITEM taken from 
`gnuplot-gui-all-types'.
 SAVE-FRAME is non-nil when the widgets are being reset."
   (unless save-frame
     (setq gnuplot-current-frame (selected-frame)
-         gnuplot-current-buffer (current-buffer)
-         gnuplot-current-buffer-point (point-marker))
+          gnuplot-current-buffer (current-buffer)
+          gnuplot-current-buffer-point (point-marker))
     (unless (and gnuplot-gui-frame (frame-live-p gnuplot-gui-frame))
       (setq gnuplot-gui-frame (if gnuplot-xemacs-p
-                                 (make-frame gnuplot-gui-frame-plist)
-                               (make-frame gnuplot-gui-frame-parameters))))
+                                  (make-frame gnuplot-gui-frame-plist)
+                                (make-frame gnuplot-gui-frame-parameters))))
     (select-frame gnuplot-gui-frame)
     ;;(set-frame-position gnuplot-gui-frame 150 150) ;; so herky-jerky
     (if gnuplot-xemacs-p
-       (set-mouse-position (selected-window) 0 0)
+        (set-mouse-position (selected-window) 0 0)
       (set-mouse-position gnuplot-gui-frame 0 0)))
   (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
   (switch-to-buffer (get-buffer-create "*Gnuplot GUI*"))
   (kill-all-local-variables)
   (if gnuplot-xemacs-p
       (progn
-       (set (make-local-variable 'frame-title-format)
-            "Set Gnuplot Options")
-       (set (make-local-variable 'frame-icon-title-format)
-            "Set Gnuplot Options"))
+        (set (make-local-variable 'frame-title-format)
+             "Set Gnuplot Options")
+        (set (make-local-variable 'frame-icon-title-format)
+             "Set Gnuplot Options"))
     (modify-frame-parameters (selected-frame)
-                            '((title . "Set Gnuplot Options"))) )
+                             '((title . "Set Gnuplot Options"))) )
   (widget-insert "\nSet options for \"" item "\"  ")
   (let (tag help val)
     (cond ((string-match "^[xyz]2?tics" item)
-          (setq tag  "info on tic labels"
-                help "Open a frame displaying the info entry for tic labels"
-                val  "xtics"))
-         ((string-match "^no" item)
-          (setq tag  (concat "info on " (substring item 2))
-                help (format "Open a frame displaying the info entry for %S"
-                             item)
-                val  item))
-         (t
-          (setq tag  (concat "info on " item)
-                help (format "Open a frame displaying the info entry for %S"
-                             item)
-                val  item)))
+           (setq tag  "info on tic labels"
+                 help "Open a frame displaying the info entry for tic labels"
+                 val  "xtics"))
+          ((string-match "^no" item)
+           (setq tag  (concat "info on " (substring item 2))
+                 help (format "Open a frame displaying the info entry for %S"
+                              item)
+                 val  item))
+          (t
+           (setq tag  (concat "info on " item)
+                 help (format "Open a frame displaying the info entry for %S"
+                              item)
+                 val  item)))
     (widget-create 'gnuplot-gui-info-link :tag tag :help-echo help :value val))
 
   (widget-insert "\n\n")
   (while alist
     (let* ((this    (car   alist))
-          (tag     (gnuplot-gui-type-tag    this))
-          (wtype   (gnuplot-gui-type-symbol this))
-          (prefix  (gnuplot-gui-type-prefix this))
-          (default (cdr (assoc tag gnuplot-gui-alist)))
-          (list    (gnuplot-gui-type-list   this)))
+           (tag     (gnuplot-gui-type-tag    this))
+           (wtype   (gnuplot-gui-type-symbol this))
+           (prefix  (gnuplot-gui-type-prefix this))
+           (default (cdr (assoc tag gnuplot-gui-alist)))
+           (list    (gnuplot-gui-type-list   this)))
       (if (symbolp (cadr list))
-         (setq list (symbol-value (cadr list))))
+          (setq list (symbol-value (cadr list))))
       (widget-insert "\t")             ; insert the appropriate widget
       (cond
        ;;------------------------------ list, list* ------------
        ((member* (eval wtype) '(list list*) :test 'equal)
-       (let ((starred (if (equal (eval wtype) 'list*) t nil)))
-         (gnuplot-gui-menu-choice tag default list starred)))
+        (let ((starred (if (equal (eval wtype) 'list*) t nil)))
+          (gnuplot-gui-menu-choice tag default list starred)))
        ;;------------------------------ number, tag, fontsize --
        ((member* (eval wtype) '(number tag fontsize) :test 'equal)
-       (gnuplot-gui-number tag default prefix))
+        (gnuplot-gui-number tag default prefix))
        ;;------------------------------ position ---------------
        ;;------------------------------ range, pair ------------
        ((member* (eval wtype) '(range pair) :test 'equal)
-       (let ((is-range (equal (eval wtype) 'range)))
-         (gnuplot-gui-range tag default prefix is-range)))
+        (let ((is-range (equal (eval wtype) 'range)))
+          (gnuplot-gui-range tag default prefix is-range)))
        ;;------------------------------ string, string* --------
        ((member* (eval wtype) '(string string*) :test 'equal)
-       (let ((starred (if (equal (eval wtype) 'string) nil t)))
-         (gnuplot-gui-string tag default prefix starred)))
+        (let ((starred (if (equal (eval wtype) 'string) nil t)))
+          (gnuplot-gui-string tag default prefix starred)))
        ;;------------------------------ format -----------------
        ((equal (eval wtype) 'format)
-       (gnuplot-gui-format tag default))
+        (gnuplot-gui-format tag default))
        ;;------------------------------ file -------------------
        ((equal (eval wtype) 'file)
-       (gnuplot-gui-file tag default prefix))
+        (gnuplot-gui-file tag default prefix))
        ;;------------------------------ labels -----------------
        ((equal (eval wtype) 'labels)
-       (gnuplot-gui-labels tag default))
+        (gnuplot-gui-labels tag default))
        ;;------------------------------ text -------------------
        ((equal (eval wtype) 'text)
-       (let ((str (gnuplot-gui-type-default this)))
-         (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face 
str)
-         (widget-insert str "\n")))
+        (let ((str (gnuplot-gui-type-default this)))
+          (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face 
str)
+          (widget-insert str "\n")))
        ;;------------------------------ unknown ----------------
        (t
-       (let ((str (concat "<" (downcase tag) "> ('"
-                          (symbol-name (eval wtype))
-                          " arguments are not yet supported)\n")))
-         (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
-         (widget-insert str)) )))
+        (let ((str (concat "<" (downcase tag) "> ('"
+                           (symbol-name (eval wtype))
+                           " arguments are not yet supported)\n")))
+          (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
+          (widget-insert str)) )))
     (setq alist (cdr alist)))
   ;; insert control buttons: [Set options]   [Reset]   [Clear]   [Cancel]
   (widget-insert "\n\t")
   (widget-create 'push-button
-                :value "Set options"
-                :doc item
-                :button-face 'gnuplot-gui-button-face
-                :help-echo "Push this button to set options"
-                :notify
-                (lambda (widget &rest ignore)
-                  (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
-                  (delete-frame)
-                  (select-frame gnuplot-current-frame)
-                  (switch-to-buffer gnuplot-current-buffer)
-                  (goto-char gnuplot-current-buffer-point)
-                  (gnuplot-gui-post-process-alist
-                   (widget-get widget :doc))
-                  (let ((alist gnuplot-gui-alist) marker
-                        (eol (save-excursion (end-of-line) (point-marker) )) )
-                    (if (re-search-forward ";" eol "to_limit")
-                        (backward-char 1))
-                    (delete-region gnuplot-current-buffer-point (point-marker))
-                    (delete-horizontal-space)
-                    (setq marker (point-marker))
-                    (while alist
-                      (let ((val (cdar alist)))
-                        (if (string-match "^\\s-+$" val) ()
-                          (if (string-match "^['\"]\\(.*\\)['\"]$" val)
-                              (setq val (concat gnuplot-quote-character
-                                                (match-string 1 val)
-                                                gnuplot-quote-character)))
-                          (insert (format " %s" val))))
-                      (setq alist (cdr alist)))
-                    (setq eol (point-marker))
-                    (goto-char marker)
-                    (while (< (point) eol) ; a few odd cases
-                      (unless (looking-at (concat "[" (regexp-quote "(")
-                                                  (regexp-quote "*") ",]"))
-                        (just-one-space))
-                      (forward-sexp)))
-                  (delete-horizontal-space)
-                  (if (string= "terminal" (widget-get widget :doc))
-                      (gnuplot-gui-set-options-and-insert)) ))
+                 :value "Set options"
+                 :doc item
+                 :button-face 'gnuplot-gui-button-face
+                 :help-echo "Push this button to set options"
+                 :notify
+                 (lambda (widget &rest ignore)
+                   (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                   (delete-frame)
+                   (select-frame gnuplot-current-frame)
+                   (switch-to-buffer gnuplot-current-buffer)
+                   (goto-char gnuplot-current-buffer-point)
+                   (gnuplot-gui-post-process-alist
+                    (widget-get widget :doc))
+                   (let ((alist gnuplot-gui-alist) marker
+                         (eol (save-excursion (end-of-line) (point-marker) )) )
+                     (if (re-search-forward ";" eol "to_limit")
+                         (backward-char 1))
+                     (delete-region gnuplot-current-buffer-point 
(point-marker))
+                     (delete-horizontal-space)
+                     (setq marker (point-marker))
+                     (while alist
+                       (let ((val (cdar alist)))
+                         (if (string-match "^\\s-+$" val) ()
+                           (if (string-match "^['\"]\\(.*\\)['\"]$" val)
+                               (setq val (concat gnuplot-quote-character
+                                                 (match-string 1 val)
+                                                 gnuplot-quote-character)))
+                           (insert (format " %s" val))))
+                       (setq alist (cdr alist)))
+                     (setq eol (point-marker))
+                     (goto-char marker)
+                     (while (< (point) eol) ; a few odd cases
+                       (unless (looking-at (concat "[" (regexp-quote "(")
+                                                   (regexp-quote "*") ",]"))
+                         (just-one-space))
+                       (forward-sexp)))
+                   (delete-horizontal-space)
+                   (if (string= "terminal" (widget-get widget :doc))
+                       (gnuplot-gui-set-options-and-insert)) ))
   (widget-insert "   ")
   (widget-create 'push-button :value "Reset"
-                :help-echo "Push this button to reset all values"
-                :button-face 'gnuplot-gui-button-face
-                :doc item
-                :notify
-                (lambda (widget &rest ignore)
-                  (let ((word (widget-get widget :doc)))
-                    (gnuplot-gui-set-alist word gnuplot-gui-current-string)
-                    (gnuplot-gui-prompt-for-frame word t))))
+                 :help-echo "Push this button to reset all values"
+                 :button-face 'gnuplot-gui-button-face
+                 :doc item
+                 :notify
+                 (lambda (widget &rest ignore)
+                   (let ((word (widget-get widget :doc)))
+                     (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                     (gnuplot-gui-prompt-for-frame word t))))
   (widget-insert "   ")
   (widget-create 'push-button :value "Clear"
-                :help-echo "Push this button to clear all values"
-                :button-face 'gnuplot-gui-button-face
-                :doc item
-                :notify
-                (lambda (widget &rest ignore)
-                  (let* ((word (widget-get widget :doc))
-                         (alist (cdr (assoc word gnuplot-gui-all-types))))
-                    (while alist
-                      (setcdr (assoc (gnuplot-gui-type-tag (car alist))
-                                     gnuplot-gui-alist)
-                              (gnuplot-gui-type-default (car alist)))
-                      (setq alist (cdr alist)))
-                    (gnuplot-gui-prompt-for-frame word t))) )
+                 :help-echo "Push this button to clear all values"
+                 :button-face 'gnuplot-gui-button-face
+                 :doc item
+                 :notify
+                 (lambda (widget &rest ignore)
+                   (let* ((word (widget-get widget :doc))
+                          (alist (cdr (assoc word gnuplot-gui-all-types))))
+                     (while alist
+                       (setcdr (assoc (gnuplot-gui-type-tag (car alist))
+                                      gnuplot-gui-alist)
+                               (gnuplot-gui-type-default (car alist)))
+                       (setq alist (cdr alist)))
+                     (gnuplot-gui-prompt-for-frame word t))) )
   (widget-insert "   ")
   (widget-create 'push-button :value "Cancel"
-                :help-echo "Quit setting options and dismiss frame"
-                :button-face 'gnuplot-gui-button-face
-                :notify (lambda (widget &rest ignore)
-                          (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
-                          (setq gnuplot-gui-alist nil
-                                gnuplot-gui-current-string nil)
-                          (delete-frame)
-                          (select-frame gnuplot-current-frame)))
+                 :help-echo "Quit setting options and dismiss frame"
+                 :button-face 'gnuplot-gui-button-face
+                 :notify (lambda (widget &rest ignore)
+                           (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                           (setq gnuplot-gui-alist nil
+                                 gnuplot-gui-current-string nil)
+                           (delete-frame)
+                           (select-frame gnuplot-current-frame)))
   (goto-char (point-min))
   (use-local-map widget-keymap)
   (widget-setup))
@@ -1471,28 +1471,28 @@ SAVE-FRAME is non-nil when the widgets are being reset."
 ;;; widgets
 
 (defface gnuplot-gui-menu-face '((((class color) (background light))
-                                 (:bold t :foreground "darkolivegreen"))
-                                (((class color) (background dark))
-                                 (:bold t :foreground "seagreen"))
-                                (t
-                                 (:italic t)))
+                                  (:bold t :foreground "darkolivegreen"))
+                                 (((class color) (background dark))
+                                  (:bold t :foreground "seagreen"))
+                                 (t
+                                  (:italic t)))
   "Face used for menu-buttons."
   :group 'gnuplot-faces)
 (defface gnuplot-gui-button-face '((((class color) (background light))
-                                 (:bold t :foreground "sienna"))
-                                (((class color) (background dark))
-                                 (:bold t :foreground "tan"))
-                                (t
-                                 (:italic t)))
+                                    (:bold t :foreground "sienna"))
+                                   (((class color) (background dark))
+                                    (:bold t :foreground "tan"))
+                                   (t
+                                    (:italic t)))
   "Face used for push-buttons.
 Only used in Emacs.  XEmacs displays push-buttons with a pixmap."
   :group 'gnuplot-faces)
 (defface gnuplot-gui-labels-face '((((class color) (background light))
-                                   (:bold t :foreground "darkslateblue"))
-                                  (((class color) (background dark))
-                                   (:bold t :foreground "lightslateblue"))
-                                  (t
-                                   (:italic t)))
+                                    (:bold t :foreground "darkslateblue"))
+                                   (((class color) (background dark))
+                                    (:bold t :foreground "lightslateblue"))
+                                   (t
+                                    (:italic t)))
   "Face used for insert and delete button in the labels widget."
   :group 'gnuplot-faces)
 
@@ -1502,25 +1502,25 @@ ITEM is the object whose arguments are set by this 
widget, DEFAULT
 is the default argument value, LIST contains the items for the pop-up
 menu.  STARRED is true if this a 'list* widget."
   (let ((widget
-        (apply 'widget-create
-               'menu-choice :value default :tag item :doc starred
-               :button-face 'gnuplot-gui-menu-face
-               :button-prefix "[" :button-suffix "]"
-               :help-echo (format "Mouse-2 to view the %S menu" (downcase 
item))
-               :notify
-               (lambda (widget &rest ignore)
-                 (let ((lab (if (widget-get widget :doc)
-                                (concat (downcase (widget-get widget :tag)) " 
")
-                              "" )))
-                   (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
-                           (if (string= (widget-value widget) " ") ""
-                             (format "%s%s" lab (widget-value widget))) )))
-               (mapcar (lambda (x) (list 'item :value x))
-                       list))))
+         (apply 'widget-create
+                'menu-choice :value default :tag item :doc starred
+                :button-face 'gnuplot-gui-menu-face
+                :button-prefix "[" :button-suffix "]"
+                :help-echo (format "Mouse-2 to view the %S menu" (downcase 
item))
+                :notify
+                (lambda (widget &rest ignore)
+                  (let ((lab (if (widget-get widget :doc)
+                                 (concat (downcase (widget-get widget :tag)) " 
")
+                               "" )))
+                    (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                            (if (string= (widget-value widget) " ") ""
+                              (format "%s%s" lab (widget-value widget))) )))
+                (mapcar (lambda (x) (list 'item :value x))
+                        list))))
     (widget-value-set widget default)
     (if (and starred (not (string-match "^\\s-*$" default)))
-       (setcdr (assoc item gnuplot-gui-alist)
-               (format "%s %s" (downcase item) default)))
+        (setcdr (assoc item gnuplot-gui-alist)
+                (format "%s %s" (downcase item) default)))
     widget))
 
 (defun gnuplot-gui-number (item default &optional prefix)
@@ -1531,20 +1531,20 @@ the numerical argument."
   (let ((help-label (or prefix (downcase item))))
     (widget-insert (capitalize item) ": ")
     (widget-create 'editable-field
-                  :size 2 :tag item :value default :doc prefix
-                  :help-echo (format "Insert new value of %S here" help-label)
-                  :notify (lambda (widget &rest ignore)
-                            (let ((val (widget-value widget))
-                                  (pre (concat (widget-get widget :doc) " ")))
-                              (setcdr (assoc (widget-get widget :tag)
-                                             gnuplot-gui-alist)
-                                      (if (string-match
-                                           "^\\s-*[-0-9.*]+\\s-*$" val)
-                                          (format "%s%s" pre val) "") )))))
+                   :size 2 :tag item :value default :doc prefix
+                   :help-echo (format "Insert new value of %S here" help-label)
+                   :notify (lambda (widget &rest ignore)
+                             (let ((val (widget-value widget))
+                                   (pre (concat (widget-get widget :doc) " ")))
+                               (setcdr (assoc (widget-get widget :tag)
+                                              gnuplot-gui-alist)
+                                       (if (string-match
+                                            "^\\s-*[-0-9.*]+\\s-*$" val)
+                                           (format "%s%s" pre val) "") )))))
   (unless (string-match "^\\s-*$" default)
     (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" prefix default)))
   (widget-insert " " (make-string (- 40 (current-column)) ?.)
-                " (numeric value)\n"))
+                 " (numeric value)\n"))
 
 (defun gnuplot-gui-string (item default &optional width_or_prefix starred)
   "Create a string widget for the Gnuplot GUI.
@@ -1554,37 +1554,37 @@ the text entry field (which defaults to half the frame 
width) or the
 prefix for the string.  STARRED is t if quotes are not to be used."
   (let ((help-label (downcase item)) width (prefix "") (pp ""))
     (cond ((stringp width_or_prefix)
-          (setq prefix width_or_prefix
-                pp prefix)
-          (if starred (setq prefix (concat prefix "_star"))) )
-         ((numberp width_or_prefix)
-          (setq width width_or_prefix)))
+           (setq prefix width_or_prefix
+                 pp prefix)
+           (if starred (setq prefix (concat prefix "_star"))) )
+          ((numberp width_or_prefix)
+           (setq width width_or_prefix)))
     (setq width (or width (/ (frame-width) 2)))
     (if (string-match "^['\"]" default)
-       (setq default (replace-match "" nil nil default)))
+        (setq default (replace-match "" nil nil default)))
     (if (string-match "['\"]$" default)
-       (setq default (replace-match "" nil nil default)))
+        (setq default (replace-match "" nil nil default)))
     (widget-insert (capitalize item) ": ")
     (widget-create
      'editable-field
      :size width :tag item :doc prefix :value default
      :help-echo (format "Insert new value of %S here" help-label)
      :notify (lambda (widget &rest ignore)
-              (let ((val (widget-value widget))
-                    (q gnuplot-quote-character)
-                    (p (widget-get widget :doc)) )
-                (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
-                        (if (string-match "^\\s-*$" val)
-                            ""
-                          (progn
-                            (if (string-match "_star$" p)
-                                (setq p (concat (substring p 0 -5) " ")
-                                      q ""))
-                            (if (string-match "^\\s-+" val)
-                                (setq val (replace-match "" nil nil val)))
-                            (if (string-match "\\s-+$" val)
-                                (setq val (replace-match "" nil nil val)))
-                            (format "%s%s%s%s" p q val q)))))))
+               (let ((val (widget-value widget))
+                     (q gnuplot-quote-character)
+                     (p (widget-get widget :doc)) )
+                 (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                         (if (string-match "^\\s-*$" val)
+                             ""
+                           (progn
+                             (if (string-match "_star$" p)
+                                 (setq p (concat (substring p 0 -5) " ")
+                                       q ""))
+                             (if (string-match "^\\s-+" val)
+                                 (setq val (replace-match "" nil nil val)))
+                             (if (string-match "\\s-+$" val)
+                                 (setq val (replace-match "" nil nil val)))
+                             (format "%s%s%s%s" p q val q)))))))
     (unless (string-match "^\\s-*$" default)
       (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" pp default)))
     (widget-insert "\n")))
@@ -1601,21 +1601,21 @@ prefix for the string."
       (setq default (replace-match "" nil nil default)))
   (widget-insert (capitalize item) ": ")
   (widget-create 'editable-field
-                :size (/ (frame-width) 3) :tag item :value default
-                :help-echo (format "Insert new format string here")
-                :notify (lambda (widget &rest ignore)
-                          (let ((val (widget-value widget)))
-                            (setcdr (assoc (widget-get widget :tag)
-                                           gnuplot-gui-alist)
-                                    (format "%s%s%s"
-                                            gnuplot-quote-character
-                                            val
-                                            gnuplot-quote-character)))))
+                 :size (/ (frame-width) 3) :tag item :value default
+                 :help-echo (format "Insert new format string here")
+                 :notify (lambda (widget &rest ignore)
+                           (let ((val (widget-value widget)))
+                             (setcdr (assoc (widget-get widget :tag)
+                                            gnuplot-gui-alist)
+                                     (format "%s%s%s"
+                                             gnuplot-quote-character
+                                             val
+                                             gnuplot-quote-character)))))
   (widget-insert "   ")
   (widget-create 'gnuplot-gui-info-link
-                :tag (concat "info on format")
-                :help-echo "Open a frame displaying the info entry for format"
-                :value "format")
+                 :tag (concat "info on format")
+                 :help-echo "Open a frame displaying the info entry for format"
+                 :value "format")
   (widget-insert "\n"))
 
 
@@ -1623,22 +1623,22 @@ prefix for the string."
 (defun gnuplot-gui-file-completion (widget)
   "Complete the filename in WIDGET."
   (let* ((str (buffer-substring-no-properties (widget-field-start widget)
-                                             (point)))
-        (file (or (file-name-nondirectory str) ""))
-        (dir  (or (file-name-directory str) "./"))
-        (val  (file-name-completion file dir)) )
+                                              (point)))
+         (file (or (file-name-nondirectory str) ""))
+         (dir  (or (file-name-directory str) "./"))
+         (val  (file-name-completion file dir)) )
     (cond ((eq val t)
-          (message "Exact match"))
-         ((null val)
-          (error "Can't find completion for \"%s\"" str))
-         ((not (string-equal str val))
-          (insert (substring val (length file))))
-         (t
-          (message "Making completion list...")
-          (let ((list (file-name-all-completions file dir)))
-            (with-output-to-temp-buffer "*Completions*"
-              (display-completion-list list)))
-          (message "Making completion list...done")))))
+           (message "Exact match"))
+          ((null val)
+           (error "Can't find completion for \"%s\"" str))
+          ((not (string-equal str val))
+           (insert (substring val (length file))))
+          (t
+           (message "Making completion list...")
+           (let ((list (file-name-all-completions file dir)))
+             (with-output-to-temp-buffer "*Completions*"
+               (display-completion-list list)))
+           (message "Making completion list...done")))))
 
 (defun gnuplot-gui-file (item default &optional tag)
   "Create a file widget for the Gnuplot GUI.
@@ -1651,30 +1651,30 @@ the default value for the argument.  TAG is non-nil if 
ITEM rather than
   (if (string-match "['\"]$" default)
       (setq default (replace-match "" nil nil default)))
   (let ((widg (widget-create
-              'file
-              :value default :tag tag
-              :size (- (/ (frame-width) 2) 3)
-              :doc item :help-echo "Insert a filename here"
-              :complete 'gnuplot-gui-file-completion
-              :notify
-              (lambda (widget &rest ignore)
-                (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
-                        (format "%s%s%s" gnuplot-quote-character
-                                (widget-value widget)
-                                gnuplot-quote-character)) )) ))
+               'file
+               :value default :tag tag
+               :size (- (/ (frame-width) 2) 3)
+               :doc item :help-echo "Insert a filename here"
+               :complete 'gnuplot-gui-file-completion
+               :notify
+               (lambda (widget &rest ignore)
+                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                         (format "%s%s%s" gnuplot-quote-character
+                                 (widget-value widget)
+                                 gnuplot-quote-character)) )) ))
     (widget-insert " ")
     (widget-create
      'push-button :value "Browse"
      :doc item :help-echo "Browse directories for a filename."
      :parent widg
      :notify (lambda (widget &rest ignore)
-              (let ((fname (file-relative-name (read-file-name "File: ")
-                                               default-directory))
-                    (q gnuplot-quote-character))
-                (widget-value-set (widget-get widget :parent) fname)
-                (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
-                        (format "%s%s%s" q fname q))
-                (widget-setup))))
+               (let ((fname (file-relative-name (read-file-name "File: ")
+                                                default-directory))
+                     (q gnuplot-quote-character))
+                 (widget-value-set (widget-get widget :parent) fname)
+                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                         (format "%s%s%s" q fname q))
+                 (widget-setup))))
     (widget-insert "\n")))
 
 (defun gnuplot-gui-labels (item default)
@@ -1684,19 +1684,19 @@ the default value for the argument."
   (widget-create
    '(editable-list
      (list :inline t :tag "Tic label"
-          (string :tag "label" :size 10
-                  :help-echo "Enter the tic label here" )
-          (string :tag "  position" :size 10
-                  :help-echo "Enter an expression for the tic location here" 
)))
-                :tag (capitalize item)
-                :value default
-                :format "%{%t%}:\n%v\t  %i\n"
-                :entry-format "\t  %i %d %v\n"
-                :button-face 'gnuplot-gui-labels-face
-                :notify (lambda (widget &rest ignore)
-                          (setcdr (assoc (upcase (widget-get widget :tag))
-                                         gnuplot-gui-alist)
-                                  (widget-value widget)))))
+           (string :tag "label" :size 10
+                   :help-echo "Enter the tic label here" )
+           (string :tag "  position" :size 10
+                   :help-echo "Enter an expression for the tic location here" 
)))
+   :tag (capitalize item)
+   :value default
+   :format "%{%t%}:\n%v\t  %i\n"
+   :entry-format "\t  %i %d %v\n"
+   :button-face 'gnuplot-gui-labels-face
+   :notify (lambda (widget &rest ignore)
+             (setcdr (assoc (upcase (widget-get widget :tag))
+                            gnuplot-gui-alist)
+                     (widget-value widget)))))
 
 (defun gnuplot-gui-range (item default separator is-range)
   "Create a range or pair widget for the Gnuplot GUI.
@@ -1707,25 +1707,25 @@ is non-nil if this is a 'range widget."
   (widget-insert (capitalize item) ": ")
   (if is-range (widget-insert "["))
   (widget-create 'editable-field
-                :size 4 :tag item :value (car default)
-                :help-echo (format "Insert the first value of the %S here"
-                                   (downcase item))
-                :notify (lambda (widget &rest ignore)
-                          (setcar (cdr (assoc (widget-get widget :tag)
-                                              gnuplot-gui-alist))
-                                  (format "%s" (widget-value widget)))))
+                 :size 4 :tag item :value (car default)
+                 :help-echo (format "Insert the first value of the %S here"
+                                    (downcase item))
+                 :notify (lambda (widget &rest ignore)
+                           (setcar (cdr (assoc (widget-get widget :tag)
+                                               gnuplot-gui-alist))
+                                   (format "%s" (widget-value widget)))))
   (if is-range (widget-insert separator) (widget-insert "  "))
   (widget-create 'editable-field
-                :size 4 :tag item :value (cdr default)
-                :help-echo (format "Insert the second value of the %S here"
-                                   (downcase item))
-                :notify (lambda (widget &rest ignore)
-                          (setcdr (cdr (assoc (widget-get widget :tag)
-                                              gnuplot-gui-alist))
-                                  (format "%s" (widget-value widget)))))
+                 :size 4 :tag item :value (cdr default)
+                 :help-echo (format "Insert the second value of the %S here"
+                                    (downcase item))
+                 :notify (lambda (widget &rest ignore)
+                           (setcdr (cdr (assoc (widget-get widget :tag)
+                                               gnuplot-gui-alist))
+                                   (format "%s" (widget-value widget)))))
   (if is-range (widget-insert "]"))
   (widget-insert " " (make-string (- 39 (current-column)) ?.)
-                " (numeric values)\n"))
+                 " (numeric values)\n"))
 
 
 ;; suppress compiler warning
@@ -1733,16 +1733,19 @@ is non-nil if this is a 'range widget."
 (define-widget 'gnuplot-gui-info-link 'info-link
   "A link to an info file for the Gnuplot GUI."
   :action '(lambda (widget &optional event)
-            (let ((gnuplot-info-display 'frame))
-              (if gnuplot-keywords-pending             ; <HW>
-                  (gnuplot-setup-info-look))
-              (gnuplot-info-lookup-symbol (widget-value widget)
-                                          'gnuplot-mode))))
+             (let ((gnuplot-info-display 'frame))
+               (if gnuplot-keywords-pending            ; <HW>
+                   (gnuplot-setup-info-look))
+               (gnuplot-info-lookup-symbol (widget-value widget)
+                                           'gnuplot-mode))))
 
 
 ;;; just about done
 
 (provide 'gnuplot-gui)
-;;;============================================================================
-;;;
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
 ;;; gnuplot-gui.el ends here
diff --git a/gnuplot-test-context.el b/gnuplot-test-context.el
index 9fa2a05..1b41c30 100644
--- a/gnuplot-test-context.el
+++ b/gnuplot-test-context.el
@@ -34,15 +34,15 @@
    (lambda (token)
      (case (gnuplot-token-type token)
        (number
-       (string-to-number (gnuplot-token-id token)))
+        (string-to-number (gnuplot-token-id token)))
 
        (string
-       (gnuplot-token-id token))
+        (gnuplot-token-id token))
 
        (end-of-command 'end-of-command)
 
        (otherwise
-       (intern (gnuplot-token-id token)))))
+        (intern (gnuplot-token-id token)))))
    tokens))
 
 ;; compile a single pattern to usable form
@@ -64,34 +64,34 @@
 (defmacro with-gensyms (symbols &rest forms)
   (declare (indent 1))
   `(let ,(mapcar
-         (lambda (sym)
-           `(,sym (make-symbol ,(symbol-name sym))))
-         symbols)
+          (lambda (sym)
+            `(,sym (make-symbol ,(symbol-name sym))))
+          symbols)
      ,@forms))
 
 ;; test-defining macro
 (defmacro should-match (rule &rest pairs)
   (declare (indent 1))
   (with-gensyms (tokens result rest)
-    `(let ((rule ,(if (symbolp rule)
-                     `(quote ,rule)
-                   (gnuplot-compile-pattern-1 rule))))
-       ,@(mapcar
-         (lambda (pair)
-           (if (stringp pair)
-               (setq pair (list pair)))
-
-           (let ((string (car pair))
-                 (rest (cadr pair)))
-             (if (eq rest :none)               ; Shouldn't match anything
-                 `(should
-                   (null
-                    (gnuplot-match-string ,string rule)))
-               `(should (equal
-                         (gnuplot-simplify-tokens
-                          (car (gnuplot-match-string ,string rule)))
-                         ,rest)))))
-         pairs))))
+                `(let ((rule ,(if (symbolp rule)
+                                  `(quote ,rule)
+                                (gnuplot-compile-pattern-1 rule))))
+                   ,@(mapcar
+                      (lambda (pair)
+                        (if (stringp pair)
+                            (setq pair (list pair)))
+
+                        (let ((string (car pair))
+                              (rest (cadr pair)))
+                          (if (eq rest :none)          ; Shouldn't match 
anything
+                              `(should
+                                (null
+                                 (gnuplot-match-string ,string rule)))
+                            `(should (equal
+                                      (gnuplot-simplify-tokens
+                                       (car (gnuplot-match-string ,string 
rule)))
+                                      ,rest)))))
+                      pairs))))
 
 
 ;;; The tests
@@ -99,236 +99,236 @@
 ;; Number
 (ert-deftest gnuplot-number ()
   (should-match [number]
-    ("123")
-    (".05")
-    ("1e7")))
+                ("123")
+                (".05")
+                ("1e7")))
 
 ;; name
 (ert-deftest gnuplot-name ()
   (should-match [name]
-    ("foo")
-    ("name_with_underscores")
-    ("var123")))
+                ("foo")
+                ("name_with_underscores")
+                ("var123")))
 
 ;; string-constant
 
 ;; Note that the id of a string constant token includes the delimiters
 (ert-deftest gnuplot-string-constant ()
   (should-match [string]
-    ("\"double quoted string\"")
-    ("'single quoted'")))
+                ("\"double quoted string\"")
+                ("'single quoted'")))
 
 ;; sequence
 (ert-deftest gnuplot-sequence ()
   (should-match [number name]
-    ("1.34 name garbage" '(garbage))
-    ("2.718 xy")
-    ("1e9 123 2.718281828459045" :none)))
+                ("1.34 name garbage" '(garbage))
+                ("2.718 xy")
+                ("1e9 123 2.718281828459045" :none)))
 
 ;; either
 (ert-deftest gnuplot-either ()
   (should-match
-      (either number name)
-    ("1359, 349" '(\, 349))
-    ("a_name . something" '(\. something))
-    ("'quoted string constant' name" :none)))
+   (either number name)
+   ("1359, 349" '(\, 349))
+   ("a_name . something" '(\. something))
+   ("'quoted string constant' name" :none)))
 
 ;; many
 (ert-deftest gnuplot-many ()
   (should-match (many number)
-    ("123 456 789")
-    ("not a number" '(not a number))
-    (".89 3.1415 foo" '(foo)))
+                ("123 456 789")
+                ("not a number" '(not a number))
+                (".89 3.1415 foo" '(foo)))
   (should-match (many name)
-    ("foo bar baz")
-    ("tom dick harry 1.34" '(1.34))))
+                ("foo bar baz")
+                ("tom dick harry 1.34" '(1.34))))
 
 ;; maybe
 (ert-deftest gnuplot-maybe ()
   (should-match (maybe name)
-    ("foo bar baz" '(bar baz))
-    ("1.23" '(1.23))
-    ("'string' quux" '("'string'" quux))))
+                ("foo bar baz" '(bar baz))
+                ("1.23" '(1.23))
+                ("'string' quux" '("'string'" quux))))
 
 ;; delimited list
 (ert-deftest gnuplot-delimited-list ()
   (should-match (delimited-list number ":")
-    ("1:2:3")
-    ("1e2:2.78")
-    ("9")
-    ("17:xy" '(: xy))
-    ("nan" :none))
+                ("1:2:3")
+                ("1e2:2.78")
+                ("9")
+                ("17:xy" '(: xy))
+                ("nan" :none))
   (should-match (delimited-list name ",")
-    ("foo,bar,baz")
-    ("x,y")
-    ("x"))
+                ("foo,bar,baz")
+                ("x,y")
+                ("x"))
   (should-match (delimited-list number "-")
-    ("1 - 2 - 3, garbage" '(\, garbage))
-    ("x - 2 - 3" :none)
-    ("1 - 2 - y" '(- y))))
+                ("1 - 2 - 3, garbage" '(\, garbage))
+                ("x - 2 - 3" :none)
+                ("1 - 2 - y" '(- y))))
 
 ;; keyword
 (ert-deftest gnuplot-keyword ()
   (should-match (either (kw ("w" . "ord"))
-                       (kw ("ot" . "her_word") "ow" "alt"))
-    ("word")
-    ("w")
-    ("wo")
-    ("wor")
-    ("word thing" '(thing))
-    ("o" :none)
-    ("ot")
-    ("oth")
-    ("othx" :none)
-    ("ow")
-    ("alt")))
+                        (kw ("ot" . "her_word") "ow" "alt"))
+                ("word")
+                ("w")
+                ("wo")
+                ("wor")
+                ("word thing" '(thing))
+                ("o" :none)
+                ("ot")
+                ("oth")
+                ("othx" :none)
+                ("ow")
+                ("alt")))
 
 ;; primary-expression
 (ert-deftest gnuplot-primary-expression ()
   (should-match primary-expression
-    ("name")
-    ("123")
-    ("{3,5}")
-    ("$23")
-    ("\"string\"")
-    ("5!! + 2" '(+ 2))
-    ("5 ** 9")
-    ("foo[3:5]")
-    ("(1,2,3)")
-    ("fun(3.14,x)")
-    ("3!!**2 ," '(\,))
-    ("," :none)
-    ("]" :none)))
+                ("name")
+                ("123")
+                ("{3,5}")
+                ("$23")
+                ("\"string\"")
+                ("5!! + 2" '(+ 2))
+                ("5 ** 9")
+                ("foo[3:5]")
+                ("(1,2,3)")
+                ("fun(3.14,x)")
+                ("3!!**2 ," '(\,))
+                ("," :none)
+                ("]" :none)))
 
 (ert-deftest gnuplot-function-call ()
   (should-match function-call
-    "abs(2)"
-    "sin(pi*2)"
-    "non_built_in(5+2)"
-    "sprintf('%s*', columnheader(1))"
-    "y(n)"))
+                "abs(2)"
+                "sin(pi*2)"
+                "non_built_in(5+2)"
+                "sprintf('%s*', columnheader(1))"
+                "y(n)"))
 
 ;; expression
 (ert-deftest gnuplot-infix-expression ()
   (should-match expression
-    ("-2")
-    ("!~foo ^ bar , " '(\,))
-    ("1+2%7 >= 9")
-    ("f && g ? 1 + 2 : 5**2")
-    ("t ? y(n) : n")
-    ("f ? g ? 1 : 2 : 3 + x")
-    ("f ? fun(1, 3+5 ** 7) : g > h ? pi:e : garbage"
-     '(: garbage))))
+                ("-2")
+                ("!~foo ^ bar , " '(\,))
+                ("1+2%7 >= 9")
+                ("f && g ? 1 + 2 : 5**2")
+                ("t ? y(n) : n")
+                ("f ? g ? 1 : 2 : 3 + x")
+                ("f ? fun(1, 3+5 ** 7) : g > h ? pi:e : garbage"
+                 '(: garbage))))
 
 ;; assignments
 (ert-deftest gnuplot-assignment ()
   (should-match lhs
-    ("x")
-    ("long_identifier")
-    ("1.9" :none)
-    ("x(y)")
-    ("fun(x_, y_) = " '(=))
-    ("no_thunks()" '(\( \))))
+                ("x")
+                ("long_identifier")
+                ("1.9" :none)
+                ("x(y)")
+                ("fun(x_, y_) = " '(=))
+                ("no_thunks()" '(\( \))))
   (should-match assignment
-    ("x=2")
-    ("x=y=3, garbage" '(\, garbage))
-    ("f(a) = y(x) = 5")))
+                ("x=2")
+                ("x=y=3, garbage" '(\, garbage))
+                ("f(a) = y(x) = 5")))
 
 ;; parenthesized exprs (including assignments)
 (ert-deftest gnuplot-parenthesized-expression ()
   (should-match parenthesized-expression
-    ("(sum = sum + $2, sum/2)")))
+                ("(sum = sum + $2, sum/2)")))
 
 ;; axis ranges
 (ert-deftest gnuplot-axis-range ()
   (should-match axis-range
-    ("[-pi:pi]")
-    ("[-1:1]")
-    ("[t = -10 :30]")
-    ("[ ]")
-    ("[-2:sin(5)*-8]")
-    ("[:200]")
-    ("[foo=:200]")
-    ("[-pi:]")
-    ("[bar=-pi:]")
-    ("[baz=1:100*2:3/2]")
-    ("[-pi:pi:0.2]")
-    ("[\"1/6/93 12:00\":\"5/6/93 12:00\"]")))
+                ("[-pi:pi]")
+                ("[-1:1]")
+                ("[t = -10 :30]")
+                ("[ ]")
+                ("[-2:sin(5)*-8]")
+                ("[:200]")
+                ("[foo=:200]")
+                ("[-pi:]")
+                ("[bar=-pi:]")
+                ("[baz=1:100*2:3/2]")
+                ("[-pi:pi:0.2]")
+                ("[\"1/6/93 12:00\":\"5/6/93 12:00\"]")))
 
 ;; iteration
 (ert-deftest gnuplot-iteration-spec ()
   (should-match iteration-spec
-    ("for [x = 1:9]")
-    ("for [y=-2*pi:2*pi:0.1]")
-    ("for [x = 1:9] for [y=-2*pi:2*pi:0.1]")
-    ("for[1:2:3]" :none)))
+                ("for [x = 1:9]")
+                ("for [y=-2*pi:2*pi:0.1]")
+                ("for [x = 1:9] for [y=-2*pi:2*pi:0.1]")
+                ("for[1:2:3]" :none)))
 
 ;; plot expression, ignoring assignments
 (ert-deftest gnuplot-plot-expression ()
   (should-match plot-expression
-    ("sin(x) + 2")
-    ("a=5, foo")
-    ("b=9 5+2")
-    ("i=3, j=sin(x)+9 k = 1**2!! f(x) garbage" '(garbage))))
+                ("sin(x) + 2")
+                ("a=5, foo")
+                ("b=9 5+2")
+                ("i=3, j=sin(x)+9 k = 1**2!! f(x) garbage" '(garbage))))
 
 ;; plot modifiers
 (ert-deftest gnuplot-plot-modifier ()
   (should-match plot-modifier
-    ("lines 5 + 2")
-    ("lw 9")
+                ("lines 5 + 2")
+                ("lw 9")
 
-    ("titl 'string'[2:3]")
-    ("notitle 'ignored'")
-    ("notitle with lines" '(with lines))
+                ("titl 'string'[2:3]")
+                ("notitle 'ignored'")
+                ("notitle with lines" '(with lines))
 
-    ("axes x1y2")
-    ("axes" :none)
-    ("axes 2 + 3" :none)))
+                ("axes x1y2")
+                ("axes" :none)
+                ("axes 2 + 3" :none)))
 
 (ert-deftest gnuplot-with-modifier ()
   (should-match with-modifier
-    ("with impulses")
-    ("w points")
-    ("with l")
-    ("w i")
-    ("with boxes")
-    ("w lines")
-    ("w errorbars")))
+                ("with impulses")
+                ("w points")
+                ("with l")
+                ("w i")
+                ("with boxes")
+                ("w lines")
+                ("w errorbars")))
 
 (ert-deftest gnuplot-filledcurves ()
   (should-match filledcurves-style-clause
-    ("filledcurves closed")
-    ("filledcurves x1")
-    ("filledcurves x2")
-    ("filledcurves y1=0")
-    ("filledcurves below y2=42")
-    ("filledcurves xy=10,20")))
+                ("filledcurves closed")
+                ("filledcurves x1")
+                ("filledcurves x2")
+                ("filledcurves y1=0")
+                ("filledcurves below y2=42")
+                ("filledcurves xy=10,20")))
 
 (ert-deftest gnuplot-plot-command ()
   (should-match plot-command
-    ("plot sin(x) with impulses")
-    ("plot x w points, x**2")
-    ("plot [ ] [-2:5] tan(x), 'data.1' with l")
-    ("plot 'leastsq.dat' w i")
-    ("plot 'exper.dat' w lines, 'exper.dat' notitle w errorbars")
-    ("plot sin(x) with linesp lt 1 pt 3, cos(x) with linesp lt 1 pt 4")
-    ("plot 'data' with points pointtype 3 pointsize 2")
-    ("plot 'data' using 1:2:4 with points pt 5 pointsize variable")
-    ("plot 'd1' t \"good\" w l lt 2 lw 3, 'd2' t \"bad\" w l lt 2 lw 1")
-    ("plot x*x with filledcurve closed, 40 with filledcurve y1=10")
-    ("plot x*x, (x>=-5 && x<=5 ? 40 : 1/0) with filledcurve y1=10 lt 8")))
+                ("plot sin(x) with impulses")
+                ("plot x w points, x**2")
+                ("plot [ ] [-2:5] tan(x), 'data.1' with l")
+                ("plot 'leastsq.dat' w i")
+                ("plot 'exper.dat' w lines, 'exper.dat' notitle w errorbars")
+                ("plot sin(x) with linesp lt 1 pt 3, cos(x) with linesp lt 1 
pt 4")
+                ("plot 'data' with points pointtype 3 pointsize 2")
+                ("plot 'data' using 1:2:4 with points pt 5 pointsize variable")
+                ("plot 'd1' t \"good\" w l lt 2 lw 3, 'd2' t \"bad\" w l lt 2 
lw 1")
+                ("plot x*x with filledcurve closed, 40 with filledcurve y1=10")
+                ("plot x*x, (x>=-5 && x<=5 ? 40 : 1/0) with filledcurve y1=10 
lt 8")))
 
 ;;; set cntrparam
 (ert-deftest gnuplot-cntrparam ()
   (should-match set-cntrparam-clause
-    ("cntrparam bspline")
-    ("cntrparam points 7")
-    ("cntrparam order 10")
-    ("cntrparam levels auto 5")
-    ("cntrparam levels discrete .1,1/exp(1),.9")
-    ("cntrparam levels incremental  0,1,4")
-    ("cntrparam levels 10")
-    ("cntrparam levels incremental 100,50")))
+                ("cntrparam bspline")
+                ("cntrparam points 7")
+                ("cntrparam order 10")
+                ("cntrparam levels auto 5")
+                ("cntrparam levels discrete .1,1/exp(1),.9")
+                ("cntrparam levels incremental  0,1,4")
+                ("cntrparam levels 10")
+                ("cntrparam levels incremental 100,50")))
 
 
 
@@ -360,37 +360,37 @@
 (defun gnuplot-test-parse-all-demos ()
   (interactive)
   (let* ((bufname "*gnuplot parse test results*")
-        (gnuplot-test-result-buffer
-         (progn
-           (and bufname (get-buffer bufname)
-                (kill-buffer bufname))
-           (get-buffer-create bufname)))
-        (gnuplot-test-count 0)
-        (gnuplot-test-success-count 0)
-        (demo-files (directory-files gnuplot-demo-dir t "^[^.].*\\.dem$"))
-        (n-files (length demo-files))
-        (n 0))
+         (gnuplot-test-result-buffer
+          (progn
+            (and bufname (get-buffer bufname)
+                 (kill-buffer bufname))
+            (get-buffer-create bufname)))
+         (gnuplot-test-count 0)
+         (gnuplot-test-success-count 0)
+         (demo-files (directory-files gnuplot-demo-dir t "^[^.].*\\.dem$"))
+         (n-files (length demo-files))
+         (n 0))
 
     (switch-to-buffer-other-window gnuplot-test-result-buffer)
 
     (catch 'done
       (dolist (fname demo-files)
 
-       (with-temp-buffer
-         (insert-file-contents fname)
-         (gnuplot-mode)
-         (message "Testing on file %s of %s: %s..."
-                  (incf n) n-files fname)
-         (condition-case err
-             (gnuplot-test-parse-buffer (current-buffer) fname)
-           (error
-            (with-current-buffer gnuplot-test-result-buffer
-              (insert (format "ERROR in %s: %s" fname err)))))
-         (message "Testing on file %s of %s: %s... done"
-                  n n-files fname)
-         (with-current-buffer gnuplot-test-result-buffer
-           (goto-char (point-max))
-           (recenter)
+        (with-temp-buffer
+          (insert-file-contents fname)
+          (gnuplot-mode)
+          (message "Testing on file %s of %s: %s..."
+                   (incf n) n-files fname)
+          (condition-case err
+              (gnuplot-test-parse-buffer (current-buffer) fname)
+            (error
+             (with-current-buffer gnuplot-test-result-buffer
+               (insert (format "ERROR in %s: %s" fname err)))))
+          (message "Testing on file %s of %s: %s... done"
+                   n n-files fname)
+          (with-current-buffer gnuplot-test-result-buffer
+            (goto-char (point-max))
+            (recenter)
             (redisplay t)))))
     (let ((success-rate
            (/ (+ gnuplot-test-success-count 0.0)
@@ -406,35 +406,35 @@
 (defun gnuplot-test-parse-buffer (&optional buffer fname)
   (interactive nil)
   (let ((buffer (or buffer (current-buffer)))
-       (fname (or fname (buffer-file-name))))
+        (fname (or fname (buffer-file-name))))
     (with-current-buffer buffer
       (goto-char (point-min))
       (while (not (eobp))
-       (let ((ln (line-number-at-pos))
-             (tokens (progn
-                       (gnuplot-end-of-command)
-                       (gnuplot-tokenize))))
-         (when (> (length tokens) 1)
-           (let ((result
-                  (gnuplot-match-pattern
-                   gnuplot-compiled-grammar
-                   tokens nil)))
-             (incf gnuplot-test-count)
-             (if (equal result '(nil))
-                 (incf gnuplot-test-success-count)
-               (let ((cmd
-                      (buffer-substring
-                       (gnuplot-point-at-beginning-of-command)
-                       (gnuplot-point-at-end-of-command))))
-                 (with-current-buffer
-                     (get-buffer-create gnuplot-test-result-buffer)
-                   (insert
-                    (format "FAILED at %s:%s\n\t%s\n" fname ln cmd))
-                   (when (not (null result))
-                     (insert
-                      (format "\tUNMATCHED TOKENS were: %s\n"
-                              (gnuplot-simplify-tokens (car result)))))))))))
-       (gnuplot-beginning-of-defun -1)))))
+        (let ((ln (line-number-at-pos))
+              (tokens (progn
+                        (gnuplot-end-of-command)
+                        (gnuplot-tokenize))))
+          (when (> (length tokens) 1)
+            (let ((result
+                   (gnuplot-match-pattern
+                    gnuplot-compiled-grammar
+                    tokens nil)))
+              (incf gnuplot-test-count)
+              (if (equal result '(nil))
+                  (incf gnuplot-test-success-count)
+                (let ((cmd
+                       (buffer-substring
+                        (gnuplot-point-at-beginning-of-command)
+                        (gnuplot-point-at-end-of-command))))
+                  (with-current-buffer
+                      (get-buffer-create gnuplot-test-result-buffer)
+                    (insert
+                     (format "FAILED at %s:%s\n\t%s\n" fname ln cmd))
+                    (when (not (null result))
+                      (insert
+                       (format "\tUNMATCHED TOKENS were: %s\n"
+                               (gnuplot-simplify-tokens (car result)))))))))))
+        (gnuplot-beginning-of-defun -1)))))
 
 (when (boundp 'compilation-error-regexp-alist-alist)
   (add-to-list 'compilation-error-regexp-alist-alist
@@ -444,3 +444,9 @@
   (add-to-list 'compilation-error-regexp-alist 'gnuplot-test-errors))
 
 (provide 'gnuplot-test-context)
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
+;;; gnuplot-test-context.el ends here
diff --git a/gnuplot-tests.el b/gnuplot-tests.el
index 2333846..96fbde9 100644
--- a/gnuplot-tests.el
+++ b/gnuplot-tests.el
@@ -68,102 +68,102 @@ string-literal in multiple different contexts, as 
determined by
   `(ert-deftest ,name ()
      ,string
      ,@(loop for context in gnuplot-string-test-contexts
-                collect
-                `(should (gnuplot-test-string-in-context ,string ,context)))))
+             collect
+             `(should (gnuplot-test-string-in-context ,string ,context)))))
 
 
 ;;;; Tests for double-quoted strings
 (gnuplot-test-string gnuplot-double-quoted-string
-  "\"double-quoted string\"")
+                     "\"double-quoted string\"")
 
 (gnuplot-test-string gnuplot-double-quoted-with-single-quotes
-  "\"double-quoted 'with single quotes' embedded\"")
+                     "\"double-quoted 'with single quotes' embedded\"")
 
 (gnuplot-test-string gnuplot-double-quoted-with-single-quotes-2
-  "\"'single quotes inside double quotes'\"")
-  
+                     "\"'single quotes inside double quotes'\"")
+
 (gnuplot-test-string gnuplot-double-quoted-escapes
-  "\"double-quoted \\\\ string \\\" with embedded \\\" escapes\"")
+                     "\"double-quoted \\\\ string \\\" with embedded \\\" 
escapes\"")
 
 (gnuplot-test-string gnuplot-double-quoted-escapes-2
-  "\"escaped quote before closing quote \\\"\"")
+                     "\"escaped quote before closing quote \\\"\"")
 
 (gnuplot-test-string gnuplot-double-quoted-escapes-3
-  "\"escaped backslash before closing quote \\\\\"")
+                     "\"escaped backslash before closing quote \\\\\"")
 
 (gnuplot-test-string gnuplot-double-quoted-escapes-4
-  "\"\\\" escaped quote after opening quote\"")
+                     "\"\\\" escaped quote after opening quote\"")
 
 (gnuplot-test-string gnuplot-double-quoted-escapes-5
-  "\"\\\\ escaped backslash after opening quote\"")
+                     "\"\\\\ escaped backslash after opening quote\"")
 
 (gnuplot-test-string gnuplot-double-quoted-escapes-6
-  "\"\\\\\\\" escaped backslashes + escaped quotes (1) \\\\\\\"\"")
+                     "\"\\\\\\\" escaped backslashes + escaped quotes (1) 
\\\\\\\"\"")
 
 (gnuplot-test-string gnuplot-double-quoted-empty
-  "\"\"")
+                     "\"\"")
 
 (gnuplot-test-string gnuplot-double-quoted-string-containing-escaped-quotes
-  "\"\\\"\\\"\"")
+                     "\"\\\"\\\"\"")
 
 (gnuplot-test-string gnuplot-newline-terminated-double-quoted-string
-  "\"newline-terminated
+                     "\"newline-terminated
 ")
-  
+
 (gnuplot-test-string gnuplot-double-quoted-with-embedded-newlines
-  "\"string \\
+                     "\"string \\
  with embedded \\
 newlines\"")
 
 (gnuplot-test-string 
gnuplot-newline-terminated-double-quoted-string-with-newline
-  ;; with newlines
-  "\"newline-terminated string \\
+                     ;; with newlines
+                     "\"newline-terminated string \\
  with newlines
 ")
 
 
 ;;;; Tests for single-quoted strings
 (gnuplot-test-string gnuplot-single-quoted-strings
-  "'single-quoted string'")
+                     "'single-quoted string'")
 
 (gnuplot-test-string gnuplot-single-quoted-empty
-  "''")
+                     "''")
 
 (gnuplot-test-string gnuplot-single-quoted-with-double-quotes
-  "'a single-quoted string \"containing a double-quoted string\"'")
+                     "'a single-quoted string \"containing a double-quoted 
string\"'")
 
 (gnuplot-test-string gnuplot-single-quoted-quotes
-  "'embedded '' quote '' characters'")
+                     "'embedded '' quote '' characters'")
 
 (gnuplot-test-string gnuplot-single-quoted-quotes-2
-  "'embedded '' quote '' characters'''")
+                     "'embedded '' quote '' characters'''")
 
 (gnuplot-test-string gnuplot-single-quoted-quotes-3
-  "' '''")
+                     "' '''")
 
 (gnuplot-test-string gnuplot-single-quoted-backslashes
-  "'embedded \\ backslashes \\'")
+                     "'embedded \\ backslashes \\'")
 
 (gnuplot-test-string gnuplot-single-quoted-backslashes-2
-  "'multiple \\ embedded \\\\ backslashes \\\\\\'")
+                     "'multiple \\ embedded \\\\ backslashes \\\\\\'")
 
 (gnuplot-test-string gnuplot-single-quoted-trailing-backslash
-  "'trailing backslash\\'")
+                     "'trailing backslash\\'")
 
 (gnuplot-test-string gnuplot-single-quoted-newline-terminated
-  "'newline terminated\n")
+                     "'newline terminated\n")
 
 (gnuplot-test-string gnuplot-single-quoted-newline-terminated-quotes
-  "'embedded '' escapes \\ ending at newline ''\n")
+                     "'embedded '' escapes \\ ending at newline ''\n")
 
 (gnuplot-test-string gnuplot-single-quoted-embedded-newlines
-  "'string \\\n with embedded \\\nnewlines'")
+                     "'string \\\n with embedded \\\nnewlines'")
 
 (gnuplot-test-string gnuplot-single-quoted-embedded-newlines-backslashes
-  "'string \\\\\n with \\\\\\\n multiple \\\\\\\\\n backslashes'")
+                     "'string \\\\\n with \\\\\\\n multiple \\\\\\\\\n 
backslashes'")
 
 (gnuplot-test-string gnuplot-single-quoted-newline-terminated-embedded-newline
-  "'newline-terminated string \\\n with newlines\n")
+                     "'newline-terminated string \\\n with newlines\n")
 
 
 ;;;; Comment syntax
@@ -204,11 +204,11 @@ comment
           (syntax-propertize (point-max)))
         (goto-char (1+ start))
         (flet ((in-comment-p (position)
-                    (nth 4 (syntax-ppss position))))
+                             (nth 4 (syntax-ppss position))))
           (and
            (not (in-comment-p start))
            (loop for position from (1+ start) upto end
-                    always (in-comment-p position))
+                 always (in-comment-p position))
            (or (= end (point-max))
                (not (in-comment-p (1+ end))))))))))
 
@@ -222,32 +222,38 @@ string-literal in multiple different contexts, as 
determined by
   `(ert-deftest ,name ()
      ,comment
      ,@(loop for context in gnuplot-comment-test-contexts
-                collect
-                `(should (gnuplot-test-comment-in-context ,comment 
,context)))))
+             collect
+             `(should (gnuplot-test-comment-in-context ,comment ,context)))))
 
 (gnuplot-test-comment gnuplot-comment-simple
-  "# a simple one-line comment")
+                      "# a simple one-line comment")
 
 (gnuplot-test-comment gnuplot-comment-multiline
-  "# a comment\
+                      "# a comment\
 continued \
 over multiple lines")
 
 (gnuplot-test-comment gnuplot-comment-with-hashes
-  "# a comment # with more # hash # characters #")
+                      "# a comment # with more # hash # characters #")
 
 (gnuplot-test-comment gnuplot-comment-multiline-with-hashes
-  "# a comment \
+                      "# a comment \
 # continued # over \
 mutliple # lines #")
 
 (gnuplot-test-comment gnuplot-comment-with-single-quotes
-  "# a comment 'containing a single-quoted string'")
+                      "# a comment 'containing a single-quoted string'")
 
 (gnuplot-test-comment gnuplot-comment-with-single-quotes
-  "# a comment \"containing a double-quoted string\"")
+                      "# a comment \"containing a double-quoted string\"")
 
 (gnuplot-test-comment gnuplot-comment-multiline-with-quotes
-  "# a continued \
+                      "# a continued \
 'comment' \
 \"containing strings\"")
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
+;;; gnuplot-tests.el ends here
diff --git a/gnuplot.el b/gnuplot.el
index 00e7e62..7ca7638 100644
--- a/gnuplot.el
+++ b/gnuplot.el
@@ -46,7 +46,7 @@
 ;; This version of gnuplot-mode has been tested mostly on GNU Emacs 23
 ;; and 24, but should also work with older GNU Emacs versions back to
 ;; Emacs 21, and XEmacs 21.
-;; 
+;;
 ;; This mode offers several tools to help you compose your scripts,
 ;; including font-lock syntax colorization, a syntax table appropriate
 ;; to gnuplot, key bindings, pull-down menus, indentation, keyword
@@ -110,7 +110,7 @@
 ;; gnuplot-context.el (written by Jonathan, j.j.oddie@gmail.com)
 ;;   Context-sensitive completion, help lookup and eldoc
 ;;   strings for gnuplot buffers. Should be byte-compiled before
-;;   using. 
+;;   using.
 ;;
 ;; ---------------------------------------------------------------------
 ;;
@@ -300,7 +300,7 @@
 ;;  0.6.1 Sep 13 2011 <BR> Moved to github, updated contact info
 ;;  0.7.0 Oct 20 2012 <jjo> Contextual completion & help, inline plots,
 ;;        some other stuff
- 
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Acknowledgements:
 ;;    David Batty       <DB> (numerous corrections)
@@ -382,10 +382,10 @@ real work."
     (defalias 'gnuplot-window-full-height-p 'window-full-height-p)
   ;; The below is taken from window.el in GNU Emacs
   (defun gnuplot-window-full-height-p (&optional window)
-      (unless window
-       (setq window (selected-window)))
-      (= (window-height window)
-        (window-height (frame-root-window (window-frame window))))))
+    (unless window
+      (setq window (selected-window)))
+    (= (window-height window)
+       (window-height (frame-root-window (window-frame window))))))
 
 ;; Workaround obsolete `process-kill-without-query'
 (if (fboundp 'set-process-query-on-exit-flag)
@@ -396,13 +396,13 @@ real work."
 (if (fboundp 'syntax-ppss)
     (defalias 'gnuplot-syntax-ppss 'syntax-ppss)
   (defun gnuplot-syntax-ppss (&optional pos)
-      (save-excursion
-       (unless pos (setq pos (point)))
-       (let ((begin
-              (save-excursion
-                (goto-char pos)
-                (gnuplot-point-at-beginning-of-continuation))))
-         (parse-partial-sexp begin pos)))))
+    (save-excursion
+      (unless pos (setq pos (point)))
+      (let ((begin
+             (save-excursion
+               (goto-char pos)
+               (gnuplot-point-at-beginning-of-continuation))))
+        (parse-partial-sexp begin pos)))))
 
 
 ;;;;
@@ -423,7 +423,7 @@ real work."
   :group 'local
   :link '(emacs-library-link :tag "Lisp File" "gnuplot.el")
   :link '(url-link :tag "Homepage"
-                  "https://github.com/emacsorphanage/gnuplot/";)
+                   "https://github.com/emacsorphanage/gnuplot/";)
   :link '(custom-manual "(gnuplot)Top")
   :link '(emacs-commentary-link :tag "Commentary" "gnuplot.el") )
 (defgroup gnuplot-insertions nil
@@ -558,8 +558,8 @@ The values are
    nil       `gnuplot-process' is in the current frame but not displayed"
   :group 'gnuplot
   :type '(radio (const :tag "Separate frame"  frame)
-               (const :tag "Separate window" window)
-               (const :tag "Not displayed"   nil)))
+                (const :tag "Separate window" window)
+                (const :tag "Not displayed"   nil)))
 (defcustom gnuplot-info-display 'window
   "*Determines how `gnuplot-info-lookup-symbol' displays the info file.
 The values are
@@ -568,8 +568,8 @@ The values are
    nil       display info file in the current window"
   :group 'gnuplot
   :type '(radio (const :tag "Separate frame"  frame)
-               (const :tag "Separate window" window)
-               (const :tag "This window"     nil)))
+                (const :tag "Separate window" window)
+                (const :tag "This window"     nil)))
 
 (defcustom gnuplot-echo-command-line-flag (not gnuplot-ntemacs-p)
   "*This sets the fall-back value of `comint-process-echos'.
@@ -612,8 +612,8 @@ filename insertion function never insert quotes for you, 
set this
 to the empty string."
   :group 'gnuplot
   :type '(radio (const :tag "double quote"  "\"")
-               (const :tag "single quote"  "\'")
-               (const :tag "none"          ""  )))
+                (const :tag "single quote"  "\'")
+                (const :tag "none"          ""  )))
 (defcustom gnuplot-basic-offset 4
   "Number of columns to indent lines inside a do- or if-else-block.
 
@@ -653,7 +653,7 @@ time that data is needed."
   :group 'gnuplot
   :type
   '(radio (const :tag "Parse info file when gnuplot-mode starts"    
immediately)
-         (const :tag "Parse info file the first time it is needed" deferred)))
+          (const :tag "Parse info file the first time it is needed" deferred)))
 
 (defun gnuplot-set-context-sensitive-completion (_variable value)
   "Customize :set function for `gnuplot-use-context-sensitive-completion'."
@@ -664,7 +664,7 @@ time that data is needed."
          (if value 1 0))))))
 
 (defcustom gnuplot-use-context-sensitive-completion t
-  "Non-nil if `gnuplot-context-sensitive-mode' should be enabled by default. 
+  "Non-nil if `gnuplot-context-sensitive-mode' should be enabled by default.
 
 In context-sensitive mode, gnuplot-mode parses the current
 command line to provide smarter completion and documentation
@@ -681,7 +681,7 @@ ElDoc support requires `gnuplot-context-sensitive-mode' to 
be
 on."
   :group 'gnuplot
   :type 'boolean)
-  
+
 (defcustom gnuplot-tab-completion nil
   "Non-nil if TAB should perform completion in gnuplot-mode buffers.
 
@@ -755,9 +755,9 @@ non-nil."
 (defvar gnuplot-mode-map
   (let ((map (make-sparse-keymap))
         (completion-function
-           (if (fboundp 'completion-at-point)
-               'completion-at-point
-             'gnuplot-xemacs-completion-at-point)))
+         (if (fboundp 'completion-at-point)
+             'completion-at-point
+           'gnuplot-xemacs-completion-at-point)))
     (define-key map "\C-c\C-b"    'gnuplot-send-buffer-to-gnuplot)
     (define-key map "\C-c\C-c"    'comment-region) ; <RF>
     (define-key map "\C-c\C-o"    'gnuplot-gui-set-options-and-insert)
@@ -792,10 +792,10 @@ non-nil."
 
 (defvar gnuplot-display-options-menu
   (flet ((make-image-setter (type)
-           `[,(concat (upcase type) " images")
-              (lambda () (interactive) (gnuplot-set-image-format ,type))
-              :style toggle
-              :selected (eq gnuplot-image-format ,type)]))
+                            `[,(concat (upcase type) " images")
+                              (lambda () (interactive) 
(gnuplot-set-image-format ,type))
+                              :style toggle
+                              :selected (eq gnuplot-image-format ,type)]))
     `("Display plot output"
       ["Externally" gnuplot-external-display-mode
        :style toggle
@@ -917,23 +917,23 @@ create a `gnuplot-mode' buffer."
 (defcustom gnuplot-insertions-adornments ; this is icky...
   (if gnuplot-three-eight-p
       '("adornments"
-       ["arrow"       (gnuplot-insert "set arrow ")          t]
-       ["bar"         (gnuplot-insert "set bar")             t]
-       ["border"      (gnuplot-insert "set border")          t]
-       ["boxwidth"    (gnuplot-insert "set boxwidth ")       t]
-       ["format"      (gnuplot-insert "set format ")         t]
-       ["grid"        (gnuplot-insert "set grid")            t]
-       ["key"         (gnuplot-insert "set key ")            t]
-       ["label"       (gnuplot-insert "set label ")          t]
-       ["pointsize"   (gnuplot-insert "set pointsize ")      t]
-       ["samples"     (gnuplot-insert "set samples ")        t]
-       ["size"        (gnuplot-insert "set size ")           t]
-       ["style"       (gnuplot-insert "set style ")          t]
-       ["tics"        (gnuplot-insert "set tics ")           t]
-       ["timefmt"     (gnuplot-insert "set timefmt ")        t]
-       ["timestamp"   (gnuplot-insert "set timestamp ")      t]
-       ["title"       (gnuplot-insert "set title ")          t]
-       ["zeroaxis"    (gnuplot-insert "set zeroaxis")        t] )
+        ["arrow"       (gnuplot-insert "set arrow ")         t]
+        ["bar"        (gnuplot-insert "set bar")             t]
+        ["border"      (gnuplot-insert "set border")         t]
+        ["boxwidth"    (gnuplot-insert "set boxwidth ")              t]
+        ["format"      (gnuplot-insert "set format ")        t]
+        ["grid"               (gnuplot-insert "set grid")            t]
+        ["key"        (gnuplot-insert "set key ")            t]
+        ["label"       (gnuplot-insert "set label ")         t]
+        ["pointsize"   (gnuplot-insert "set pointsize ")      t]
+        ["samples"     (gnuplot-insert "set samples ")       t]
+        ["size"        (gnuplot-insert "set size ")          t]
+        ["style"       (gnuplot-insert "set style ")          t]
+        ["tics"        (gnuplot-insert "set tics ")          t]
+        ["timefmt"     (gnuplot-insert "set timefmt ")        t]
+        ["timestamp"   (gnuplot-insert "set timestamp ")      t]
+        ["title"       (gnuplot-insert "set title ")         t]
+        ["zeroaxis"    (gnuplot-insert "set zeroaxis")        t] )
     '("adornments"
       ["data style"     (gnuplot-insert "set data style ")     t]
       ["function style" (gnuplot-insert "set function style ") t]
@@ -958,12 +958,12 @@ See the document string for `gnuplot-insertions-menu'
 Changing this will not effect a change in any currently existing
 `gnuplot-mode' buffer.  You will see the change the next time you
 create a `gnuplot-mode' buffer."
-       :group 'gnuplot-insertions
-       :type '(list (string :tag "Title")
-                    (repeat :inline t
-                            (vector (string   :tag "Name")
-                                    (function :tag "Callback")
-                                    (boolean  :tag "Enabled" t)))))
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 
@@ -988,10 +988,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-terminal
@@ -1019,10 +1019,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-x-axis
@@ -1042,10 +1042,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-x2-axis
@@ -1065,10 +1065,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-y-axis
@@ -1088,10 +1088,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 (defcustom gnuplot-insertions-y2-axis
   '("y2-axis"
@@ -1110,10 +1110,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 
@@ -1133,10 +1133,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-parametric-plots
@@ -1154,10 +1154,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-polar-plots
@@ -1172,10 +1172,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 (defcustom gnuplot-insertions-surface-plots
@@ -1195,10 +1195,10 @@ Changing this will not effect a change in any currently 
existing
 create a `gnuplot-mode' buffer."
   :group 'gnuplot-insertions
   :type '(list (string :tag "Title")
-              (repeat :inline t
-                      (vector (string   :tag "Name")
-                              (function :tag "Callback")
-                              (boolean  :tag "Enabled" t)))))
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
 
 
 
@@ -1208,12 +1208,12 @@ This part contains the toggle buttons for displaying 
info or
 opening an argument-setting popup.")
 (setq gnuplot-insertions-bottom
       '("---"
-       ["Display of info with insertion" gnuplot-toggle-info-display
-        :style toggle :selected gnuplot-insertions-show-help-flag]
-       ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
-        :active (fboundp 'gnuplot-gui-toggle-popup)
-        :style toggle :selected (and (fboundp 'gnuplot-gui-toggle-popup)
-                                     gnuplot-gui-popup-flag)] ))
+        ["Display of info with insertion" gnuplot-toggle-info-display
+         :style toggle :selected gnuplot-insertions-show-help-flag]
+        ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
+         :active (fboundp 'gnuplot-gui-toggle-popup)
+         :style toggle :selected (and (fboundp 'gnuplot-gui-toggle-popup)
+                                      gnuplot-gui-popup-flag)] ))
 
 
 ;; Regarding a comment by <DB>:
@@ -1241,33 +1241,33 @@ opening an argument-setting popup.")
   "Initial setup of gnuplot and insertions menus."
   (if gnuplot-insertions-menu-flag     ; set up insertions menu
       (progn
-       (if gnuplot-xemacs-p
-           (setq gnuplot-insertions-top
-                 '("insert set expression" "--:doubleLine"))
-         (setq gnuplot-insertions-top
-               '("insert set expression" "---")))
-       (setq gnuplot-insertions-menu
-             (append (list "Insertions")
-                     gnuplot-insertions-top
-                     (list gnuplot-insertions-adornments)
-                     (list gnuplot-insertions-plot-options)
-                     (list gnuplot-insertions-terminal)
-                     (list gnuplot-insertions-x-axis)
-                     (list gnuplot-insertions-y-axis)
-                     (list gnuplot-insertions-z-axis)
-                     (list gnuplot-insertions-x2-axis)
-                     (list gnuplot-insertions-y2-axis)
-                     (list gnuplot-insertions-parametric-plots)
-                     (list gnuplot-insertions-polar-plots)
-                     (list gnuplot-insertions-surface-plots)
-                     gnuplot-insertions-bottom))
-       (easy-menu-define gnuplot-mode-insertions-menu gnuplot-mode-map
-                         "Insertions menu used in Gnuplot-mode"
-                         gnuplot-insertions-menu)
-       (easy-menu-add gnuplot-mode-insertions-menu gnuplot-mode-map)))
+        (if gnuplot-xemacs-p
+            (setq gnuplot-insertions-top
+                  '("insert set expression" "--:doubleLine"))
+          (setq gnuplot-insertions-top
+                '("insert set expression" "---")))
+        (setq gnuplot-insertions-menu
+              (append (list "Insertions")
+                      gnuplot-insertions-top
+                      (list gnuplot-insertions-adornments)
+                      (list gnuplot-insertions-plot-options)
+                      (list gnuplot-insertions-terminal)
+                      (list gnuplot-insertions-x-axis)
+                      (list gnuplot-insertions-y-axis)
+                      (list gnuplot-insertions-z-axis)
+                      (list gnuplot-insertions-x2-axis)
+                      (list gnuplot-insertions-y2-axis)
+                      (list gnuplot-insertions-parametric-plots)
+                      (list gnuplot-insertions-polar-plots)
+                      (list gnuplot-insertions-surface-plots)
+                      gnuplot-insertions-bottom))
+        (easy-menu-define gnuplot-mode-insertions-menu gnuplot-mode-map
+          "Insertions menu used in Gnuplot-mode"
+          gnuplot-insertions-menu)
+        (easy-menu-add gnuplot-mode-insertions-menu gnuplot-mode-map)))
   (easy-menu-define                    ; set up gnuplot menu
-   gnuplot-mode-menu gnuplot-mode-map "Menu used in gnuplot-mode"
-   gnuplot-menu)
+    gnuplot-mode-menu gnuplot-mode-map "Menu used in gnuplot-mode"
+    gnuplot-menu)
   (easy-menu-add gnuplot-mode-menu gnuplot-mode-map) )
 
 ;; There is no `mark-active' variable in XEmacs.  Hassle!  This is not
@@ -1306,11 +1306,11 @@ the next time you use `gnuplot-mode' and emacs.
 This is only used if a toolbar can be displayed, thus this is used in
 XEmacs and ignored in FSF Emacs."
   :type '(choice (const default-toolbar)
-                (const top-toolbar)
-                (const bottom-toolbar)
-                (const left-toolbar)
-                (const right-toolbar)
-                (const :tag "No toolbar" nil))
+                 (const top-toolbar)
+                 (const bottom-toolbar)
+                 (const left-toolbar)
+                 (const right-toolbar)
+                 (const :tag "No toolbar" nil))
   :group 'gnuplot-toolbar)
 
 (defvar gnuplot-toolbar-location "")
@@ -1320,9 +1320,9 @@ XEmacs and ignored in FSF Emacs."
 TOOLBAR contains the toolbar specification.
 This is basically swiped from VM."
   (let ((width 46) (height 46)
-       (buffer (current-buffer))
-       (frame (selected-frame))
-       (tag-set '(win)))
+        (buffer (current-buffer))
+        (frame (selected-frame))
+        (tag-set '(win)))
     (cond
      ((eq (symbol-value gnuplot-toolbar-use-toolbar) right-toolbar)
       (setq gnuplot-toolbar-location       "right")
@@ -1395,7 +1395,7 @@ static char *line[] = {
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
-  "XPM format image used for the \"plot line\" button"))
+    "XPM format image used for the \"plot line\" button"))
 
 (defvar gnuplot-region-xpm
   (if (and (featurep 'xpm) (fboundp 'toolbar-make-button-list))
@@ -1451,7 +1451,7 @@ static char *region[] = {
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
-  "XPM format image used for the \"plot region\" button"))
+    "XPM format image used for the \"plot region\" button"))
 
 (defvar gnuplot-buffer-xpm
   (if (and (featurep 'xpm) (fboundp 'toolbar-make-button-list))
@@ -1507,7 +1507,7 @@ static char *buffer[] = {
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
-  "XPM format image used for the \"plot buffer\" button"))
+    "XPM format image used for the \"plot buffer\" button"))
 
 (defvar gnuplot-doc-xpm
   (if (and (featurep 'xpm) (fboundp 'toolbar-make-button-list))
@@ -1564,7 +1564,7 @@ static char *book_index[] = {
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
-  "XPM format image used for the \"document\" button"))
+    "XPM format image used for the \"document\" button"))
 
 (defvar gnuplot-help-xpm
   (if (and (featurep 'xpm) (fboundp 'toolbar-make-button-list))
@@ -1618,7 +1618,7 @@ static char *help_btn[] = {
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
 \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
-  "XPM format image used for the \"help\" button"))
+    "XPM format image used for the \"help\" button"))
 
 (defvar gnuplot-toolbar
   '([gnuplot-line-xpm
@@ -1649,11 +1649,11 @@ static char *help_btn[] = {
 (defun gnuplot-make-toolbar-function ()
   (if (and gnuplot-xemacs-p gnuplot-all-buttons-defined)
       (progn
-       ;;(remove-specifier gnuplot-toolbar-use-toolbar (current-buffer))
-       (gnuplot-toolbar-setup-toolbar gnuplot-toolbar)
-       (add-spec-to-specifier (symbol-value gnuplot-toolbar-use-toolbar)
-                              gnuplot-toolbar
-                              (current-buffer) ))))
+        ;;(remove-specifier gnuplot-toolbar-use-toolbar (current-buffer))
+        (gnuplot-toolbar-setup-toolbar gnuplot-toolbar)
+        (add-spec-to-specifier (symbol-value gnuplot-toolbar-use-toolbar)
+                               gnuplot-toolbar
+                               (current-buffer) ))))
 
 ;;(defalias 'gnuplot-make-toolbar 'gnuplot-make-toolbar-function)
 
@@ -1685,11 +1685,11 @@ static char *help_btn[] = {
     ;; `syntax-propertize', fall back to using the built-in parser and
     ;; making ", ', and # string or comment delimiters as normal.
     (if (not (boundp 'syntax-propertize-function))
-       (progn
-         (modify-syntax-entry ?\' "\"" table)
-         (modify-syntax-entry ?# "<" table)
-         (modify-syntax-entry ?\n ">" table)
-         (modify-syntax-entry ?\\ "\\" table))
+        (progn
+          (modify-syntax-entry ?\' "\"" table)
+          (modify-syntax-entry ?# "<" table)
+          (modify-syntax-entry ?\n ">" table)
+          (modify-syntax-entry ?\\ "\\" table))
 
       ;; When syntax-propertize is available, ", ', and # should be
       ;; punctuation so that the built-in parser doesn't interfere
@@ -1737,7 +1737,7 @@ These are highlighted using 
`font-lock-function-name-face'.")
   "List of GNUPLOT keywords associated with plotting, as strings.
 
 These are highlighted using `font-lock-type-face'.
-This list does not include plotting styles -- for that, see 
+This list does not include plotting styles -- for that, see
 `gnuplot-keywords-plotting-styles'")
 
 (defvar gnuplot-keywords-plotting-styles
@@ -1782,48 +1782,48 @@ These are highlighted using `font-lock-constant-face'.")
 
 (when (featurep 'font-lock)            ; <KL>
   (setq gnuplot-font-lock-keywords
-       (list
-        ;; stuff in brackets, sugg. by <LB>
-        '("\\[\\([^]]+\\)\\]" 1 font-lock-constant-face)
-
-        ;; variable/function definitions
-        
'("\\(\\(\\sw\\|\\s_\\)+\\s-*\\((\\s-*\\(\\sw\\|\\s_\\)*\\s-*\\(,\\s-*\\sw*\\)*\\s-*)\\)?\\s-*=\\)[^=]"
-          1 font-lock-variable-name-face)
-
-        ;; built-in function names
-        (cons (gnuplot-make-regexp gnuplot-keywords-builtin-functions)
-              font-lock-function-name-face)
-
-        ;; reserved words associated with plotting <AL>
-        (cons (gnuplot-make-regexp gnuplot-keywords-plotting)
-              font-lock-type-face)
-        (cons (gnuplot-make-regexp gnuplot-keywords-plotting-styles)
-              font-lock-function-name-face)
-
-        ;; (s)plot -- also thing (s)plotted
-        '("\\<s?plot\\>" . font-lock-keyword-face)
-        ;; '("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
-        ;;   1 font-lock-variable-name-face)
-
-        ;; other common commands
-        (cons (gnuplot-make-regexp gnuplot-keywords-misc)
-              font-lock-constant-face)
-        (cons "!.*$" font-lock-constant-face))) ; what is this for? jjo
-      
-  (setq gnuplot-font-lock-defaults 
-       '(gnuplot-font-lock-keywords
-         nil                           ; Use syntactic fontification
-         t                             ; Use case folding
-         nil                           ; No extra syntax
-         ;; calls `gnuplot-beginning-of-continuation'
-         ;; to find a safe place to begin syntactic highlighting
-         beginning-of-defun))
-  
+        (list
+         ;; stuff in brackets, sugg. by <LB>
+         '("\\[\\([^]]+\\)\\]" 1 font-lock-constant-face)
+
+         ;; variable/function definitions
+         
'("\\(\\(\\sw\\|\\s_\\)+\\s-*\\((\\s-*\\(\\sw\\|\\s_\\)*\\s-*\\(,\\s-*\\sw*\\)*\\s-*)\\)?\\s-*=\\)[^=]"
+           1 font-lock-variable-name-face)
+
+         ;; built-in function names
+         (cons (gnuplot-make-regexp gnuplot-keywords-builtin-functions)
+               font-lock-function-name-face)
+
+         ;; reserved words associated with plotting <AL>
+         (cons (gnuplot-make-regexp gnuplot-keywords-plotting)
+               font-lock-type-face)
+         (cons (gnuplot-make-regexp gnuplot-keywords-plotting-styles)
+               font-lock-function-name-face)
+
+         ;; (s)plot -- also thing (s)plotted
+         '("\\<s?plot\\>" . font-lock-keyword-face)
+         ;; '("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
+         ;;   1 font-lock-variable-name-face)
+
+         ;; other common commands
+         (cons (gnuplot-make-regexp gnuplot-keywords-misc)
+               font-lock-constant-face)
+         (cons "!.*$" font-lock-constant-face))) ; what is this for? jjo
+
+  (setq gnuplot-font-lock-defaults
+        '(gnuplot-font-lock-keywords
+          nil                          ; Use syntactic fontification
+          t                            ; Use case folding
+          nil                          ; No extra syntax
+          ;; calls `gnuplot-beginning-of-continuation'
+          ;; to find a safe place to begin syntactic highlighting
+          beginning-of-defun))
+
   ;; Set up font-lock for Xemacs
   ;; For GNU Emacs, this is done in `gnuplot-mode'
   (if gnuplot-xemacs-p
       (put 'gnuplot-mode 'font-lock-defaults
-          gnuplot-font-lock-defaults)))
+           gnuplot-font-lock-defaults)))
 
 ;; Some corner cases in Gnuplot's comment and string syntax are
 ;; difficult to handle accurately using Emacs's built-in syntax tables
@@ -1831,15 +1831,15 @@ These are highlighted using `font-lock-constant-face'.")
 ;;
 ;; - strings can continue over several lines, but only by using a
 ;;   backslash to escape the newline
-;; 
+;;
 ;; - double-quoted strings can contain escaped quotes, \", and escaped
 ;;   backslashes, \\; but in single-quoted strings the quote is
 ;;   escaped by doubling it, '', and backslash is only special at
 ;;   end-of-line
-;; 
+;;
 ;; - either type of string can end at newline without needing a
 ;; - closing delimiter
-;; 
+;;
 ;; - comments continue over continuation lines
 ;;
 ;; The following syntax-propertize rules should accurately mark string
@@ -1849,32 +1849,32 @@ These are highlighted using `font-lock-constant-face'.")
 ;; normal syntax-table parser, which is accurate enough for most
 ;; normal cases. (See the definition of `gnuplot-mode-syntax-table'.)
 (defalias 'gnuplot-syntax-propertize
-    (when (fboundp 'syntax-propertize-rules)
-      (syntax-propertize-rules
-       ;; Double quoted strings
-       ((rx
-         (group "\"")
-         (* (or (seq "\\" anything)
-                (not (any "\"" "\n"))))
-         (group (or "\"" "\n" buffer-end)))
-        (1 "|") (2 "|"))
-
-       ;; Single quoted strings
-       ((rx
-         (group "'")
-         (* (or (seq "\\" "\n")
-                "''"
-                (not (any "'" "\n"))))
-         (group (or "'" "\n" buffer-end)))
-        (1 "|") (2 "|"))
-
-       ;; Comments
-       ((rx
-         (group "#")
-         (* (or (seq "\\" "\n")
-                any))
-         (or (group "\n") buffer-end))
-        (1 "!") (2 "!")))))
+  (when (fboundp 'syntax-propertize-rules)
+    (syntax-propertize-rules
+     ;; Double quoted strings
+     ((rx
+       (group "\"")
+       (* (or (seq "\\" anything)
+              (not (any "\"" "\n"))))
+       (group (or "\"" "\n" buffer-end)))
+      (1 "|") (2 "|"))
+
+     ;; Single quoted strings
+     ((rx
+       (group "'")
+       (* (or (seq "\\" "\n")
+              "''"
+              (not (any "'" "\n"))))
+       (group (or "'" "\n" buffer-end)))
+      (1 "|") (2 "|"))
+
+     ;; Comments
+     ((rx
+       (group "#")
+       (* (or (seq "\\" "\n")
+              any))
+       (or (group "\n") buffer-end))
+      (1 "!") (2 "!")))))
 
 (defun gnuplot-syntax-propertize-extend-region (start end)
   "Expand the region to syntax-propertize for strings and comments.
@@ -1924,7 +1924,7 @@ This is a simple wrapper for `syntax-ppss'."
   (save-excursion
     (let ((parse-state (gnuplot-syntax-ppss where)))
       (or (nth 3 parse-state)
-         (nth 4 parse-state)))))
+          (nth 4 parse-state)))))
 
 ;; these two lines get rid of an annoying compile time error
 ;; message.  that function gets non-trivially defalias-ed in
@@ -1940,9 +1940,9 @@ This is a simple wrapper for `syntax-ppss'."
   (let ((list ()) (line "") (index 0))
     (while (< index (length string))
       (if (char-equal (elt string index) ?\n)
-         (setq list (append list (list line))
-               line "")
-       (setq line (concat line (char-to-string (elt string index)))))
+          (setq list (append list (list line))
+                line "")
+        (setq line (concat line (char-to-string (elt string index)))))
       (setq index (1+ index)) )
     list))
 
@@ -1965,13 +1965,13 @@ called by this function after all of STRING is sent to 
gnuplot."
   ;; Create a gnuplot frame if needed
   (if (equal gnuplot-display-process 'frame)
       (or (and gnuplot-process-frame
-              (frame-live-p gnuplot-process-frame))
-         (let ((frame (selected-frame)))
-           (setq gnuplot-process-frame (make-frame))
-           (select-frame gnuplot-process-frame)
-           (switch-to-buffer gnuplot-buffer)
-           (delete-other-windows)
-           (select-frame frame))))
+               (frame-live-p gnuplot-process-frame))
+          (let ((frame (selected-frame)))
+            (setq gnuplot-process-frame (make-frame))
+            (select-frame gnuplot-process-frame)
+            (switch-to-buffer gnuplot-buffer)
+            (delete-other-windows)
+            (select-frame frame))))
 
   (let ((list (gnuplot-split-string string)))
     (with-current-buffer (get-buffer gnuplot-buffer)
@@ -1980,18 +1980,18 @@ called by this function after all of STRING is sent to 
gnuplot."
       (set-marker (process-mark gnuplot-process) (point-marker))
       (sleep-for (* 20 gnuplot-delay))
       (while list
-       (insert (car list))
-       (comint-send-input)
-       (sleep-for gnuplot-delay)
-       (setq list (cdr list))
-       (goto-char (point-max))))
+        (insert (car list))
+        (comint-send-input)
+        (sleep-for gnuplot-delay)
+        (setq list (cdr list))
+        (goto-char (point-max))))
 
     (cond ((equal gnuplot-display-process 'window)
-          (gnuplot-display-and-recenter-gnuplot-buffer))
-         ((equal gnuplot-display-process 'frame)
-          ;;(raise-frame gnuplot-process-frame)
-          (with-selected-frame gnuplot-process-frame
-            (gnuplot-display-and-recenter-gnuplot-buffer))))
+           (gnuplot-display-and-recenter-gnuplot-buffer))
+          ((equal gnuplot-display-process 'frame)
+           ;;(raise-frame gnuplot-process-frame)
+           (with-selected-frame gnuplot-process-frame
+             (gnuplot-display-and-recenter-gnuplot-buffer))))
 
     (setq gnuplot-recently-sent text)
     (run-hooks 'gnuplot-after-plot-hook)))
@@ -2014,13 +2014,13 @@ useful for function in `gnuplot-after-plot-hook'."
   (interactive "r")
   (let (string (txt (or text 'region)))
     (cond ((equal major-mode 'gnuplot-mode)
-          (setq string (buffer-substring-no-properties begin end))
-          (if (string= (substring string -1) "\n") ()
-            (setq string (concat string "\n")))
-          (gnuplot-send-string-to-gnuplot string txt))
-         (t
-          (message (concat "You can only send regions from "
-                           "gnuplot-mode buffers to gnuplot."))))))
+           (setq string (buffer-substring-no-properties begin end))
+           (if (string= (substring string -1) "\n") ()
+             (setq string (concat string "\n")))
+           (gnuplot-send-string-to-gnuplot string txt))
+          (t
+           (message (concat "You can only send regions from "
+                            "gnuplot-mode buffers to gnuplot."))))))
 
 (defun gnuplot-send-line-to-gnuplot ()
   "Sends the current line to the gnuplot program.
@@ -2028,26 +2028,26 @@ Respects continuation lines.
 This sets `gnuplot-recently-sent' to 'line."
   (interactive)
   (cond ((equal major-mode 'gnuplot-mode)
-        (let (start end)
-          (save-excursion 
-            ;; go to start of continued command, or beginning of line
-            ;; if this is not a continuation of a previous line <JJO>
-            (gnuplot-beginning-of-continuation)
-            (setq start (point))
-            (end-of-line)
-            (while (save-excursion
-                     (backward-char)
-                     (looking-at "\\\\"))      ; go to end of last 
continuation line
-              (end-of-line 2))
-            (beginning-of-line 2)
-            (setq end (point)))
-          (if (not (string-match "\\`\\s-*\\'"
-                                 (buffer-substring-no-properties start end)))
-              (gnuplot-send-region-to-gnuplot start end 'line))
-          end))
-       (t
-        (message "You can only send lines in gnuplot-mode buffers to gnuplot.")
-        nil)))
+         (let (start end)
+           (save-excursion
+             ;; go to start of continued command, or beginning of line
+             ;; if this is not a continuation of a previous line <JJO>
+             (gnuplot-beginning-of-continuation)
+             (setq start (point))
+             (end-of-line)
+             (while (save-excursion
+                      (backward-char)
+                      (looking-at "\\\\"))     ; go to end of last 
continuation line
+               (end-of-line 2))
+             (beginning-of-line 2)
+             (setq end (point)))
+           (if (not (string-match "\\`\\s-*\\'"
+                                  (buffer-substring-no-properties start end)))
+               (gnuplot-send-region-to-gnuplot start end 'line))
+           end))
+        (t
+         (message "You can only send lines in gnuplot-mode buffers to 
gnuplot.")
+         nil)))
 
 ;; I chose a very easy to type but slightly non-mnemonic key-binding
 ;; for this (C-c C-v).  It seems like the kind of thing one would want
@@ -2079,8 +2079,8 @@ Blank lines and commented lines are not included in the 
NUM count."
   (while (> num 0)
     (and (not (eobp)) (forward-line 1))
     (while (and (not (eobp))
-               (or (looking-at "^\\s-*$")
-                   (looking-at "^\\s-*#")))
+                (or (looking-at "^\\s-*$")
+                    (looking-at "^\\s-*#")))
       (forward-line 1))
     (setq num (1- num))))
 
@@ -2114,14 +2114,14 @@ this by copying the script line by line."
     (let (string list (buffer (current-buffer)))
       (set-buffer gnuplot-comint-recent-buffer)
       (setq string (buffer-substring-no-properties (point-min) (point-max))
-           string (concat string "\n")
-           list   (gnuplot-split-string string))
+            string (concat string "\n")
+            list   (gnuplot-split-string string))
       (set-buffer buffer)
       (while list
-       (insert (car list))
-       (comint-send-input)
-       (sleep-for gnuplot-delay)
-       (setq list (cdr list)))
+        (insert (car list))
+        (comint-send-input)
+        (sleep-for gnuplot-delay)
+        (setq list (cdr list)))
       (comint-send-input))))
 
 (defun gnuplot-save-and-plot-from-comint ()
@@ -2136,8 +2136,8 @@ file visited by the script buffer."
       (message "Script buffer has been deleted.")
     (let (fname)
       (with-current-buffer gnuplot-comint-recent-buffer
-       (save-buffer)
-       (setq fname (buffer-file-name)))
+        (save-buffer)
+        (setq fname (buffer-file-name)))
       (goto-char (point-max))
       (insert (format "load '%s'" fname))
       (comint-send-input))))
@@ -2154,13 +2154,13 @@ This keeps that buffer from growing excessively in 
size.  Normally,
 this function is attached to `gnuplot-after-plot-hook'"
   (if (> gnuplot-buffer-max-size 0)
       (with-current-buffer gnuplot-buffer
-       (let ((nlines (count-lines (point-min) (point-max)))
-             (kill-whole-line t))
-         (while (> nlines gnuplot-buffer-max-size)
-           (goto-char (point-min))
-           (kill-line)
-           (setq nlines (1- nlines)))
-         (goto-char (point-max)) ))))
+        (let ((nlines (count-lines (point-min) (point-max)))
+              (kill-whole-line t))
+          (while (> nlines gnuplot-buffer-max-size)
+            (goto-char (point-min))
+            (kill-line)
+            (setq nlines (1- nlines)))
+          (goto-char (point-max)) ))))
 (add-hook 'gnuplot-after-plot-hook 'gnuplot-trim-gnuplot-buffer nil nil)
 
 
@@ -2221,16 +2221,16 @@ buffer."
 
   ;; XEmacs needs the call to make-local-hook
   (when (and (featurep 'xemacs)
-            (fboundp 'make-local-hook))
+             (fboundp 'make-local-hook))
     (make-local-hook 'kill-buffer-hook))
   (add-hook 'kill-buffer-hook 'gnuplot-close-down nil t)
 
   (add-hook 'comint-output-filter-functions
-           'comint-postoutput-scroll-to-bottom
-           nil t)
+            'comint-postoutput-scroll-to-bottom
+            nil t)
   (add-hook 'comint-output-filter-functions
-           'gnuplot-protect-prompt-fn
-           nil t)
+            'gnuplot-protect-prompt-fn
+            nil t)
 
   ;; Set up completion, using completion-at-point in recent Emacs,
   ;; comint-dynamic-complete in older Emacs
@@ -2241,8 +2241,8 @@ buffer."
 
   ;; Set up menu (see below)
   (easy-menu-define
-   gnuplot-comint-mode-menu gnuplot-comint-mode-map "Menu used in 
gnuplot-comint-mode"
-   gnuplot-comint-menu)
+    gnuplot-comint-mode-menu gnuplot-comint-mode-map "Menu used in 
gnuplot-comint-mode"
+    gnuplot-comint-menu)
   (easy-menu-add gnuplot-comint-mode-menu gnuplot-comint-mode-map))
 
 ;; Key bindings for gnuplot-comint-mode
@@ -2301,30 +2301,30 @@ If the version number cannot be determined by this 
method, it
 defaults to 3.7."
   (unless gnuplot-program-version
     (message "gnuplot-mode %s -- determining gnuplot version ......"
-            gnuplot-version)
+             gnuplot-version)
     (with-temp-buffer
       (insert "show version")
       (call-process-region (point-min) (point-max)
-                          gnuplot-program t (current-buffer))
+                           gnuplot-program t (current-buffer))
       (goto-char (point-min))
       (if (and (re-search-forward "[Vv]ersion\\s-+" (point-max) t)
-              (looking-at "\\([0-9]\\)\\.\\([0-9]+\\)"))
-         (progn
-           (setq gnuplot-program-version (match-string 0)
-                 gnuplot-program-major-version (string-to-number
-                                                (match-string 1))
-                 gnuplot-program-minor-version (string-to-number
-                                                (match-string 2))
-                 gnuplot-three-eight-p
-                 (>= (string-to-number gnuplot-program-version) 3.8)))
-
-       ;; Guess v3.7 if something went wrong
-       (message "Warning: could not determine gnuplot version, guessing 3.7")
-       (setq gnuplot-program-version "3.7"
-             gnuplot-program-major-version 3
-             gnuplot-program-minor-version 7
-             gnuplot-three-eight-p nil)))
-    
+               (looking-at "\\([0-9]\\)\\.\\([0-9]+\\)"))
+          (progn
+            (setq gnuplot-program-version (match-string 0)
+                  gnuplot-program-major-version (string-to-number
+                                                 (match-string 1))
+                  gnuplot-program-minor-version (string-to-number
+                                                 (match-string 2))
+                  gnuplot-three-eight-p
+                  (>= (string-to-number gnuplot-program-version) 3.8)))
+
+        ;; Guess v3.7 if something went wrong
+        (message "Warning: could not determine gnuplot version, guessing 3.7")
+        (setq gnuplot-program-version "3.7"
+              gnuplot-program-major-version 3
+              gnuplot-program-minor-version 7
+              gnuplot-three-eight-p nil)))
+
     ;; Setup stuff that depends on version number
     (gnuplot-setup-menu-and-toolbar)))
 
@@ -2334,13 +2334,13 @@ defaults to 3.7."
   ;; set up the toolbar (possibly dependent on version number)
   (if (and gnuplot-xemacs-p gnuplot-toolbar-display-flag)
       (condition-case ()               ; deal with the toolbar
-         (and (require 'toolbar)
-              (require 'xpm)
-              (gnuplot-make-toolbar-function))
-       (error nil)))
+          (and (require 'toolbar)
+               (require 'xpm)
+               (gnuplot-make-toolbar-function))
+        (error nil)))
   (message "gnuplot-mode %s (gnuplot %s) -- report bugs as issues at %s"
-          gnuplot-version gnuplot-program-version
-          gnuplot-maintainer-url))
+           gnuplot-version gnuplot-program-version
+           gnuplot-maintainer-url))
 
 (defvar gnuplot-prompt-regexp
   (regexp-opt '("gnuplot> " "multiplot> "))
@@ -2362,12 +2362,12 @@ STRING is the text as originally inserted in the comint 
buffer."
             (put-text-property b e 'intangible t)
             (put-text-property b e 'face 'gnuplot-prompt-face)
             ;;(put-text-property b e 'read-only t)
-           )) )))
+            )) )))
 
 (defun gnuplot-close-down ()
   "Tidy up when deleting the gnuplot buffer."
   (if (and gnuplot-process
-          (eq (process-status gnuplot-process) 'run)) ; <SE>
+           (eq (process-status gnuplot-process) 'run)) ; <SE>
       (kill-process gnuplot-process))
   (setq gnuplot-process nil
         gnuplot-buffer nil))
@@ -2384,13 +2384,13 @@ This is very similar to `comint-delchar-or-maybe-eof'."
   "Kill the gnuplot process and its display buffers."
   (interactive)
   (if (and gnuplot-process
-          (eq (process-status gnuplot-process) 'run))  ;; <SE>
+           (eq (process-status gnuplot-process) 'run))  ;; <SE>
       (kill-process gnuplot-process))
   (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
       (progn
-       (if (one-window-p) ()
-         (delete-window (get-buffer-window gnuplot-buffer)))
-       (kill-buffer gnuplot-buffer)))
+        (if (one-window-p) ()
+          (delete-window (get-buffer-window gnuplot-buffer)))
+        (kill-buffer gnuplot-buffer)))
   (setq gnuplot-process nil
         gnuplot-buffer nil))
 
@@ -2404,16 +2404,16 @@ gnuplot process buffer will be displayed in a window."
   (unless (and gnuplot-buffer (get-buffer gnuplot-buffer))
     (gnuplot-make-gnuplot-buffer))
   (cond ((equal gnuplot-display-process 'window)
-        (switch-to-buffer-other-window gnuplot-buffer))
-       ((equal gnuplot-display-process 'frame)
-        (or (and gnuplot-process-frame
-                 (frame-live-p gnuplot-process-frame))
-            (setq gnuplot-process-frame (make-frame)))
-        (raise-frame gnuplot-process-frame)
-        (select-frame gnuplot-process-frame)
-        (switch-to-buffer gnuplot-buffer))
-       (t
-        (switch-to-buffer gnuplot-buffer))))
+         (switch-to-buffer-other-window gnuplot-buffer))
+        ((equal gnuplot-display-process 'frame)
+         (or (and gnuplot-process-frame
+                  (frame-live-p gnuplot-process-frame))
+             (setq gnuplot-process-frame (make-frame)))
+         (raise-frame gnuplot-process-frame)
+         (select-frame gnuplot-process-frame)
+         (switch-to-buffer gnuplot-buffer))
+        (t
+         (switch-to-buffer gnuplot-buffer))))
 
 
 ;;; Support for displaying plotted images within Emacs
@@ -2493,12 +2493,12 @@ updates Gnuplot with the appropriate 'set output' 
command."
               (ecase gnuplot-inline-image-mode
                 (nil nil)
                 (inline
-                 (ignore-errors
-                   (let ((image (create-image filename)))
-                     (beginning-of-line)
-                     (insert-image image)
-                     (insert "\n")
-                     (gnuplot-inline-image-set-output))))
+                  (ignore-errors
+                    (let ((image (create-image filename)))
+                      (beginning-of-line)
+                      (insert-image image)
+                      (insert "\n")
+                      (gnuplot-inline-image-set-output))))
                 (dedicated
                  (with-current-buffer
                      (get-buffer-create gnuplot-image-buffer-name)
@@ -2511,12 +2511,12 @@ updates Gnuplot with the appropriate 'set output' 
command."
 
 ;;; Send commands to GNUPLOT silently & without generating an extra prompt
 (defvar gnuplot-hidden-output-buffer " *gnuplot output*")
-  
+
 (defun gnuplot-send-hiding-output (string)
   "Send STRING to the running Gnuplot process invisibly."
   (with-current-buffer gnuplot-buffer
     (add-hook 'comint-preoutput-filter-functions
-             'gnuplot-discard-output nil t))
+              'gnuplot-discard-output nil t))
   (with-current-buffer (get-buffer-create gnuplot-hidden-output-buffer)
     (erase-buffer))
   (comint-send-string (get-buffer-process gnuplot-buffer) string))
@@ -2530,8 +2530,8 @@ updates Gnuplot with the appropriate 'set output' 
command."
     (insert string)
     (when (looking-back gnuplot-prompt-regexp)
       (with-current-buffer gnuplot-buffer
-       (remove-hook 'comint-preoutput-filter-functions
-                    'gnuplot-discard-output t))))
+        (remove-hook 'comint-preoutput-filter-functions
+                     'gnuplot-discard-output t))))
   "")
 
 
@@ -2545,9 +2545,9 @@ Uses completion and the value of 
`gnuplot-quote-character'.
 Bound to \\[gnuplot-insert-filename]"
   (interactive)
   (insert gnuplot-quote-character
-         (file-relative-name (read-file-name "Filename > " "")
-                             default-directory)
-         gnuplot-quote-character) )
+          (file-relative-name (read-file-name "Filename > " "")
+                              default-directory)
+          gnuplot-quote-character) )
 
 
 ;; Adjust indentation for the line containing point
@@ -2558,18 +2558,18 @@ Add additional indentation for continuation lines."
   (interactive)
   (let (indent)
     (if (gnuplot-in-string (point-at-bol))
-       ;; Continued strings begin at left margin
-       (setq indent 0)
-      (save-excursion 
-       (if (gnuplot-continuation-line-p)
-           ;; This is a continuation line. Indent to the same level as
-           ;; the second word on the line beginning this command (i.e.,
-           ;; the first non-whitespace character after whitespace)
-           (progn
-             (gnuplot-beginning-of-continuation)
-             (back-to-indentation) 
-             (re-search-forward "\\S-+\\s-+" (point-at-eol) 'end-at-limit)
-             (setq indent (- (point) (point-at-bol))))
+        ;; Continued strings begin at left margin
+        (setq indent 0)
+      (save-excursion
+        (if (gnuplot-continuation-line-p)
+            ;; This is a continuation line. Indent to the same level as
+            ;; the second word on the line beginning this command (i.e.,
+            ;; the first non-whitespace character after whitespace)
+            (progn
+              (gnuplot-beginning-of-continuation)
+              (back-to-indentation)
+              (re-search-forward "\\S-+\\s-+" (point-at-eol) 'end-at-limit)
+              (setq indent (- (point) (point-at-bol))))
 
           ;; Not a continuation line; indent according to block
           ;; nesting depth
@@ -2586,7 +2586,7 @@ Add additional indentation for continuation lines."
                (setq indent 0)))))))
 
     ;; Set indentation
-    (save-excursion 
+    (save-excursion
       (indent-line-to indent))
 
     ;; Move point after indentation when at beginning of line
@@ -2612,10 +2612,10 @@ Add additional indentation for continuation lines."
   "Return t if the line containing point is a continuation of the previous 
line."
   (save-excursion
     (condition-case ()
-       (progn
-         (end-of-line 0)
-         (backward-char)
-         (looking-at "\\\\"))
+        (progn
+          (end-of-line 0)
+          (backward-char)
+          (looking-at "\\\\"))
       (error nil))))
 
 ;; Move point to start of continuation block
@@ -2636,9 +2636,9 @@ If there are no continuation lines, move point to 
end-of-line."
   (unless (bobp)
     (catch 'eob
       (while (save-excursion (backward-char)
-                            (looking-at "\\\\"))
-       (end-of-line 2)
-       (if (eobp) (throw 'eob nil))))))
+                             (looking-at "\\\\"))
+        (end-of-line 2)
+        (if (eobp) (throw 'eob nil))))))
 
 ;; Save-excursion wrappers for the above to return point at beginning
 ;; or end of continuation
@@ -2664,27 +2664,27 @@ If there are no continuation lines, returns 
point-at-eol."
 ;; movement purposes
 (defun gnuplot-beginning-of-defun (&optional arg)
   (if (not arg) (setq arg 1))
-  (if (> arg 0)                        
+  (if (> arg 0)
       (catch 'bob              ; go to beginning of ARGth prev. defun
-       (dotimes (n arg)
-         (when (= (point)
-                  (gnuplot-point-at-beginning-of-continuation))
-           (forward-line -1)
-           (if (bobp) (throw 'bob t))
-           (while (looking-at "^\\s-*$")
-             (forward-line -1)
-             (if (bobp) (throw 'bob t))))
-         (gnuplot-beginning-of-continuation))
-       t)
+        (dotimes (n arg)
+          (when (= (point)
+                   (gnuplot-point-at-beginning-of-continuation))
+            (forward-line -1)
+            (if (bobp) (throw 'bob t))
+            (while (looking-at "^\\s-*$")
+              (forward-line -1)
+              (if (bobp) (throw 'bob t))))
+          (gnuplot-beginning-of-continuation))
+        t)
 
     (catch 'eob                  ; find beginning of (-ARG)th following defun
       (dotimes (n (- arg))
-       (gnuplot-end-of-continuation)
-       (forward-line)
-       (if (eobp) (throw 'eob t))
-       (while (looking-at "^\\s-*$")
-         (forward-line)
-         (if (eobp) (throw 'eob t)))))))
+        (gnuplot-end-of-continuation)
+        (forward-line)
+        (if (eobp) (throw 'eob t))
+        (while (looking-at "^\\s-*$")
+          (forward-line)
+          (if (eobp) (throw 'eob t)))))))
 
 ;; Movement to start or end of command, including multiple commands
 ;; separated by semicolons
@@ -2692,9 +2692,9 @@ If there are no continuation lines, returns point-at-eol."
   "Move point to beginning of command containing point."
   (let ((limit (gnuplot-point-at-beginning-of-continuation)))
     (while
-       (and
-        (search-backward ";" limit 'lim)
-        (gnuplot-in-string-or-comment)))
+        (and
+         (search-backward ";" limit 'lim)
+         (gnuplot-in-string-or-comment)))
     (skip-chars-forward ";")
     (skip-syntax-forward "-")))
 
@@ -2702,9 +2702,9 @@ If there are no continuation lines, returns point-at-eol."
   "Move point to end of command containing point."
   (let ((limit (gnuplot-point-at-end-of-continuation)))
     (while
-       (and
-        (search-forward ";" limit 'lim)
-        (gnuplot-in-string-or-comment)))
+        (and
+         (search-forward ";" limit 'lim)
+         (gnuplot-in-string-or-comment)))
     (skip-chars-backward ";")
     (skip-syntax-backward "-")))
 
@@ -2724,29 +2724,29 @@ Negatable options are defined in 
`gnuplot-keywords-negatable-options'."
   (interactive)
   (gnuplot-fetch-version-number)
   (let ((begin (gnuplot-point-at-beginning-of-command))
-       (end   (gnuplot-point-at-end-of-command))
-       (regex gnuplot-negatable-options-regexp))
+        (end   (gnuplot-point-at-end-of-command))
+        (regex gnuplot-negatable-options-regexp))
     (save-excursion
       (goto-char begin)
       (skip-syntax-forward "-" end)
       (if (looking-at "\\(un\\)?set\\s-+")
-         (cond ((> (string-to-number gnuplot-program-version) 3.7)
-                (cond ((looking-at "unset")
-                       (delete-char 2))
-                      ((looking-at (concat "set\\s-+\\(" regex "\\)"))
-                       (insert "un"))
-                      (t
-                       (message "There is not a negatable set option on this 
line"))))
-               (t
-                (goto-char (match-end 0))
-                (if (> (point) end) (goto-char end))
-                (cond ((looking-at "no")
-                       (delete-char 2))
-                      ((looking-at regex)
-                       (insert "no"))
-                      (t
-                       (message "There is not a negatable set option on this 
line")))))
-       (message "There is not a set option on this line")) )))
+          (cond ((> (string-to-number gnuplot-program-version) 3.7)
+                 (cond ((looking-at "unset")
+                        (delete-char 2))
+                       ((looking-at (concat "set\\s-+\\(" regex "\\)"))
+                        (insert "un"))
+                       (t
+                        (message "There is not a negatable set option on this 
line"))))
+                (t
+                 (goto-char (match-end 0))
+                 (if (> (point) end) (goto-char end))
+                 (cond ((looking-at "no")
+                        (delete-char 2))
+                       ((looking-at regex)
+                        (insert "no"))
+                       (t
+                        (message "There is not a negatable set option on this 
line")))))
+        (message "There is not a set option on this line")) )))
 
 ;; (defun gnuplot-set-binding ()
 ;;   "Interactively select a key sequence for binding to a plot function.
@@ -2795,61 +2795,61 @@ See the comments in `gnuplot-info-hook'."
   (interactive)
   (setq gnuplot-keywords-pending nil)
   (if (featurep 'info-look)
-      (progn 
-       (gnuplot-fetch-version-number)
-
-       ;; In the absence of evidence to the contrary, I'm guessing
-       ;; the info file layout changed with gnuplot version 4 <jjo>
-        (let ((doc-spec
-              (if (>= (string-to-number gnuplot-program-version) 4.0)
-                  ;; New info-file layout - works with gnuplot 4.4
-                  '(("(gnuplot)Command_Index"   nil "[_a-zA-Z0-9]+")
-                    ("(gnuplot)Options_Index"   nil "[_a-zA-Z0-9]+")
-                    ("(gnuplot)Function_Index"  nil "[_a-zA-Z0-9]+")
-                    ("(gnuplot)Terminal_Index"  nil "[_a-zA-Z0-9]+"))
-
-                ;; Old info-file layout
-                '(("(gnuplot)Top"           nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)Commands"      nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)Functions"     nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)plot"          nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)set-show"      nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)data-file"     nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)smooth"        nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)style"         nil "[_a-zA-Z0-9]+")
-                  ("(gnuplot)terminal"      nil "[_a-zA-Z0-9]+")))))
-         (cond ((boundp 'info-lookup-symbol-alist) ; older info-lookup version
-                (setq info-lookup-symbol-alist
-                      (append
-                       info-lookup-symbol-alist
-                       `((gnuplot-mode
-                          "[a-zA-Z][_a-zA-Z0-9]*" nil
-                          ,doc-spec "[_a-zA-Z0-9]+" )))))
-               (t                      ; newer version
-                (info-lookup-add-help
-                 :mode 'gnuplot-mode :topic 'symbol
-                 :regexp "[a-zA-Z][_a-zA-Z0-9]*"
-                 :doc-spec doc-spec)
-                ;; allow help lookup from the comint buffer as well <jjo>
-                (info-lookup-add-help
-                 :mode 'gnuplot-comint-mode :topic 'symbol
-                 :regexp "[a-zA-Z][_a-zA-Z0-9]*"
-                 :doc-spec doc-spec))))
-
-       ;; this hook is my best way of working with info-look and
-       ;; allowing multiple versions of the gnuplot-info file.
-       ;; yes, this is a hassle.
-       (run-hooks 'gnuplot-info-hook)
-       (let ((there (bufferp (get-buffer "*info*"))))
-         (info-lookup-setup-mode 'symbol 'gnuplot-mode)
-         (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
-         ;; why are these buffers here?  I think that the general
-         ;; user will not want them lying around
-         (and (get-buffer "info dir")    (kill-buffer "info dir"))
-         (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
-       (setq gnuplot-keywords (gnuplot-set-keywords-list))
-       (setq gnuplot-keywords-alist    ; needed for all-completions
-             (mapcar 'list gnuplot-keywords)))
+      (progn
+        (gnuplot-fetch-version-number)
+
+        ;; In the absence of evidence to the contrary, I'm guessing
+        ;; the info file layout changed with gnuplot version 4 <jjo>
+        (let ((doc-spec
+               (if (>= (string-to-number gnuplot-program-version) 4.0)
+                   ;; New info-file layout - works with gnuplot 4.4
+                   '(("(gnuplot)Command_Index"   nil "[_a-zA-Z0-9]+")
+                     ("(gnuplot)Options_Index"   nil "[_a-zA-Z0-9]+")
+                     ("(gnuplot)Function_Index"  nil "[_a-zA-Z0-9]+")
+                     ("(gnuplot)Terminal_Index"  nil "[_a-zA-Z0-9]+"))
+
+                 ;; Old info-file layout
+                 '(("(gnuplot)Top"           nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)Commands"      nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)Functions"     nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)plot"          nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)set-show"      nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)data-file"     nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)smooth"        nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)style"         nil "[_a-zA-Z0-9]+")
+                   ("(gnuplot)terminal"      nil "[_a-zA-Z0-9]+")))))
+          (cond ((boundp 'info-lookup-symbol-alist) ; older info-lookup version
+                 (setq info-lookup-symbol-alist
+                       (append
+                        info-lookup-symbol-alist
+                        `((gnuplot-mode
+                           "[a-zA-Z][_a-zA-Z0-9]*" nil
+                           ,doc-spec "[_a-zA-Z0-9]+" )))))
+                (t                     ; newer version
+                 (info-lookup-add-help
+                  :mode 'gnuplot-mode :topic 'symbol
+                  :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+                  :doc-spec doc-spec)
+                 ;; allow help lookup from the comint buffer as well <jjo>
+                 (info-lookup-add-help
+                  :mode 'gnuplot-comint-mode :topic 'symbol
+                  :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+                  :doc-spec doc-spec))))
+
+        ;; this hook is my best way of working with info-look and
+        ;; allowing multiple versions of the gnuplot-info file.
+        ;; yes, this is a hassle.
+        (run-hooks 'gnuplot-info-hook)
+        (let ((there (bufferp (get-buffer "*info*"))))
+          (info-lookup-setup-mode 'symbol 'gnuplot-mode)
+          (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
+          ;; why are these buffers here?  I think that the general
+          ;; user will not want them lying around
+          (and (get-buffer "info dir")    (kill-buffer "info dir"))
+          (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
+        (setq gnuplot-keywords (gnuplot-set-keywords-list))
+        (setq gnuplot-keywords-alist   ; needed for all-completions
+              (mapcar 'list gnuplot-keywords)))
 
     ;; or do something sensible if info-look is not installed
     (defun info-lookup-interactive-arguments (symbol)
@@ -2862,14 +2862,14 @@ See the comments in `gnuplot-info-hook'."
   "Set `gnuplot-keywords' from `info-lookup-cache'.
 Return a list of keywords."
   (let* ((list (cdr (assoc 'symbol info-lookup-cache)))
-        (list (cdr (cdr (assoc 'gnuplot-mode list))))
-        (list (car list))
-        (store ()) item)
+         (list (cdr (cdr (assoc 'gnuplot-mode list))))
+         (list (car list))
+         (store ()) item)
     (while list
       (setq item (car (car list))
-           item (format "%s" item) ; keep this line for the sake of
-           store (append (list item) store) ; info-look.el w/o my patch
-           list  (cdr list)))
+            item (format "%s" item) ; keep this line for the sake of
+            store (append (list item) store) ; info-look.el w/o my patch
+            list  (cdr list)))
     (delete "nil" store)
     store ))
 
@@ -2969,7 +2969,7 @@ distribution. See gnuplot-context.el for details."
         (when gnuplot-tab-completion
           (set (make-local-variable 'tab-always-indent) 'complete))
 
-       (message "Gnuplot context-sensitive help & completion enabled."))
+        (message "Gnuplot context-sensitive help & completion enabled."))
 
     ;; Turn off
     (setq gnuplot-completion-at-point-function 
#'gnuplot-completion-at-point-info-look)
@@ -2983,21 +2983,21 @@ distribution. See gnuplot-context.el for details."
 
 Uses the cache of keywords generated by info-lookup. See
 `gnuplot-setup-info-look'. If not nil, the return value is in the form
-\(BEGIN END COMPLETIONS) where BEGIN and END are buffer 
+\(BEGIN END COMPLETIONS) where BEGIN and END are buffer
 positions and COMPLETIONS is a list."
- 
+
   (if gnuplot-keywords-pending         ; <HW>
       (gnuplot-setup-info-look))
   (let* ((end (point))
-        (beg (unwind-protect (save-excursion (backward-sexp 1) (point))))
-        (patt (buffer-substring beg end))
-        (pattern (if (string-match "\\([^ \t]*\\)\\s-+$" patt)
-                     (match-string 1 patt) patt))
-        (completions (all-completions pattern gnuplot-keywords-alist)))
+         (beg (unwind-protect (save-excursion (backward-sexp 1) (point))))
+         (patt (buffer-substring beg end))
+         (pattern (if (string-match "\\([^ \t]*\\)\\s-+$" patt)
+                      (match-string 1 patt) patt))
+         (completions (all-completions pattern gnuplot-keywords-alist)))
     (if completions
-       (list beg end completions)
+        (list beg end completions)
       (message "No gnuplot keywords complete '%s'" pattern)
-      nil))) 
+      nil)))
 
 (defun gnuplot-comint-complete ()
   "Complete the keyword preceding point in the gnuplot comint buffer.
@@ -3005,13 +3005,13 @@ positions and COMPLETIONS is a list."
 This is only used in Emacs versions before 24.1."
   (let ((completions (gnuplot-completion-at-point)))
     (if completions
-       (let* ((beg (nth 0 completions))
-              (end (nth 1 completions))
-              (candidates (nth 2 completions))
-              (completion-base-position (list beg end)))
-         (comint-dynamic-simple-complete
-          (buffer-substring-no-properties beg end)
-          candidates))
+        (let* ((beg (nth 0 completions))
+               (end (nth 1 completions))
+               (candidates (nth 2 completions))
+               (completion-base-position (list beg end)))
+          (comint-dynamic-simple-complete
+           (buffer-substring-no-properties beg end)
+           candidates))
       nil)))
 
 
@@ -3023,13 +3023,13 @@ Takes SYMBOL and MODE as arguments exactly as
 according to the value of `gnuplot-info-display'."
   (interactive
    (cond (gnuplot-keywords
-         (info-lookup-interactive-arguments 'symbol))
-        (gnuplot-keywords-pending      ; <HW>
-         (gnuplot-setup-info-look)
-         (info-lookup-interactive-arguments 'symbol))
-        (t
-         (list nil (message
-       "Help is not available.  The gnuplot info file could not be found.")))))
+          (info-lookup-interactive-arguments 'symbol))
+         (gnuplot-keywords-pending     ; <HW>
+          (gnuplot-setup-info-look)
+          (info-lookup-interactive-arguments 'symbol))
+         (t
+          (list nil (message
+                     "Help is not available.  The gnuplot info file could not 
be found.")))))
 
   (when (and (featurep 'info-look) gnuplot-keywords)
     (unless symbol (setq symbol "Commands"))
@@ -3049,7 +3049,7 @@ called."
   (case gnuplot-info-display
     (window
      (switch-to-buffer-other-window "*info*")
-     ;; Adjust window height only if the frame is split 
+     ;; Adjust window height only if the frame is split
      ;; horizontally, so as not to mess up the minibuffer <jjo>
      ;; we can't use shrink-window-if-larger-than-buffer here
      ;; because it doesn't work with Info mode's narrowing
@@ -3079,33 +3079,33 @@ help shown is for STRING unless STRING begins with the 
word \"set\" or
 shown."
   (interactive)
   (cond ((and (not gnuplot-three-eight-p)
-             (string-match "\\(emf\\|p\\(alette\\|m3d\\)\\|vgagl\\)" string))
-        (message "%S is an option introduced in gnuplot 3.8 (You are using %s)"
-                 string gnuplot-program-version) )
-       (t
-        (insert string)
-        (let ((topic string) term)
-          (if (string-match
-               "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
-               string)
-              (progn
-                (setq topic (downcase (match-string 2 string))
-                      term            (match-string 4 string))
-                (if (string= topic "terminal") (setq topic (downcase term)))))
-          (cond ((and (fboundp 'gnuplot-gui-set-options-and-insert)
-                      gnuplot-gui-popup-flag)
-                 (gnuplot-gui-set-options-and-insert))
-                (gnuplot-insertions-show-help-flag
-                 (if gnuplot-keywords-pending          ; <HW>
-                     (gnuplot-setup-info-look))
-                 (gnuplot-info-lookup-symbol topic)) ) )) ) )
+              (string-match "\\(emf\\|p\\(alette\\|m3d\\)\\|vgagl\\)" string))
+         (message "%S is an option introduced in gnuplot 3.8 (You are using 
%s)"
+                  string gnuplot-program-version) )
+        (t
+         (insert string)
+         (let ((topic string) term)
+           (if (string-match
+                "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
+                string)
+               (progn
+                 (setq topic (downcase (match-string 2 string))
+                       term            (match-string 4 string))
+                 (if (string= topic "terminal") (setq topic (downcase term)))))
+           (cond ((and (fboundp 'gnuplot-gui-set-options-and-insert)
+                       gnuplot-gui-popup-flag)
+                  (gnuplot-gui-set-options-and-insert))
+                 (gnuplot-insertions-show-help-flag
+                  (if gnuplot-keywords-pending         ; <HW>
+                      (gnuplot-setup-info-look))
+                  (gnuplot-info-lookup-symbol topic)) ) )) ) )
 
 (defun gnuplot-toggle-info-display ()
   (interactive)
   (setq gnuplot-insertions-show-help-flag (not 
gnuplot-insertions-show-help-flag))
   (message (if gnuplot-insertions-show-help-flag
-              "Help will be displayed after insertions."
-            "Help no longer displayed after insertions.")))
+               "Help will be displayed after insertions."
+             "Help no longer displayed after insertions.")))
 
 
 ;;; --- autoloaded functions: gnuplot-mode and gnuplot-make-buffer
@@ -3167,7 +3167,7 @@ a list:
   (kill-all-local-variables)
   (use-local-map gnuplot-mode-map)
   (setq major-mode 'gnuplot-mode
-       mode-name "Gnuplot")
+        mode-name "Gnuplot")
   (set (make-local-variable 'comment-start) "# ")
   (set (make-local-variable 'comment-end) "")
   (set (make-local-variable 'comment-column) 32)
@@ -3187,7 +3187,7 @@ a list:
 
   (if gnuplot-xemacs-p                 ; deal with font-lock
       (when (fboundp 'turn-on-font-lock)
-       (turn-on-font-lock))
+        (turn-on-font-lock))
     (progn
       ;; Add syntax-propertizing functions to search for strings and comments
       (set (make-local-variable 'syntax-propertize-function)
@@ -3195,17 +3195,17 @@ a list:
       (add-hook 'syntax-propertize-extend-region-functions
                 #'gnuplot-syntax-propertize-extend-region nil t)
 
-      ;; Set up font-lock 
+      ;; Set up font-lock
       (setq font-lock-defaults gnuplot-font-lock-defaults)
       (set (make-local-variable 'font-lock-multiline) t)
       (set (make-local-variable 'parse-sexp-lookup-properties) t)))
 
   (if (fboundp 'widget-create)         ; gnuplot-gui
       (condition-case ()
-         (require 'gnuplot-gui)
-       (error nil)))
+          (require 'gnuplot-gui)
+        (error nil)))
   (setq gnuplot-first-call nil         ; a few more details ...
-       gnuplot-comint-recent-buffer (current-buffer)
+        gnuplot-comint-recent-buffer (current-buffer)
         comint-process-echoes        gnuplot-echo-command-line-flag)
   (run-hooks 'gnuplot-mode-hook)
   ;; the first time we need to figure out which gnuplot we are running
@@ -3256,7 +3256,8 @@ following in your .emacs file:
 (provide 'gnuplot)
 (run-hooks 'gnuplot-load-hook)
 
-;;;============================================================================
-;;;
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
 
 ;;; gnuplot.el ends here



reply via email to

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