Merge branch 'master' into new_ui

db4
Slava Pestov 2009-01-25 17:07:02 -06:00
commit 577fde6e91
6 changed files with 150 additions and 111 deletions

View File

@ -302,6 +302,8 @@ IN: regexp-tests
[ "1.2.3.4" ]
[ "1ABC2DEF3GHI4JK" R/ [A-Z]+/ "." re-replace ] unit-test
[ "-- title --" ] [ "== title ==" "=" <regexp> "-" re-replace ] unit-test
/*
! FIXME
[ f ] [ "ab" "a(?!b)" <regexp> first-match ] unit-test

View File

@ -1,4 +1,4 @@
FUEL, Factor's Ultimate Emacs Library -*- org -*-
FUEL, Factor's Ultimate Emacs Library
-------------------------------------
FUEL provides a complete environment for your Factor coding pleasure
@ -29,47 +29,46 @@ beast.
* Basic usage
*** Running the listener
If you're using the default factor binary and images locations inside
the Factor's source tree, that should be enough to start using FUEL.
Editing any file with the extension .factor will put you in
factor-mode; try C-hm for a summary of available commands.
If you're using the default factor binary and images locations inside
the Factor's source tree, that should be enough to start using FUEL.
Editing any file with the extension .factor will put you in
factor-mode; try C-hm for a summary of available commands.
To start the listener, try M-x run-factor.
To start the listener, try M-x run-factor.
By default, FUEL will try to use the binary and image files in the
factor installation directory. You can customize them with:
By default, FUEL will try to use the binary and image files in the
factor installation directory. You can customize them with:
(setq fuel-listener-factor-binary <full path to factor>)
(setq fuel-listener-factor-image <full path to factor image>)
Many aspects of the environment can be customized:
M-x customize-group fuel will show you how many.
Many aspects of the environment can be customized:
M-x customize-group fuel will show you how many.
*** Faster listener startup
On startup, run-factor loads the fuel vocabulary, which can take a
while. If you want to speedup the load process, type 'save' in the
listener prompt just after invoking run-factor. This will save a
factor image (overwriting the current one) with all the needed
vocabs.
On startup, run-factor loads the fuel vocabulary, which can take a
while. If you want to speedup the load process, type 'save' in the
listener prompt just after invoking run-factor. This will save a
factor image (overwriting the current one) with all the needed
vocabs.
*** Connecting to a running Factor
'run-factor' starts a new factor listener process managed by Emacs.
If you prefer to start Factor externally, you can also connect
remotely from Emacs. Here's how to proceed:
'run-factor' starts a new factor listener process managed by Emacs.
If you prefer to start Factor externally, you can also connect
remotely from Emacs. Here's how to proceed:
- In the factor listener, run FUEL:
"fuel" run
This will start a server listener in port 9000.
- Switch to Emacs and issue the command 'M-x connect-to-factor'.
- In the factor listener, run FUEL: "fuel" run
This will start a server listener in port 9000.
- Switch to Emacs and issue the command 'M-x connect-to-factor'.
That's it; you should be up and running. See the help for
'connect-to-factor' for how to use a different port.
*** Vocabulary creation
FUEL offers a basic interface with Factor's scaffolding utilities.
FUEL offers a basic interface to Factor's scaffolding utilities.
To create a new vocabulary directory and associated files:
M-x fuel-scaffold-vocab
@ -81,91 +80,107 @@ 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)).
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).
*** In factor source files:
- C-cz : switch to listener
- C-co : cycle between code, tests and docs factor files
- C-cs : switch to other factor buffer (M-x fuel-switch-to-buffer)
- C-cr : switch to listener and refresh all loaded vocabs
- C-x4s : switch to other factor buffer in other window
- C-x5s : switch to other factor buffer in other frame
Commands in parenthesis can be invoked interactively with
M-x <command>, not necessarily in a factor buffer.
- M-. : edit word at point in Emacs (see fuel-edit-word-method custom var)
- M-, : go back to where M-. was last invoked
- M-TAB : complete word at point
- C-cC-eu : update USING: line
- C-cC-ev : edit vocabulary (M-x fuel-edit-vocabulary)
- C-cC-ew : edit word (M-x fuel-edit-word-at-point)
- C-cC-ed : edit word's doc (M-x fuel-edit-word-at-point)
- C-cC-er : eval region
- C-M-r, C-cC-ee : eval region, extending it to definition boundaries
- C-M-x, C-cC-ex : eval definition around point
- C-ck, C-cC-ek : run file
- C-cC-da : toggle autodoc mode
- C-cC-dd : help for word at point
- C-cC-ds : short help word at point
- C-cC-de : show stack effect of current sexp (with prefix, region)
- C-cC-dp : find words containing given substring (M-x fuel-apropos)
- C-cC-dv : show words in current file (with prefix, ask for vocab)
- C-cM-<, C-cC-d< : show callers of word or vocabulary at point
(M-x fuel-show-callers, M-x fuel-vocab-usage)
- C-cM->, C-cC-d> : show callees of word or vocabulary at point
(M-x fuel-show-callees, M-x fuel-vocab-uses)
- C-cC-xs : extract innermost sexp (up to point) as a separate word
- C-cC-xr : extract region as a separate word
- C-cC-xi : replace word at point by its definition
- C-cC-xv : extract region as a separate vocabulary
- C-cC-xw : rename all uses of a word
|-----------------+------------------------------------------------------------|
| C-cz | switch to listener (run-factor) |
| C-co | cycle between code, tests and docs files |
| C-cr | switch to listener and refresh all loaded vocabs |
| C-cs | switch to other factor buffer (fuel-switch-to-buffer) |
| C-x4s | switch to other factor buffer in other window |
| C-x5s | switch to other factor buffer in other frame |
|-----------------+------------------------------------------------------------|
| M-. | edit word at point in Emacs (fuel-edit-word) |
| M-, | go back to where M-. was last invoked |
| M-TAB | complete word at point |
| C-cC-eu | update USING: line (fuel-update-usings) |
| C-cC-ev | edit vocabulary (fuel-edit-vocabulary) |
| C-cC-ew | edit word (fuel-edit-word-at-point) |
| C-cC-ed | edit word's doc (C-u M-x fuel-edit-word-doc-at-point) |
|-----------------+------------------------------------------------------------|
| C-cC-er | eval region |
| C-M-r, C-cC-ee | eval region, extending it to definition boundaries |
| C-M-x, C-cC-ex | eval definition around point |
| C-ck, C-cC-ek | run file (fuel-run-file) |
|-----------------+------------------------------------------------------------|
| C-cC-da | toggle autodoc mode (fuel-autodoc-mode) |
| C-cC-dd | help for word at point (fuel-help) |
| C-cC-ds | short help word at point (fuel-help-short) |
| C-cC-de | show stack effect of current sexp (with prefix, region) |
| C-cC-dp | find words containing given substring (fuel-apropos) |
| C-cC-dv | show words in current file (with prefix, ask for vocab) |
|-----------------+------------------------------------------------------------|
| C-cM-<, C-cC-d< | show callers of word or vocabulary at point |
| | (fuel-show-callers, fuel-vocab-usage) |
| C-cM->, C-cC-d> | show callees of word or vocabulary at point |
| | (fuel-show-callees, fuel-vocab-uses) |
|-----------------+------------------------------------------------------------|
| C-cC-xs | extract innermost sexp (up to point) as a separate word |
| | (fuel-refactor-extract-sexp) |
| C-cC-xr | extract region as a separate word |
| | (fuel-refactor-extract-region) |
| C-cC-xv | extract region as a separate vocabulary |
| | (fuel-refactor-extract-vocab) |
| C-cC-xi | replace word by its definition (fuel-refactor-inline-word) |
| C-cC-xw | rename all uses of a word (fuel-refactor-rename-word) |
|-----------------+------------------------------------------------------------|
*** In the listener:
- TAB : complete word at point
- M-. : edit word at point in Emacs
- C-cr : refresh all loaded vocabs
- C-ca : toggle autodoc mode
- C-cp : find words containing given substring (M-x fuel-apropos)
- C-cs : toggle stack mode
- C-cv : edit vocabulary
- C-ch : help for word at point
- C-ck : run file
|------+----------------------------------------------------------|
| TAB | complete word at point |
| M-. | edit word at point in Emacs |
| C-cr | refresh all loaded vocabs |
| C-ca | toggle autodoc mode |
| C-cp | find words containing given substring (M-x fuel-apropos) |
| C-cs | toggle stack mode |
| C-cv | edit vocabulary |
| C-ch | help for word at point |
| C-ck | run file |
|------+----------------------------------------------------------|
*** In the debugger (it pops up upon eval/compilation errors):
- g : go to error
- <digit> : invoke nth restart
- w/e/l : invoke :warnings, :errors, :linkage
- q : bury buffer
|---------+-------------------------------------|
| g | go to error |
| <digit> | invoke nth restart |
| w/e/l | invoke :warnings, :errors, :linkage |
| q | bury buffer |
|---------+-------------------------------------|
*** In the help browser:
- h : help for word at point
- v : help for a vocabulary
- a : find words containing given substring (M-x fuel-apropos)
- e : edit current article
- ba : bookmark current page
- bb : display bookmarks
- bd : delete bookmark at point
- n/p : next/previous page
- l : previous page
- SPC/S-SPC : scroll up/down
- TAB/S-TAB : next/previous link
- k : kill current page and go to previous or next
- r : refresh page
- c : clean browsing history
- M-. : edit word at point in Emacs
- C-cz : switch to listener
- q : bury buffer
|-----------+----------------------------------------------------------|
| h | help for word at point |
| v | help for a vocabulary |
| a | find words containing given substring (M-x fuel-apropos) |
| e | edit current article |
| ba | bookmark current page |
| bb | display bookmarks |
| bd | delete bookmark at point |
| n/p | next/previous page |
| l | previous page |
| SPC/S-SPC | scroll up/down |
| TAB/S-TAB | next/previous link |
| k | kill current page and go to previous or next |
| r | refresh page |
| c | clean browsing history |
| M-. | edit word at point in Emacs |
| C-cz | switch to listener |
| q | bury buffer |
|-----------+----------------------------------------------------------|
*** In crossref buffers
- TAB/BACKTAB : navigate links
- RET/mouse click : follow link
- h : show help for word at point
- q : bury buffer
|-----------------+-----------------------------|
| TAB/BACKTAB | navigate links |
| RET/mouse click | follow link |
| h | show help for word at point |
| q | bury buffer |
|-----------------+-----------------------------|

View File

@ -32,6 +32,7 @@
(case (car sexp)
(:array (factor--seq 'V{ '} (cdr sexp)))
(:seq (factor--seq '{ '} (cdr sexp)))
(:tuple (factor--seq 'T{ '} (cdr sexp)))
(:quote (format "\\ %s" (factor `(:factor ,(cadr sexp)))))
(:quotation (factor--seq '\[ '\] (cdr sexp)))
(:using (factor `(USING: ,@(cdr sexp) :end)))

View File

@ -79,11 +79,15 @@
(save-excursion
(goto-char (nth 8 state))
(beginning-of-line)
(cond ((looking-at "USING: ") 'factor-font-lock-vocabulary-name)
(cond ((looking-at "USING: ")
'factor-font-lock-vocabulary-name)
((looking-at "\\(TUPLE\\|SYMBOLS\\|VARS\\): ")
'factor-font-lock-symbol)
((looking-at "C-ENUM:\\( \\|\n\\)")
'factor-font-lock-constant)
(t 'default))))
((char-equal c ?U) 'factor-font-lock-parsing-word)
((or (char-equal c ?U) (char-equal c ?C))
'factor-font-lock-parsing-word)
((char-equal c ?\() 'factor-font-lock-stack-effect)
((char-equal c ?\") 'factor-font-lock-string)
(t 'factor-font-lock-comment)))))
@ -91,6 +95,8 @@
(defconst fuel-font-lock--font-lock-keywords
`((,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
(,fuel-syntax--brace-words-regex 1 'factor-font-lock-parsing-word)
(,fuel-syntax--alien-function-regex (1 'factor-font-lock-type-name)
(2 'factor-font-lock-word))
(,fuel-syntax--vocab-ref-regexp 2 'factor-font-lock-vocabulary-name)
(,fuel-syntax--constructor-decl-regex (1 'factor-font-lock-word)
(2 'factor-font-lock-type-name)
@ -119,7 +125,7 @@
(,fuel-syntax--getter-regex . 'factor-font-lock-getter-word)
(,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
(,fuel-syntax--bad-string-regex . 'factor-font-lock-invalid-syntax)
("\\(P\\|SBUF\\)\"" 1 'factor-font-lock-parsing-word)
("\\_<\\(P\\|SBUF\\|DLL\\)\"" 1 'factor-font-lock-parsing-word)
(,fuel-syntax--parsing-words-regex . 'factor-font-lock-parsing-word)))
(defun fuel-font-lock--font-lock-setup (&optional keywords no-syntax)

View File

@ -156,7 +156,7 @@
(defvar fuel-markup--maybe-nl nil))
(defun fuel-markup--print (e)
(cond ((null e))
(cond ((null e) (insert "f"))
((stringp e) (fuel-markup--insert-string e))
((and (listp e) (symbolp (car e))
(assoc (car e) fuel-markup--printers))
@ -253,8 +253,12 @@
(insert (cadr e))))
(defun fuel-markup--snippet (e)
(let ((snip (format "%s" (cadr e))))
(insert (fuel-font-lock--factor-str snip))))
(insert (mapconcat '(lambda (s)
(if (stringp s)
(fuel-font-lock--factor-str s)
(fuel-markup--print-str s)))
(cdr e)
" ")))
(defun fuel-markup--code (e)
(fuel-markup--insert-nl-if-nb)
@ -285,7 +289,7 @@
(fuel-markup--snippet (cons '$snippet (cdr e))))
(defun fuel-markup--link (e)
(let* ((link (nth 1 e))
(let* ((link (or (nth 1 e) 'f))
(type (or (nth 3 e) (if (symbolp link) 'word 'article)))
(label (or (nth 2 e)
(and (eq type 'article)

View File

@ -43,16 +43,17 @@
;;; Regexps galore:
(defconst fuel-syntax--parsing-words
'(":" "::" ";" "<<" "<PRIVATE" ">>"
"ABOUT:" "ALIAS:" "ARTICLE:"
'(":" "::" ";" "&:" "<<" "<PRIVATE" ">>"
"ABOUT:" "ALIAS:" "ALIEN:" "ARTICLE:"
"B" "BIN:"
"C:" "C-STRUCT:" "C-UNION:" "CHAR:" "CONSTANT:" "call-next-method"
"C:" "C-ENUM:" "C-STRUCT:" "C-UNION:" "CHAR:" "CONSTANT:" "call-next-method"
"DEFER:"
"ERROR:" "EXCLUDE:"
"f" "FORGET:" "FROM:"
"f" "FORGET:" "FROM:" "FUNCTION:"
"GENERIC#" "GENERIC:"
"HELP:" "HEX:" "HOOK:"
"IN:" "initial:" "INSTANCE:" "INTERSECTION:"
"LIBRARY:"
"M:" "MACRO:" "MACRO::" "MAIN:" "MATH:" "MEMO:" "MEMO:" "METHOD:" "MIXIN:"
"OCT:"
"POSTPONE:" "PREDICATE:" "PRIMITIVE:" "PRIVATE>" "PROVIDE:"
@ -117,10 +118,11 @@
'("IN:" "USE:" "FROM:" "EXCLUDE:" "QUALIFIED:" "QUALIFIED-WITH:")))
(defconst fuel-syntax--int-constant-def-regex
(fuel-syntax--second-word-regex '("CHAR:" "BIN:" "HEX:" "OCT:")))
(fuel-syntax--second-word-regex '("ALIEN:" "CHAR:" "BIN:" "HEX:" "OCT:")))
(defconst fuel-syntax--type-definition-regex
(fuel-syntax--second-word-regex '("MIXIN:" "TUPLE:" "SINGLETON:" "UNION:")))
(fuel-syntax--second-word-regex
'("C-STRUCT:" "C-UNION:" "MIXIN:" "TUPLE:" "SINGLETON:" "UNION:")))
(defconst fuel-syntax--tuple-decl-regex
"^TUPLE: +\\([^ \n]+\\) +< +\\([^ \n]+\\)\\_>")
@ -131,7 +133,7 @@
(defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>")
(defconst fuel-syntax--symbol-definition-regex
(fuel-syntax--second-word-regex '("SYMBOL:" "VAR:")))
(fuel-syntax--second-word-regex '("&:" "SYMBOL:" "VAR:")))
(defconst fuel-syntax--stack-effect-regex
"\\( ( .* )\\)\\|\\( (( .* ))\\)")
@ -144,8 +146,12 @@
(defconst fuel-syntax--sub-vocab-regex "^<\\([^ \n]+\\) *$")
(defconst fuel-syntax--alien-function-regex
"\\_<FUNCTION: \\(\\w+\\) \\(\\w+\\)")
(defconst fuel-syntax--indent-def-starts '("" ":"
"FROM"
"C-ENUM" "C-STRUCT" "C-UNION"
"FROM" "FUNCTION:"
"INTERSECTION:"
"M" "MACRO" "MACRO:"
"MEMO" "MEMO:" "METHOD"
@ -158,7 +164,7 @@
"VARS"))
(defconst fuel-syntax--indent-def-start-regex
(format "^\\(%s:\\) " (regexp-opt fuel-syntax--indent-def-starts)))
(format "^\\(%s:\\)\\( \\|\n\\)" (regexp-opt fuel-syntax--indent-def-starts)))
(defconst fuel-syntax--no-indent-def-start-regex
(format "^\\(%s:\\) " (regexp-opt fuel-syntax--no-indent-def-starts)))
@ -181,6 +187,7 @@
"GENERIC:" "GENERIC#"
"HELP:" "HEX:" "HOOK:"
"IN:" "INSTANCE:"
"LIBRARY:"
"MAIN:" "MATH:" "MIXIN:"
"OCT:"
"POSTPONE:" "PRIVATE>" "<PRIVATE"
@ -247,12 +254,16 @@
(" \\((\\)( \\([^\n]*\\) )\\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
(" \\((\\) \\([^\n]*\\) \\()\\)\\( \\|\n\\)" (1 "<b") (2 "w") (3 ">b"))
;; Strings
("\\( \\|^\\)\\(DLL\\|P\\|SBUF\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)"
(3 "\"") (4 "\""))
("\\( \\|^\\)\\(\"\\)[^\n\r\f]*\\(\"\\)\\( \\|\n\\)" (2 "\"") (3 "\""))
("\\_<<\\(\"\\)\\_>" (1 "<b"))
("\\_<\\(\"\\)>\\_>" (1 ">b"))
;; Multiline constructs
("\\_<\\(U\\)SING: \\(;\\)" (1 "<b") (2 ">b"))
("\\_<USING:\\( \\)" (1 "<b"))
("\\_<\\(C\\)-ENUM: \\(;\\)" (1 "<b") (2 ">b"))
("\\_<C-ENUM:\\( \\|\n\\)" (1 "<b"))
("\\_<TUPLE: +\\w+? +< +\\w+? *\\( \\|\n\\)\\([^;]\\|$\\)" (1 "<b"))
("\\_<\\(TUPLE\\|SYMBOLS\\|VARS\\): +\\w+? *\\( \\|\n\\)\\([^;<\n]\\|\\_>\\)"
(2 "<b"))