--- gforth/gforth.el 2003/02/28 20:13:22 1.67 +++ gforth/gforth.el 2007/08/17 22:00:14 1.73 @@ -1,6 +1,6 @@ ;;; gforth.el --- major mode for editing (G)Forth sources -;; Copyright (C) 1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc. +;; Copyright (C) 1995,1996,1997,1998,2000,2001,2003,2004 Free Software Foundation, Inc. ;; This file is part of Gforth. @@ -61,13 +61,13 @@ (progn (string-match "^[0-9]+" emacs-version) (string-to-int (match-string 0 emacs-version))))) +;; Code ripped from `subr.el' for compatability with Emacs versions +;; prior to 20.1 +(eval-when-compile (defun forth-emacs-older (major minor) (or (< emacs-major-version major) (and (= emacs-major-version major) (< emacs-minor-version minor)))) -;; Code ripped from `subr.el' for compatability with Emacs versions -;; prior to 20.1 -(eval-when-compile (if (forth-emacs-older 20 1) (progn (defmacro when (cond &rest body) @@ -79,8 +79,9 @@ ;; `no-error' argument of require not supported in Emacs versions ;; prior to 20.4 :-( +(eval-and-compile (defun forth-require (feature) - (condition-case err (require feature) (error nil))) + (condition-case err (require feature) (error nil)))) (require 'font-lock) @@ -115,6 +116,9 @@ ; todo: ; +; screen-height existiert nicht in XEmacs, frame-height ersetzen? +; + ; Wörter ordentlich hilighten, die nicht auf Whitespace beginnen ( ..)IF ; -- mit aktueller Konzeption nicht möglich?? ; @@ -270,7 +274,8 @@ PARSED-TYPE specifies what kind of text "case" "of" "?dup-if" "?dup-0=-if" "then" "endif" "until" "repeat" "again" "leave" "?leave" "loop" "+loop" "-loop" "next" "endcase" "endof" "else" "while" "try" - "recover" "endtry" "assert(" "assert0(" "assert1(" "assert2(" + "recover" "endtry" "iferror" "restore" "endtry-iferror" + "assert(" "assert0(" "assert1(" "assert2(" "assert3(" ")" "" "compilation>") compile-only (font-lock-keyword-face . 2)) @@ -412,7 +417,7 @@ INDENT1 and INDENT2 are indentation spec (setq forth-indent-words '((("if" "begin" "do" "?do" "+do" "-do" "u+do" - "u-do" "?dup-if" "?dup-0=-if" "case" "of" "try" + "u-do" "?dup-if" "?dup-0=-if" "case" "of" "try" "iferror" "[if]" "[ifdef]" "[ifundef]" "[begin]" "[for]" "[do]" "[?do]") (0 . 2) (0 . 2)) ((":" ":noname" "code" "struct" "m:" ":m" "class" "interface") @@ -428,11 +433,11 @@ INDENT1 and INDENT2 are indentation spec (-2 . 0) (0 . -2) non-immediate) (("protected" "public" "how:") (-1 . 1) (0 . 0) non-immediate) (("+loop" "-loop" "until") (-2 . 0) (-2 . 0)) - (("else" "recover" "[else]") (-2 . 2) (0 . 0)) + (("else" "recover" "restore" "endtry-iferror" "[else]") + (-2 . 2) (0 . 0)) (("does>") (-1 . 1) (0 . 0)) (("while" "[while]") (-2 . 4) (0 . 2)) - (("repeat" "[repeat]") (-4 . 0) (0 . -4)) - (("\\g") (-2 . 2) (0 . 0)))) + (("repeat" "[repeat]") (-4 . 0) (0 . -4)))) (defvar forth-local-indent-words nil "List of Forth words to prepend to `forth-indent-words', when a forth-mode @@ -824,8 +829,8 @@ Used for imenu index generation.") ;; Return the column increment, that the current line of forth code does to ;; the current or following lines. `which' specifies which indentation values -;; to use. 0 means the indentation of following lines relative to current -;; line, 1 means the indentation of the current line relative to the previous +;; to use. 1 means the indentation of following lines relative to current +;; line, 0 means the indentation of the current line relative to the previous ;; line. Return `nil', if there are no indentation words on the current line. (defun forth-get-column-incr (which) (save-excursion @@ -1104,8 +1109,7 @@ exceeds 64 characters." (unless (memq forth-info-lookup info-lookup-alist) (setq info-lookup-alist (cons forth-info-lookup info-lookup-alist))) ;; in X-Emacs C-h C-i is by default bound to Info-query - (define-key forth-mode-map "\C-h\C-i" 'info-lookup-symbol)) - + (define-key forth-mode-map [?\C-h ?\C-i] 'info-lookup-symbol)) ;; (info-lookup-add-help ;; :topic 'symbol @@ -1678,12 +1682,10 @@ next one.") forth-source-modes t)) ; T because LOAD ; needs an exact name (comint-check-source file-name) ; Check to see if buffer needs saved. - (setq forth-prev-l/c-dir/file (cons (file-name-directory file-name) + (setq forth-prev-l/c-dir/file (cons (file-name-directory file-name) (file-name-nondirectory file-name))) - (comint-send-string (forth-proc) (concat "(load \"" - file-name - "\"\)\n"))) - + (comint-send-string (forth-proc) + (concat "s\" " file-name "\" included\n"))) (defvar forth-process-buffer nil "*The current Forth process buffer.