CSLMode.el revision d3ea4ab5527bc4bd7381d39ecbc4af2199f54341
25f72e2845c89a153ca9d3279d7feccbc912524ematthew;; Creating a new menu pane in the menu bar to the right of "Tools" menu
25f72e2845c89a153ca9d3279d7feccbc912524ematthew;; A keymap is suitable for menu use if it has an overall prompt string, which describes the purpose of the menu.
25f72e2845c89a153ca9d3279d7feccbc912524ematthew;; essentially: define-key map fake-key '(item command), where fake-key is of the form [menu-bar mymenu nl] and defines key nl in mymenu which must exist
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew(define-key-after
25f72e2845c89a153ca9d3279d7feccbc912524ematthew global-map
25f72e2845c89a153ca9d3279d7feccbc912524ematthew [menu-bar enclmenu]
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (cons "ENCL" (make-sparse-keymap "encl menu"))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew 'tools)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew;; extract all spec definitions
25f72e2845c89a153ca9d3279d7feccbc912524ematthew(defun extractspecs ()
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (interactive)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (save-excursion
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (let
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (p1 specs)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (goto-char (point-min))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (while (search-forward "spec" nil t)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (skip-chars-forward " ")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (setq p1 (point))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (forward-word)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (push (buffer-substring-no-properties p1 (point)) specs)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
a5b9f8fb834b1b2208e59a2fa76714bd91a5f147violette specs
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew;; extract all imports
25f72e2845c89a153ca9d3279d7feccbc912524ematthew(defun extractgets ()
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (interactive)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (save-excursion
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (let
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (p1
25f72e2845c89a153ca9d3279d7feccbc912524ematthew specs
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (goto-char (point-min))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (while (search-forward "get" nil t)
b01d258c572743c78c89899e0a49199bac91a7dfmatthew (skip-chars-forward " ")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (setq p1 (point))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (forward-word)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (push (buffer-substring-no-properties p1 (point)) specs)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew ;; comma separated lisp
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (skip-chars-forward " ")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (while (string= (buffer-substring-no-properties (point) (+ 1 (point))) ",")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (skip-chars-forward " ")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (setq p1 (+ 1 (point)))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (forward-word)
7edeca432448c9eb6a7618b130fccc3eb04459aemark (push (buffer-substring-no-properties p1 (point)) specs)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (skip-chars-forward " ")
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew specs
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew(defun refresh-specmenu ()
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (interactive)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (let
25f72e2845c89a153ca9d3279d7feccbc912524ematthew ((entries (sort (append (extractspecs) (extractgets)) 'string<))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew currentsym
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
25f72e2845c89a153ca9d3279d7feccbc912524ematthew ;; delete the match menu
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (global-unset-key [menu-bar enclmenu match])
25f72e2845c89a153ca9d3279d7feccbc912524ematthew ;; generate match menu
25f72e2845c89a153ca9d3279d7feccbc912524ematthew (define-key-after global-map [menu-bar enclmenu match] (cons "Match" (make-sparse-keymap)) 'kill-buffer)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew
a5b9f8fb834b1b2208e59a2fa76714bd91a5f147violette ;; generate subentries
8890d0c686adc8442c156956735470bf289ba2d8mark (dolist (item entries)
8890d0c686adc8442c156956735470bf289ba2d8mark (setq currentsym (gensym))
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match currentsym) (cons item (make-sparse-keymap)))
8890d0c686adc8442c156956735470bf289ba2d8mark ;; submenus
8890d0c686adc8442c156956735470bf289ba2d8mark (dolist (item2 entries)
8890d0c686adc8442c156956735470bf289ba2d8mark (setq currentsym2 (gensym))
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match currentsym currentsym2) (cons item2 (make-sparse-keymap)))
8890d0c686adc8442c156956735470bf289ba2d8mark (dolist (item3 '("Show match" "Export parameter"))
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match currentsym currentsym2 (gensym))
8890d0c686adc8442c156956735470bf289ba2d8mark (cons item3 `(lambda () (interactive) (run-csl ,item ,item2 ,item3))))
8890d0c686adc8442c156956735470bf289ba2d8mark )
8890d0c686adc8442c156956735470bf289ba2d8mark
8890d0c686adc8442c156956735470bf289ba2d8mark )
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match currentsym (gensym)) (cons "--" nil))
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match currentsym (gensym)) (cons "Select design spec" nil))
8890d0c686adc8442c156956735470bf289ba2d8mark
8890d0c686adc8442c156956735470bf289ba2d8mark )
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match (gensym)) (cons "--" nil))
8890d0c686adc8442c156956735470bf289ba2d8mark (define-key global-map (vector 'menu-bar 'enclmenu 'match (gensym)) (cons "Select pattern spec" nil))
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
25f72e2845c89a153ca9d3279d7feccbc912524ematthew )
28a3ff3fa0d3b5e1c774217425cf609cc6339df7matthew
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark(defun run-csl (spec1 spec2 trans)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (interactive)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark;; (message "selected %s and %s and %s" spec1 spec2 trans)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark;; example command
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark;; matchcad /tmp/flange.het -sMatch -pFlangePattern -dComponent
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark; (message (concatenate 'string "asd" (buffer-file-name (current-buffer))))
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark; (call-process "/bin/ls" nil (get-buffer-create "*Match-Result*") t "-lh" "/tmp/")
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (call-process "matchcad" nil (get-buffer-create "*Match-Result*") t
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark "-sMatch"
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark "-p" spec1
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark "-d" spec2
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (if (string= trans "Show match") "" "-t")
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (buffer-file-name (current-buffer)))
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (switch-to-buffer (get-buffer "*Match-Result*"))
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark )
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark(defun openspec (filename)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (interactive "FOpen proof script: ")
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark filename)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark(defun load-spec ()
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (interactive
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (list (call-interactively 'openspec)
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark ))
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark
51607ea01068c9047391e4c8b46bc9dbd0edb7fdmark (refresh-specmenu)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew)
25f72e2845c89a153ca9d3279d7feccbc912524ematthew