version 1.10, 1995/01/25 18:53:48
|
version 1.13, 1995/09/06 21:00:15
|
Line 37
|
Line 37
|
|
|
|
|
(defvar forth-positives |
(defvar forth-positives |
" : :noname begin do ?do while if ?dup-if ?dup-not-if else case create does> exception> struct [if] [else] " |
" : :noname begin do ?do while if ?dup-if ?dup-not-if else case struct [if] [else] " |
"Contains all words which will cause the indent-level to be incremented |
"Contains all words which will cause the indent-level to be incremented |
on the next line. |
on the next line. |
OBS! All words in forth-positives must be surrounded by spaces.") |
OBS! All words in forth-positives must be surrounded by spaces.") |
|
|
(defvar forth-negatives |
(defvar forth-negatives |
" ; until repeat while +loop loop s+loop else then endif again endcase does> end-struct [then] [else] " |
" ; until repeat while +loop loop s+loop else then endif again endcase end-struct [then] [else] [endif]" |
"Contains all words which will cause the indent-level to be decremented |
"Contains all words which will cause the indent-level to be decremented |
on the current line. |
on the current line. |
OBS! All words in forth-negatives must be surrounded by spaces.") |
OBS! All words in forth-negatives must be surrounded by spaces.") |
Line 81 OBS! All words in forth-negatives must b
|
Line 81 OBS! All words in forth-negatives must b
|
(define-key forth-mode-map "\t" 'forth-indent-command) |
(define-key forth-mode-map "\t" 'forth-indent-command) |
(define-key forth-mode-map "\C-m" 'reindent-then-newline-and-indent) |
(define-key forth-mode-map "\C-m" 'reindent-then-newline-and-indent) |
(define-key forth-mode-map "\M-q" 'forth-fill-paragraph) |
(define-key forth-mode-map "\M-q" 'forth-fill-paragraph) |
|
(define-key forth-mode-map "\e." 'forth-find-tag) |
|
|
|
(load "etags.el") |
|
|
|
(defun forth-find-tag (tagname &optional next-p regexp-p) |
|
(interactive (find-tag-interactive "Find tag: ")) |
|
(switch-to-buffer |
|
(find-tag-noselect (concat " " tagname " ") next-p regexp-p))) |
|
|
(defvar forth-mode-syntax-table nil |
(defvar forth-mode-syntax-table nil |
"Syntax table in use in Forth-mode buffers.") |
"Syntax table in use in Forth-mode buffers.") |
Line 103 OBS! All words in forth-negatives must b
|
Line 111 OBS! All words in forth-negatives must b
|
;only supports one comment syntax (and a hack to accomodate C++); I |
;only supports one comment syntax (and a hack to accomodate C++); I |
;use '\' for natural language comments and '(' for formal comments |
;use '\' for natural language comments and '(' for formal comments |
;like stack comments, so for me it's better to have emacs treat '\' |
;like stack comments, so for me it's better to have emacs treat '\' |
;comments as comments. I you want it different, make the appropriate |
;comments as comments. If you want it different, make the appropriate |
;changes (best in your .emacs file). |
;changes (best in your .emacs file). |
; |
; |
;Hmm, the C++ hack could be used to support both comment syntaxes: we |
;Hmm, the C++ hack could be used to support both comment syntaxes: we |
Line 413 part of the screen."
|
Line 421 part of the screen."
|
(message "Resetting Forth process...done"))))) |
(message "Resetting Forth process...done"))))) |
|
|
(defun forth-default-command-line () |
(defun forth-default-command-line () |
(concat forth-program-name " -emacs" |
(concat forth-program-name |
(if forth-program-arguments |
(if forth-program-arguments |
(concat " " forth-program-arguments) |
(concat " " forth-program-arguments) |
"") |
|
(if forth-band-name |
|
(concat " -band " forth-band-name) |
|
""))) |
""))) |
|
|
;;;; Internal Variables |
;;;; Internal Variables |
Line 865 The region is sent terminated by a newli
|
Line 870 The region is sent terminated by a newli
|
(compile1 ctools-compile-command "No more errors")) |
(compile1 ctools-compile-command "No more errors")) |
|
|
|
|
|
;;; Forth menu |
|
;;; Mikael Karlsson <qramika@eras70.ericsson.se> |
|
|
|
(cond ((string-match "XEmacs\\|Lucid" emacs-version) |
|
(require 'func-menu) |
|
|
|
(defconst fume-function-name-regexp-forth |
|
"^\\(:\\)[ \t]+\\([^ \t]*\\)" |
|
"Expression to get word definitions in Forth.") |
|
|
|
(setq fume-function-name-regexp-alist |
|
(append '((forth-mode . fume-function-name-regexp-forth) |
|
) fume-function-name-regexp-alist)) |
|
|
|
;; Find next forth word in the buffer |
|
(defun fume-find-next-forth-function-name (buffer) |
|
"Searches for the next forth word in BUFFER." |
|
(set-buffer buffer) |
|
(if (re-search-forward fume-function-name-regexp nil t) |
|
(let ((beg (match-beginning 2)) |
|
(end (match-end 2))) |
|
(cons (buffer-substring beg end) beg)))) |
|
|
|
(setq fume-find-function-name-method-alist |
|
(append '((forth-mode . fume-find-next-forth-function-name)))) |
|
|
|
)) |
|
;;; End Forth menu |
|
|
|
;;; File folding of forth-files |
|
;;; uses outline |
|
;;; Toggle activation with M-x fold-f (when editing a forth-file) |
|
;;; Use f9 to expand, f10 to hide, Or the menubar in xemacs |
|
;;; |
|
;;; Works most of the times but loses sync with the cursor occasionally |
|
;;; Could be improved by also folding on comments |
|
|
|
(require 'outline) |
|
|
|
;;(define-key outline-minor-mode-map 'f9 'show-entry) |
|
;;(define-key outline-minor-mode-map 'f10 'hide-entry) |
|
|
|
(defun fold-f () |
|
(interactive) |
|
(add-hook 'outline-minor-mode-hook 'hide-body) |
|
|
|
; outline mode header start, i.e. find word definitions |
|
(setq outline-regexp "^\\(:\\)[ \t]+\\([^ \t]*\\)") |
|
|
|
(outline-minor-mode) |
|
) |
|
;;; end file folding |
|
|
|
;;; func-menu is a package that scans your source file for function definitions |
|
;;; and makes a menubar entry that lets you jump to any particular function |
|
;;; definition by selecting it from the menu. The following code turns this on |
|
;;; for all of the recognized languages. Scanning the buffer takes some time, |
|
;;; but not much. |
|
;;; |
|
(cond ((string-match "XEmacs\\|Lucid" emacs-version) |
|
(require 'func-menu) |
|
;; (define-key global-map 'f8 'function-menu) |
|
(add-hook 'find-fible-hooks 'fume-add-menubar-entry) |
|
(define-key global-map "\C-cg" 'fume-prompt-function-goto) |
|
(define-key global-map '(shift button3) 'mouse-function-menu) |
|
)) |