]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: Menus for factor, listener, doc and debug buffers.
authorJose A. Ortega Ruiz <jao@gnu.org>
Fri, 13 Aug 2010 02:25:57 +0000 (04:25 +0200)
committerJose A. Ortega Ruiz <jao@gnu.org>
Fri, 13 Aug 2010 02:25:57 +0000 (04:25 +0200)
misc/fuel/README
misc/fuel/factor-mode.el
misc/fuel/fuel-debug.el
misc/fuel/fuel-help.el
misc/fuel/fuel-listener.el
misc/fuel/fuel-menu.el [new file with mode: 0644]
misc/fuel/fuel-mode.el
misc/fuel/fuel-xref.el

index 6b0cf902af9c96b0a338ef1a8db9edfb5dbcb802..e952176f2c803ced711f2c8cd9af5066d20795cc 100644 (file)
@@ -89,7 +89,7 @@ beast.
 * Quick key reference
 
   Triple chords ending in a single letter <x> accept also C-<x> (e.g.
-  C-cC-eC-r is the same as C-cC-er).
+  C-c C-e C-r is the same as C-c C-e r).
 
 *** In factor source files:
 
@@ -126,9 +126,9 @@ beast.
     | C-c C-d p          | find words containing given substring (fuel-apropos)       |
     | C-c C-d v          | show words in current file (with prefix, ask for vocab)    |
     |--------------------+------------------------------------------------------------|
-    | C-c M-<, C-c C-d < | show callers of word or vocabulary at point                |
+    | C-c M-<            | show callers of word or vocabulary at point                |
     |                    | (fuel-show-callers, fuel-vocab-usage)                      |
-    | C-c M->, C-c C-d>  | show callees of word or vocabulary at point                |
+    | C-c M->            | show callees of word or vocabulary at point                |
     |                    | (fuel-show-callees, fuel-vocab-uses)                       |
     |--------------------+------------------------------------------------------------|
     | C-c C-x s          | extract innermost sexp (up to point) as a separate word    |
index c26abab997b55f2b3cc300bab3262737acf5898e..c461b5fe944efb14134e54a6d1e699ca9020a73e 100644 (file)
@@ -1,6 +1,6 @@
 ;;; factor-mode.el -- mode for editing Factor source
 
-;; Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2008, 2009, 2010 Jose Antonio Ortega Ruiz
 ;; See http://factorcode.org/license.txt for BSD license.
 
 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
@@ -271,7 +271,6 @@ With prefix, non-existing files will be created."
     (define-key map [?\]] 'factor-mode--insert-and-indent)
     (define-key map [?}] 'factor-mode--insert-and-indent)
     (define-key map "\C-m" 'newline-and-indent)
-    (define-key map "\C-co" 'factor-mode-visit-other-file)
     (define-key map "\C-c\C-o" 'factor-mode-visit-other-file)
     map))
 
index 611884e087e47da800bf030f9d77f65af97c6925..07da0d2d3c2101713c8cddf8f53e7f79c9bec058 100644 (file)
@@ -1,6 +1,6 @@
 ;;; fuel-debug.el -- debugging factor code
 
-;; Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2008, 2009, 2010 Jose Antonio Ortega Ruiz
 ;; See http://factorcode.org/license.txt for BSD license.
 
 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
@@ -17,6 +17,7 @@
 (require 'fuel-eval)
 (require 'fuel-popup)
 (require 'fuel-font-lock)
+(require 'fuel-menu)
 (require 'fuel-base)
 
 \f
@@ -314,11 +315,6 @@ the debugger."
 (defvar fuel-debug-mode-map
   (let ((map (make-keymap)))
     (suppress-keymap map)
-    (define-key map "g" 'fuel-debug-goto-error)
-    (define-key map "\C-c\C-c" 'fuel-debug-goto-error)
-    (define-key map "n" 'next-line)
-    (define-key map "p" 'previous-line)
-    (define-key map "u" 'fuel-debug-update-usings)
     (dotimes (n 9)
       (define-key map (vector (+ ?1 n))
         `(lambda () (interactive)
@@ -328,6 +324,12 @@ the debugger."
         `(lambda () (interactive) (fuel-debug-show--compiler-info ,(car ci)))))
     map))
 
+(fuel-menu--defmenu fuel-debug  fuel-debug-mode-map
+  ("Go to error" ("g" "\C-c\C-c") fuel-debug-goto-error)
+  ("Next line" "n" next-line)
+  ("Previous line" "p" previous-line)
+  ("Update USINGs" "u" fuel-debug-update-usings))
+
 (defun fuel-debug-mode ()
   "A major mode for displaying Factor's compilation results and
 invoking restarts as needed.
index 93aca94674689a9880235e58a282fa6de36fddce..5edcea651f2763655090a82802984310a678e2af 100644 (file)
@@ -22,6 +22,7 @@
 (require 'fuel-syntax)
 (require 'fuel-font-lock)
 (require 'fuel-popup)
+(require 'fuel-menu)
 (require 'fuel-base)
 
 (require 'button)
@@ -314,25 +315,31 @@ With prefix, the current page is deleted from history."
   (let ((map (make-sparse-keymap)))
     (suppress-keymap map)
     (set-keymap-parent map button-buffer-map)
-    (define-key map "a" 'fuel-apropos)
-    (define-key map "ba" 'fuel-help-bookmark-page)
-    (define-key map "bb" 'fuel-help-display-bookmarks)
-    (define-key map "bd" 'fuel-help-delete-bookmark)
-    (define-key map "c" 'fuel-help-clean-history)
-    (define-key map "e" 'fuel-help-edit)
-    (define-key map "h" 'fuel-help)
-    (define-key map "k" 'fuel-help-kill-page)
-    (define-key map "n" 'fuel-help-next)
-    (define-key map "l" 'fuel-help-previous)
-    (define-key map "p" 'fuel-help-previous)
-    (define-key map "r" 'fuel-help-refresh)
-    (define-key map "v" 'fuel-help-vocab)
-    (define-key map (kbd "SPC")  'scroll-up)
-    (define-key map (kbd "S-SPC") 'scroll-down)
-    (define-key map "\M-." 'fuel-edit-word-at-point)
-    (define-key map "\C-c\C-z" 'run-factor)
     map))
 
+(fuel-menu--defmenu fuel-help fuel-help-mode-map
+  ("Help on word..." "h" fuel-help)
+  ("Help on vocab..." "v" fuel-help-vocab)
+  ("Apropos..." "a" fuel-apropos)
+  --
+  ("Bookmark this page" "ba" fuel-help-bookmark-page)
+  ("Delete bookmark" "bd" fuel-help-delete-bookmark)
+  ("Show bookmarks..." "bb" fuel-help-display-bookmarks)
+  ("Clean browsing history" "c" fuel-help-clean-history)
+  --
+  ("Edit word at point" "\M-." fuel-edit-word-at-point)
+  ("Edit help file" "e" fuel-help-edit)
+  --
+  ("Next page" "n" fuel-help-next)
+  ("Previous page" ("p" "l") fuel-help-previous)
+  ("Refresh page" "r" fuel-help-refresh)
+  ("Kill page" "k" fuel-help-kill-page)
+  --
+  ("Scroll page up" ((kbd "SPC"))  scroll-up)
+  ("Scroll page down" ((kbd "S-SPC")) scroll-down)
+  --
+  ("Switch to listener" "\C-c\C-z" run-factor))
+
 \f
 ;;; IN: support
 
index de7cc16391672cf4e7b89602fb9dcd70264ccc83..d9c3a0d16f193794c7884cb281d4e93885943deb 100644 (file)
@@ -19,6 +19,7 @@
 (require 'fuel-eval)
 (require 'fuel-connection)
 (require 'fuel-syntax)
+(require 'fuel-menu)
 (require 'fuel-base)
 
 (require 'comint)
@@ -84,7 +85,7 @@ buffer."
         (comint-write-input-ring)
         (when (buffer-name (current-buffer))
           (insert "\nBye bye. It's been nice listening to you!\n")
-          (insert "Press C-cz to bring me back.\n" ))))))
+          (insert "Press C-c C-z to bring me back.\n" ))))))
 
 (defun fuel-listener--history-setup ()
   (set (make-local-variable 'comint-input-ring-file-name)
@@ -249,18 +250,24 @@ the vocabulary name."
   (fuel-listener--setup-completion)
   (fuel-listener--setup-stack-mode))
 
-(define-key fuel-listener-mode-map "\C-c\C-z" 'run-factor)
 (define-key fuel-listener-mode-map "\C-a" 'fuel-listener--bol)
-(define-key fuel-listener-mode-map "\C-c\C-a" 'fuel-autodoc-mode)
-(define-key fuel-listener-mode-map "\C-c\C-w" 'fuel-help)
-(define-key fuel-listener-mode-map "\C-c\C-r" 'fuel-refresh-all)
-(define-key fuel-listener-mode-map "\C-c\C-s" 'fuel-stack-mode)
-(define-key fuel-listener-mode-map "\C-c\C-p" 'fuel-apropos)
-(define-key fuel-listener-mode-map "\M-." 'fuel-edit-word-at-point)
-(define-key fuel-listener-mode-map "\C-c\C-v" 'fuel-edit-vocabulary)
-(define-key fuel-listener-mode-map "\C-c\C-k" 'fuel-run-file)
-(define-key fuel-listener-mode-map (kbd "TAB")
-  'fuel-completion--complete-symbol)
+
+(fuel-menu--defmenu listener fuel-listener-mode-map
+  ("Complete symbol" ((kbd "TAB") (kbd "M-TAB"))
+   fuel-completion--complete-symbol :enable (symbol-at-point))
+  ("Edit word definition" "\M-." fuel-edit-word-at-point
+   :enable (symbol-at-point))
+  ("Edit vocabulary" "\C-c\C-v" fuel-edit-vocabulary)
+  --
+  ("Word help" "\C-c\C-w" fuel-help)
+  ("Apropos" "\C-c\C-p" fuel-apropos)
+  (mode "Autodoc mode" "\C-c\C-a" fuel-autodoc-mode)
+  (mode "Show stack mode" "\C-c\C-s" fuel-stack-mode)
+  --
+  ("Run file" "\C-c\C-k" fuel-run-file)
+  ("Refresh vocabs" "\C-c\C-r" fuel-refresh-all))
+
+(define-key fuel-listener-mode-map [menu-bar completion] 'undefined)
 
 \f
 (provide 'fuel-listener)
diff --git a/misc/fuel/fuel-menu.el b/misc/fuel/fuel-menu.el
new file mode 100644 (file)
index 0000000..6abcd82
--- /dev/null
@@ -0,0 +1,102 @@
+;;; fuel-menu.el -- menu utilities
+
+;; Copyright (c) 2010 Jose Antonio Ortega Ruiz
+;; See http://factorcode.org/license.txt for BSD license.
+
+;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
+;; Keywords: languages, fuel, factor
+;; Start date: Sat Jun 12, 2010 03:01
+\f
+
+(require 'fuel-base)
+
+\f
+;;; Top-level menu
+
+(defmacro fuel-menu--add-item (keymap map kd)
+  (cond ((or (eq '-- kd) (eq 'line kd)) `(fuel-menu--add-line ,map))
+        ((stringp (car kd)) `(fuel-menu--add-basic-item ,keymap ,map ,kd))
+        ((eq 'menu (car kd)) `(fuel-menu--add-submenu ,(cadr kd)
+                                ,keymap ,map ,(cddr kd)))
+        ((eq 'custom (car kd)) `(fuel-menu--add-custom ,(nth 1 kd)
+                                                         ,(nth 2 kd)
+                                                         ,keymap
+                                                         ,map))
+        ((eq 'mode (car kd)) `(fuel-menu--mode-toggle ,(nth 1 kd)
+                                                        ,(nth 2 kd)
+                                                        ,(nth 3 kd)
+                                                        ,keymap
+                                                        ,map))
+        (t (error "Bad item form: %s" kd))))
+
+(defmacro fuel-menu--add-basic-item (keymap map kd)
+  (let* ((title (nth 0 kd))
+         (binding (nth 1 kd))
+         (cmd (nth 2 kd))
+         (hlp (nth 3 kd))
+         (item (make-symbol title))
+         (hlp (and (stringp hlp) (list :help hlp)))
+         (rest (or (and hlp (nthcdr 4 kd))
+                   (nthcdr 3 kd)))
+         (binding (if (listp binding)
+                      binding
+                    (list binding))))
+    `(progn (define-key ,map [,item]
+              '(menu-item ,title ,cmd ,@hlp ,@rest))
+            ,@(and (car binding)
+                   `((put ',cmd
+                          :advertised-binding
+                          ,(car binding))))
+            ,@(mapcar (lambda (b)
+                        `(define-key ,keymap ,b ',cmd))
+                      binding))))
+
+(defmacro fuel-menu--add-items (keymap map keys)
+  `(progn ,@(mapcar (lambda (k) (list 'fuel-menu--add-item keymap map k))
+                    (reverse keys))))
+
+(defmacro fuel-menu--add-submenu (name keymap map keys)
+  (let ((ev (make-symbol name))
+        (map2 (make-symbol "map2")))
+    `(progn
+       (let ((,map2 (make-sparse-keymap ,name)))
+         (define-key ,map [,ev] (cons ,name ,map2))
+         (fuel-menu--add-items ,keymap ,map2 ,keys)))))
+
+(defvar fuel-menu--line-counter 0)
+
+(defun fuel-menu--add-line (&optional map)
+  (let ((line (make-symbol (format "line%s"
+                                   (setq fuel-menu--line-counter
+                                         (1+ fuel-menu--line-counter))))))
+    (define-key (or map global-map) `[,line]
+      `(menu-item "--single-line"))))
+
+(defmacro fuel-menu--add-custom (title group keymap map)
+  `(fuel-menu--add-item ,keymap ,map
+     (,title nil (lambda () (interactive) (customize-group ',group)))))
+
+(defmacro fuel-menu--mode-toggle (title bindings mode keymap map)
+  `(fuel-menu--add-item ,keymap ,map
+     (,title ,bindings ,mode
+             :button (:toggle . (and (boundp ',mode) ,mode)))))
+
+(defmacro fuel-menu--defmenu (name keymap &rest keys)
+  (let ((mmap (make-symbol "mmap")))
+    `(progn
+       (let ((,mmap (make-sparse-keymap "FUEL")))
+         (define-key ,keymap [menu-bar ,name] (cons "FUEL" ,mmap))
+         (define-key ,mmap [customize]
+           (cons "Customize FUEL"
+                 `(lambda () (interactive) (customize-group 'fuel))))
+         (fuel-menu--add-line ,mmap)
+         (fuel-menu--add-items ,keymap ,mmap ,keys)
+         ,mmap))))
+
+(put 'fuel-menu--defmenu 'lisp-indent-function 2)
+
+
+\f
+(provide 'fuel-menu)
+;;; fuel-menu.el ends here
+
index 0359e57d19664e8d33be3772f5358cc1f58e7bb3..ecee020b546a1fac3d88717512f191f3327458f8 100644 (file)
@@ -27,6 +27,7 @@
 (require 'fuel-font-lock)
 (require 'fuel-edit)
 (require 'fuel-syntax)
+(require 'fuel-menu)
 (require 'fuel-base)
 
 \f
@@ -181,58 +182,64 @@ interacting with a factor listener is at your disposal.
       (fuel-scaffold--maybe-insert))))
 
 \f
-;;; Keys:
-
-(defun fuel-mode--key-1 (k c)
-  (define-key fuel-mode-map (vector '(control ?c) `(control ,k))  c))
-
-(defun fuel-mode--key (p k c)
-  (define-key fuel-mode-map (vector '(control ?c) `(control ,p) k) c)
-  (define-key fuel-mode-map (vector '(control ?c) `(control ,p) `(control ,k)) c))
-
-(fuel-mode--key-1 ?k 'fuel-run-file)
-(fuel-mode--key-1 ?l 'fuel-run-file)
-(fuel-mode--key-1 ?r 'fuel-refresh-all)
-(fuel-mode--key-1 ?t 'fuel-test-vocab)
-(fuel-mode--key-1 ?z 'run-factor)
-(fuel-mode--key-1 ?s 'fuel-switch-to-buffer)
-(define-key fuel-mode-map "\C-x4s" 'fuel-switch-to-buffer-other-window)
-(define-key fuel-mode-map "\C-x5s" 'fuel-switch-to-buffer-other-frame)
-
-(define-key fuel-mode-map "\C-\M-x" 'fuel-eval-definition)
-(define-key fuel-mode-map "\C-\M-r" 'fuel-eval-extended-region)
-(define-key fuel-mode-map "\M-." 'fuel-edit-word-at-point)
-(define-key fuel-mode-map "\M-," 'fuel-edit-pop-edit-word-stack)
-(define-key fuel-mode-map "\C-c\M-<" 'fuel-show-callers)
-(define-key fuel-mode-map "\C-c\M->" 'fuel-show-callees)
-(define-key fuel-mode-map (kbd "M-TAB") 'fuel-completion--complete-symbol)
-
-(fuel-mode--key ?e ?d 'fuel-edit-word-doc-at-point)
-(fuel-mode--key ?e ?e 'fuel-eval-extended-region)
-(fuel-mode--key ?e ?k 'fuel-run-file)
-(fuel-mode--key ?e ?l 'fuel-load-usings)
-(fuel-mode--key ?e ?r 'fuel-eval-region)
-(fuel-mode--key ?e ?u 'fuel-update-usings)
-(fuel-mode--key ?e ?v 'fuel-edit-vocabulary)
-(fuel-mode--key ?e ?w 'fuel-edit-word)
-(fuel-mode--key ?e ?x 'fuel-eval-definition)
-
-(fuel-mode--key ?x ?a 'fuel-refactor-extract-article)
-(fuel-mode--key ?x ?i 'fuel-refactor-inline-word)
-(fuel-mode--key ?x ?g 'fuel-refactor-make-generic)
-(fuel-mode--key ?x ?r 'fuel-refactor-extract-region)
-(fuel-mode--key ?x ?s 'fuel-refactor-extract-sexp)
-(fuel-mode--key ?x ?v 'fuel-refactor-extract-vocab)
-(fuel-mode--key ?x ?w 'fuel-refactor-rename-word)
-
-(fuel-mode--key ?d ?> 'fuel-show-callees)
-(fuel-mode--key ?d ?< 'fuel-show-callers)
-(fuel-mode--key ?d ?v 'fuel-show-file-words)
-(fuel-mode--key ?d ?a 'fuel-autodoc-mode)
-(fuel-mode--key ?d ?p 'fuel-apropos)
-(fuel-mode--key ?d ?d 'fuel-help)
-(fuel-mode--key ?d ?e 'fuel-stack-effect-sexp)
-(fuel-mode--key ?d ?s 'fuel-help-short)
+;;; Keys and menu:
+
+(fuel-menu--defmenu fuel fuel-mode-map
+  ("Complete symbol" ((kbd "M-TAB"))
+   fuel-completion--complete-symbol :enable (symbol-at-point))
+  ("Update USING:" ("\C-c\C-e\C-u" "\C-c\C-eu") fuel-update-usings)
+  --
+  ("Eval definition" ("\C-\M-x" "\C-c\C-e\C-x" "\C-c\C-ex")
+   fuel-eval-definition)
+  ("Eval extended region" ("\C-\M-r" "\C-c\C-e\C-e" "\C-c\C-ee")
+   fuel-eval-extended-region :enable mark-active)
+  ("Eval region" ("\C-c\C-r" "\C-c\C-e\C-r" "\C-c\C-er")
+   fuel-eval-region :enable mark-active)
+  --
+  ("Edit word at point" ("\M-." "\C-c\C-e\C-d" "\C-c\C-ed")
+   fuel-edit-word-at-point :enable (symbol-at-point))
+  ("Edit word..." ("\C-c\C-e\C-w" "\C-c\C-ew") fuel-edit-word)
+  ("Edit vocab..." ("\C-c\C-e\C-v" "\C-c\C-ev") fuel-edit-vocabulary)
+  ("Jump back" "\M-," fuel-edit-pop-edit-word-stack)
+  --
+  ("Help on word" ("\C-c\C-d\C-d" "\C-c\C-dd") fuel-help)
+  ("Short help on word" ("\C-c\C-d\C-s" "\C-c\C-ds") fuel-help)
+  ("Apropos..." ("\C-c\C-d\C-p" "\C-c\C-dp") fuel-apropos)
+  ("Show stack effect" ("\C-c\C-d\C-e" "\C-c\C-de") fuel-stack-effect-sexp)
+  --
+  ("Show all words" ("\C-c\C-d\C-v" "\C-c\C-dv") fuel-show-file-words)
+  ("Word callers" "\C-c\M-<" fuel-show-callers :enable (symbol-at-point))
+  ("Word callees" "\C-c\M->" fuel-show-callees :enable (symbol-at-point))
+  (mode "Autodoc mode" ("\C-c\C-d\C-a" "\C-c\C-da") fuel-autodoc-mode)
+  --
+  (menu "Refactor"
+        ("Rename word" ("\C-c\C-x\C-w" "\C-c\C-xw") fuel-refactor-rename-word)
+        ("Inline word" ("\C-c\C-x\C-i" "\C-c\C-xi") fuel-refactor-inline-word)
+        ("Extract region" ("\C-c\C-x\C-r" "\C-c\C-xr")
+         fuel-refactor-extract-region :enable mark-active)
+        ("Extract subregion" ("\C-c\C-x\C-s" "\C-c\C-xs")
+         fuel-refactor-extract-sexp)
+        ("Extract vocab" ("\C-c\C-x\C-v" "\C-c\C-xv")
+         fuel-refactor-extract-vocab)
+        ("Make generic" ("\C-c\C-x\C-g" "\C-c\C-xg")
+         fuel-refactor-make-generic)
+        --
+        ("Extract article" ("\C-c\C-x\C-a" "\C-c\C-xa")
+         fuel-refactor-extract-article))
+  --
+  ("Load used vocabs" ("\C-c\C-e\C-l" "\C-c\C-el") fuel-load-usings)
+  ("Run file" ("\C-c\C-k" "\C-c\C-l" "\C-c\C-e\C-k") fuel-run-file)
+  ("Run unit tests" "\C-c\C-t" fuel-test-vocab)
+  ("Refresh vocabs" "\C-c\C-r" fuel-refresh-all)
+  --
+  (menu "Switch to"
+        ("Listener" "\C-c\C-z" run-factor)
+        ("Related Factor file" "\C-c\C-o" factor-mode-visit-other-file)
+        ("Other Factor buffer" "\C-c\C-s" fuel-switch-to-buffer)
+        ("Other Factor buffer other window" "\C-x4s"
+         fuel-switch-to-buffer-other-window)
+        ("Other Factor buffer other frame" "\C-x5s"
+         fuel-switch-to-buffer-other-frame)))
 
 \f
 (provide 'fuel-mode)
index faf1897304a97cb74fc193a95f8614cec7140950..480540262fdd9896e180e334585327cd064b1327 100644 (file)
@@ -1,6 +1,6 @@
 ;;; fuel-xref.el -- showing cross-reference info
 
-;; Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2008, 2009, 2010 Jose Antonio Ortega Ruiz
 ;; See http://factorcode.org/license.txt for BSD license.
 
 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
@@ -20,6 +20,7 @@
 (require 'fuel-syntax)
 (require 'fuel-popup)
 (require 'fuel-font-lock)
+(require 'fuel-menu)
 (require 'fuel-base)
 
 (require 'button)
@@ -275,7 +276,8 @@ With prefix argument, ask for the vocab."
   (set-syntax-table fuel-syntax--syntax-table)
   (setq mode-name "FUEL Xref")
   (setq major-mode 'fuel-xref-mode)
-  (font-lock-add-keywords nil '(("(in \\(.+\\))" 1 'fuel-font-lock-xref-vocab)))
+  (font-lock-add-keywords nil
+                          '(("(in \\(.+\\))" 1 'fuel-font-lock-xref-vocab)))
   (setq buffer-read-only t))
 
 \f