FUEL: Menus for factor, listener, doc and debug buffers.

db4
Jose A. Ortega Ruiz 2010-08-13 04:25:57 +02:00
parent cc71799833
commit 0c5a0ee058
8 changed files with 219 additions and 93 deletions

View 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 |

View 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))

View 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)
@ -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.

View 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))
;;; IN: support

View 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)
(provide 'fuel-listener)

102
misc/fuel/fuel-menu.el Normal file
View File

@ -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
(require 'fuel-base)
;;; 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)
(provide 'fuel-menu)
;;; fuel-menu.el ends here

View File

@ -27,6 +27,7 @@
(require 'fuel-font-lock)
(require 'fuel-edit)
(require 'fuel-syntax)
(require 'fuel-menu)
(require 'fuel-base)
@ -181,58 +182,64 @@ interacting with a factor listener is at your disposal.
(fuel-scaffold--maybe-insert))))
;;; Keys:
;;; Keys and menu:
(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)
(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)))
(provide 'fuel-mode)

View 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))