diff --git a/misc/fuel/README b/misc/fuel/README index 6b0cf902af..e952176f2c 100644 --- a/misc/fuel/README +++ b/misc/fuel/README @@ -89,7 +89,7 @@ beast. * Quick key reference Triple chords ending in a single letter accept also C- (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 | diff --git a/misc/fuel/factor-mode.el b/misc/fuel/factor-mode.el index c26abab997..c461b5fe94 100644 --- a/misc/fuel/factor-mode.el +++ b/misc/fuel/factor-mode.el @@ -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 @@ -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)) diff --git a/misc/fuel/fuel-debug.el b/misc/fuel/fuel-debug.el index 611884e087..07da0d2d3c 100644 --- a/misc/fuel/fuel-debug.el +++ b/misc/fuel/fuel-debug.el @@ -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 @@ -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. diff --git a/misc/fuel/fuel-help.el b/misc/fuel/fuel-help.el index 93aca94674..5edcea651f 100644 --- a/misc/fuel/fuel-help.el +++ b/misc/fuel/fuel-help.el @@ -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 diff --git a/misc/fuel/fuel-listener.el b/misc/fuel/fuel-listener.el index de7cc16391..d9c3a0d16f 100644 --- a/misc/fuel/fuel-listener.el +++ b/misc/fuel/fuel-listener.el @@ -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) diff --git a/misc/fuel/fuel-menu.el b/misc/fuel/fuel-menu.el new file mode 100644 index 0000000000..6abcd82172 --- /dev/null +++ b/misc/fuel/fuel-menu.el @@ -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 +;; 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 + diff --git a/misc/fuel/fuel-mode.el b/misc/fuel/fuel-mode.el index 0359e57d19..ecee020b54 100644 --- a/misc/fuel/fuel-mode.el +++ b/misc/fuel/fuel-mode.el @@ -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) diff --git a/misc/fuel/fuel-xref.el b/misc/fuel/fuel-xref.el index faf1897304..480540262f 100644 --- a/misc/fuel/fuel-xref.el +++ b/misc/fuel/fuel-xref.el @@ -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 @@ -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))