version 1.26, 1998/04/14 16:43:06
|
version 1.35, 1999/10/15 23:18:20
|
Line 1
|
Line 1
|
;; Forth mode for Emacs |
;; Forth mode for Emacs |
;; This file is part of GForth. |
|
;; Changes by anton |
;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. |
;; This is a variant of forth.el that came with TILE. |
|
;; I left most of this stuff untouched and made just a few changes for |
;; This file is part of Gforth. |
;; the things I use (mainly indentation and syntax tables). |
|
;; So there is still a lot of work to do to adapt this to gforth. |
|
|
|
;; GForth is distributed in the hope that it will be useful, |
;; GForth is distributed in the hope that it will be useful, |
;; but WITHOUT ANY WARRANTY. No author or distributor |
;; but WITHOUT ANY WARRANTY. No author or distributor |
Line 21
|
Line 19
|
;; file named COPYING. Among other things, the copyright notice |
;; file named COPYING. Among other things, the copyright notice |
;; and this notice must be preserved on all copies. |
;; and this notice must be preserved on all copies. |
|
|
|
;; Changes by anton |
|
;; This is a variant of forth.el that came with TILE. |
|
;; I left most of this stuff untouched and made just a few changes for |
|
;; the things I use (mainly indentation and syntax tables). |
|
;; So there is still a lot of work to do to adapt this to gforth. |
|
|
;;------------------------------------------------------------------- |
;;------------------------------------------------------------------- |
;; A Forth indentation, documentation search and interaction library |
;; A Forth indentation, documentation search and interaction library |
;;------------------------------------------------------------------- |
;;------------------------------------------------------------------- |
Line 36
|
Line 40
|
|
|
|
|
(defvar forth-positives |
(defvar forth-positives |
" : :noname code interpretation: ;code does> begin do ?do +do -do u+do u-do while if ?dup-if ?dup-0=-if else case of struct [if] [ifdef] [ifundef] [else] with public: private: class " |
" : :noname m: :m code interpretation: ;code does> begin do ?do +do -do u+do u-do while if ?dup-if ?dup-0=-if else case of struct [if] [ifdef] [ifundef] [else] with public: private: class " |
"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 |
" ; end-code ;code does> until repeat while +loop loop -loop s+loop else then endif again endcase endof end-struct [then] [else] [endif] endwith class; how: " |
" ; ;m end-code ;code does> until repeat while +loop loop -loop s+loop else then endif again endcase endof end-struct [then] [else] [endif] endwith end-class class; how: " |
"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.") |
|
|
(defvar forth-zeroes |
(defvar forth-zeroes |
" : :noname code interpretation: public: private: how: class class; " |
" : :noname code interpretation: public: private: how: implements class class; " |
"Contains all words which causes the indent to go to zero") |
"*Contains all words which causes the indent to go to zero") |
|
|
(setq forth-zero 0) |
(setq forth-zero 0) |
|
|
Line 88 OBS! All words in forth-negatives must b
|
Line 92 OBS! All words in forth-negatives must b
|
(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) |
(define-key forth-mode-map "\e." 'forth-find-tag) |
|
|
|
;setup for C-h C-i to work |
|
(if (fboundp 'info-lookup-add-help) |
|
(info-lookup-add-help |
|
:topic 'symbol |
|
:mode 'forth-mode |
|
:regexp "[^ |
|
]+" |
|
:ignore-case t |
|
:doc-spec '(("(gforth)Name Index" nil "`" "' ")))) |
|
|
(load "etags") |
(load "etags") |
|
|
(defun forth-find-tag (tagname &optional next-p regexp-p) |
(defun forth-find-tag (tagname &optional next-p regexp-p) |
Line 922 The region is sent terminated by a newli
|
Line 936 The region is sent terminated by a newli
|
|
|
(require 'outline) |
(require 'outline) |
|
|
;;(define-key outline-minor-mode-map 'f9 'show-entry) |
(defun f-outline-level () |
;;(define-key outline-minor-mode-map 'f10 'hide-entry) |
(cond ((looking-at "\\`\\\\") |
|
0) |
|
((looking-at "\\\\ SEC") |
|
0) |
|
((looking-at "\\\\ \\\\ .*") |
|
0) |
|
((looking-at "\\\\ DEFS") |
|
1) |
|
((looking-at "\\/\\* ") |
|
1) |
|
((looking-at ": .*") |
|
1) |
|
((looking-at "\\\\G") |
|
2) |
|
((looking-at "[ \t]+\\\\") |
|
3)) |
|
) |
|
|
(defun fold-f () |
(defun fold-f () |
(interactive) |
(interactive) |
(add-hook 'outline-minor-mode-hook 'hide-body) |
(add-hook 'outline-minor-mode-hook 'hide-body) |
|
|
; outline mode header start, i.e. find word definitions |
; outline mode header start, i.e. find word definitions |
(setq outline-regexp "^\\(:\\)[ \t]+\\([^ \t]*\\)") |
;;; (setq outline-regexp "^\\(:\\)[ \t]+\\([^ \t]*\\)") |
|
(setq outline-regexp "\\`\\\\\\|:\\|\\\\ SEC\\|\\\\G\\|[ \t]+\\\\\\|\\\\ DEFS\\|\\/\\*\\|\\\\ \\\\ .*") |
|
(setq outline-level 'f-outline-level) |
|
|
(outline-minor-mode) |
(outline-minor-mode) |
|
(define-key outline-minor-mode-map '(shift up) 'hide-sublevels) |
|
(define-key outline-minor-mode-map '(shift right) 'show-children) |
|
(define-key outline-minor-mode-map '(shift left) 'hide-subtree) |
|
(define-key outline-minor-mode-map '(shift down) 'show-subtree) |
|
|
) |
) |
|
|
|
;;(define-key global-map '(shift up) 'fold-f) |
|
|
;;; end file folding |
;;; end file folding |
|
|
;;; func-menu is a package that scans your source file for function definitions |
;;; func-menu is a package that scans your source file for function definitions |
Line 946 The region is sent terminated by a newli
|
Line 986 The region is sent terminated by a newli
|
(require 'func-menu) |
(require 'func-menu) |
;; (define-key global-map 'f8 'function-menu) |
;; (define-key global-map 'f8 'function-menu) |
(add-hook 'find-fible-hooks 'fume-add-menubar-entry) |
(add-hook 'find-fible-hooks 'fume-add-menubar-entry) |
(define-key global-map "\C-cg" 'fume-prompt-function-goto) |
; (define-key global-map "\C-cg" 'fume-prompt-function-goto) |
(define-key global-map '(shift button3) 'mouse-function-menu) |
; (define-key global-map '(shift button3) 'mouse-function-menu) |
)) |
)) |
|
|
|
;; end |
|
|