Diff for /gforth/gforth.el between versions 1.71 and 1.76

version 1.71, 2004/12/31 13:23:57 version 1.76, 2008/07/15 16:11:49
Line 1 Line 1
 ;;; gforth.el --- major mode for editing (G)Forth sources  ;;; gforth.el --- major mode for editing (G)Forth sources
   
 ;; Copyright (C) 1995,1996,1997,1998,2000,2001,2003,2004 Free Software Foundation, Inc.  ;; Copyright (C) 1995,1996,1997,1998,2000,2001,2003,2004,2007,2008 Free Software Foundation, Inc.
   
 ;; This file is part of Gforth.  ;; This file is part of Gforth.
   
Line 59 Line 59
 (if (not (boundp 'emacs-major-version))  (if (not (boundp 'emacs-major-version))
     (defconst emacs-major-version      (defconst emacs-major-version
       (progn (string-match "^[0-9]+" emacs-version)        (progn (string-match "^[0-9]+" emacs-version)
              (string-to-int (match-string 0 emacs-version)))))               (string-to-number (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)  (defun forth-emacs-older (major minor)
   (or (< emacs-major-version major)    (or (< emacs-major-version major)
       (and (= emacs-major-version major) (< emacs-minor-version minor))))        (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)    (if (forth-emacs-older 20 1)
       (progn        (progn
         (defmacro when (cond &rest body)          (defmacro when (cond &rest body)
Line 79 Line 79
   
 ;; `no-error' argument of require not supported in Emacs versions  ;; `no-error' argument of require not supported in Emacs versions
 ;; prior to 20.4 :-(  ;; prior to 20.4 :-(
   (eval-and-compile
 (defun forth-require (feature)  (defun forth-require (feature)
   (condition-case err (require feature) (error nil)))      (condition-case err (require feature) (error nil))))
   
 (require 'font-lock)  (require 'font-lock)
   
Line 273  PARSED-TYPE specifies what kind of text Line 274  PARSED-TYPE specifies what kind of text
           "case" "of" "?dup-if" "?dup-0=-if" "then" "endif" "until"            "case" "of" "?dup-if" "?dup-0=-if" "then" "endif" "until"
           "repeat" "again" "leave" "?leave"            "repeat" "again" "leave" "?leave"
           "loop" "+loop" "-loop" "next" "endcase" "endof" "else" "while" "try"            "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(" ")" "<interpretation" "<compilation" "interpretation>"             "assert3(" ")" "<interpretation" "<compilation" "interpretation>" 
           "compilation>")            "compilation>")
          compile-only (font-lock-keyword-face . 2))           compile-only (font-lock-keyword-face . 2))
Line 415  INDENT1 and INDENT2 are indentation spec Line 417  INDENT1 and INDENT2 are indentation spec
   
 (setq forth-indent-words  (setq forth-indent-words
       '((("if" "begin" "do" "?do" "+do" "-do" "u+do"        '((("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]")            "[if]" "[ifdef]" "[ifundef]" "[begin]" "[for]" "[do]" "[?do]")
          (0 . 2) (0 . 2))           (0 . 2) (0 . 2))
         ((":" ":noname" "code" "struct" "m:" ":m" "class" "interface")          ((":" ":noname" "code" "struct" "m:" ":m" "class" "interface")
Line 431  INDENT1 and INDENT2 are indentation spec Line 433  INDENT1 and INDENT2 are indentation spec
          (-2 . 0) (0 . -2) non-immediate)           (-2 . 0) (0 . -2) non-immediate)
         (("protected" "public" "how:") (-1 . 1) (0 . 0) non-immediate)          (("protected" "public" "how:") (-1 . 1) (0 . 0) non-immediate)
         (("+loop" "-loop" "until") (-2 . 0) (-2 . 0))          (("+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))          (("does>") (-1 . 1) (0 . 0))
         (("while" "[while]") (-2 . 4) (0 . 2))          (("while" "[while]") (-2 . 4) (0 . 2))
         (("repeat" "[repeat]") (-4 . 0) (0 . -4))))          (("repeat" "[repeat]") (-4 . 0) (0 . -4))))
Line 459  End:\" construct).") Line 462  End:\" construct).")
 ;; in Lisp??  ;; in Lisp??
 (defun forth-filter (predicate list)  (defun forth-filter (predicate list)
   (let ((filtered nil))    (let ((filtered nil))
     (mapcar (lambda (item)      (dolist (item list)
               (when (funcall predicate item)                (when (funcall predicate item)
                 (if filtered                  (if filtered
                     (nconc filtered (list item))                      (nconc filtered (list item))
                   (setq filtered (cons item nil))))            (setq filtered (cons item nil)))))
               nil) list)  
     filtered))      filtered))
   
 ;; Helper function for `forth-compile-word': return whether word has to be  ;; Helper function for `forth-compile-word': return whether word has to be
Line 485  End:\" construct).") Line 487  End:\" construct).")
          (regexp            (regexp 
           (concat "\\(" (cond ((stringp matcher) matcher)            (concat "\\(" (cond ((stringp matcher) matcher)
                               ((listp matcher) (regexp-opt matcher))                                ((listp matcher) (regexp-opt matcher))
                               (t (error "Invalid matcher `%s'")))                                (t (error "Invalid matcher")))
                   "\\)"))                    "\\)"))
          (depth (regexp-opt-depth regexp))           (depth (regexp-opt-depth regexp))
          (description (cdr word)))           (description (cdr word)))
Line 696  End:\" construct).") Line 698  End:\" construct).")
 (eval-when-compile   (eval-when-compile 
   (defmacro forth-save-buffer-state (varlist &rest body)    (defmacro forth-save-buffer-state (varlist &rest body)
     "Bind variables according to VARLIST and eval BODY restoring buffer state."      "Bind variables according to VARLIST and eval BODY restoring buffer state."
     (` (let* ((,@ (append varlist      `(let* (,@(append varlist
                    '((modified (buffer-modified-p)) (buffer-undo-list t)                     '((modified (buffer-modified-p)) (buffer-undo-list t)
                      (inhibit-read-only t) (inhibit-point-motion-hooks t)                       (inhibit-read-only t) (inhibit-point-motion-hooks t)
                      before-change-functions after-change-functions                       before-change-functions after-change-functions
                      deactivate-mark buffer-file-name buffer-file-truename))))                          deactivate-mark buffer-file-name buffer-file-truename)))
          (,@ body)         ,@body
          (when (and (not modified) (buffer-modified-p))           (when (and (not modified) (buffer-modified-p))
            (set-buffer-modified-p nil))))))           (set-buffer-modified-p nil)))))
   
 ;; Function that is added to the `change-functions' hook. Calls   ;; Function that is added to the `change-functions' hook. Calls 
 ;; `forth-update-properties' and keeps care of disabling undo information  ;; `forth-update-properties' and keeps care of disabling undo information
Line 1382  programmers who tend to fill code won't Line 1384  programmers who tend to fill code won't
       (progn        (progn
         (delete-other-windows)          (delete-other-windows)
         (split-window-vertically          (split-window-vertically
          (/ (* (screen-height) forth-percent-height) 100))           (/ (frame-height) 2))
         (other-window 1)          (other-window 1)
         (switch-to-buffer buffer)          (switch-to-buffer buffer)
         (goto-char (point-max))          (goto-char (point-max))
         (other-window 1))))          (other-window 1))))
   
 (defun forth-compile (command)  
   (interactive (list (setq forth-compile-command (read-string "Compile command: " forth-compile-command))))  
   (forth-split-1 "*compilation*")  
   (setq ctools-compile-command command)  
   (compile1 ctools-compile-command "No more errors"))  
   
 ;;; Forth menu  ;;; Forth menu
 ;;; Mikael Karlsson <qramika@eras70.ericsson.se>  ;;; Mikael Karlsson <qramika@eras70.ericsson.se>
   
Line 1613  of `forth-program-name').  Runs the hook Line 1609  of `forth-program-name').  Runs the hook
         (forth-end-of-paragraph)          (forth-end-of-paragraph)
         (skip-chars-backward  "\t\n ")          (skip-chars-backward  "\t\n ")
         (setq end (point))          (setq end (point))
         (if (re-search-backward "\n[ \t]*\n" nil t)          (if (null (re-search-backward "\n[ \t]*\n" nil t))
             (setq start (point))  
           (goto-char (point-min)))            (goto-char (point-min)))
         (skip-chars-forward  "\t\n ")          (skip-chars-forward  "\t\n ")
         (forth-send-region (point) end))))          (forth-send-region (point) end))))
Line 1652  With argument, position cursor at end of Line 1647  With argument, position cursor at end of
            (push-mark)             (push-mark)
            (goto-char (point-max)))))             (goto-char (point-max)))))
   
   (defun forth-send-region-and-go (start end)    (defun forth-send-region-and-go (my-start end)
     "Send the current region to the inferior Forth process.      "Send the current region to the inferior Forth process.
 Then switch to the process buffer."  Then switch to the process buffer."
     (interactive "r")      (interactive "r")
     (forth-send-region start end)      (forth-send-region my-start end)
     (forth-switch-to-interactive t))      (forth-switch-to-interactive t))
   
   (defcustom forth-source-modes '(forth-mode forth-block-mode)    (defcustom forth-source-modes '(forth-mode forth-block-mode)

Removed from v.1.71  
changed lines
  Added in v.1.76


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>