changeset 27199:4a15e79c5fb0

(fortran-mode-map): Don't bind M-C-a, M-C-e, M-C-h, C-j, C-xnd, TAB. (fortran-mode): Set beginning-of-defun, end-of-defun. (fortran-column-ruler): Simplify. (fortran-mark-subprogram, fortran-narrow-to-subprogram): Deleted. (fortran-with-subprogram-narrowing): Likewise. (fortran-indent-subprogram): Call mark-defun. (fortran-check-for-matching-do): Change narrowing.
author Dave Love <fx@gnu.org>
date Wed, 05 Jan 2000 17:23:27 +0000
parents 9f2eee514355
children 37827755f5d3
files lisp/progmodes/fortran.el
diffstat 1 files changed, 89 insertions(+), 121 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/fortran.el	Wed Jan 05 17:17:07 2000 +0000
+++ b/lisp/progmodes/fortran.el	Wed Jan 05 17:23:27 2000 +0000
@@ -1,6 +1,6 @@
 ;;; fortran.el --- Fortran mode for GNU Emacs
 
-;; Copyright (c) 1986, 93, 94, 95, 97, 98, 1999 Free Software Foundation, Inc.
+;; Copyright (c) 1986, 93, 94, 95, 97-99, 2000 Free Software Foundation, Inc.
 
 ;; Author: Michael D. Prange <prange@erl.mit.edu>
 ;; Maintainer: Dave Love <fx@gnu.org>
@@ -393,90 +393,81 @@
    (list nil "^\\s-+\\(block\\s-*data\\)\\s-*$" 1))
   "Imenu generic expression for `imenu-default-create-index-function'.")
 
-(defvar fortran-mode-map ()
-  "Keymap used in Fortran mode.")
-(if fortran-mode-map
-    ()
-  (setq fortran-mode-map (make-sparse-keymap))
-  (define-key fortran-mode-map ";" 'fortran-abbrev-start)
-  (define-key fortran-mode-map "\C-c;" 'fortran-comment-region)
-  (define-key fortran-mode-map "\M-\C-a" 'fortran-beginning-of-subprogram)
-  (define-key fortran-mode-map "\M-\C-e" 'fortran-end-of-subprogram)
-  (define-key fortran-mode-map "\M-;" 'fortran-indent-comment)
-  (define-key fortran-mode-map "\M-\C-h" 'fortran-mark-subprogram)
-  (define-key fortran-mode-map "\M-\n" 'fortran-split-line)
-  (define-key fortran-mode-map "\n" 'fortran-indent-new-line)
-  (define-key fortran-mode-map "\M-\C-q" 'fortran-indent-subprogram)
-  (define-key fortran-mode-map "\C-c\C-w" 'fortran-window-create-momentarily)
-  (define-key fortran-mode-map "\C-c\C-r" 'fortran-column-ruler)
-  (define-key fortran-mode-map "\C-c\C-p" 'fortran-previous-statement)
-  (define-key fortran-mode-map "\C-c\C-n" 'fortran-next-statement)
-  (define-key fortran-mode-map "\C-c\C-d" 'fortran-join-line) ; like f90
-  (define-key fortran-mode-map "\M-^" 'fortran-join-line) ; subvert delete-indentation
-  (define-key fortran-mode-map "\C-xnd" 'fortran-narrow-to-subprogram)
-  ;(define-key fortran-mode-map "\t" 'fortran-indent-line)
-  (define-key fortran-mode-map "0" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "1" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "2" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "3" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "4" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "5" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "6" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "7" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "8" 'fortran-electric-line-number)
-  (define-key fortran-mode-map "9" 'fortran-electric-line-number)
+(defvar fortran-mode-map
+  (let ((fortran-mode-map (make-sparse-keymap)))
+    (define-key fortran-mode-map ";" 'fortran-abbrev-start)
+    (define-key fortran-mode-map "\C-c;" 'fortran-comment-region)
+    (define-key fortran-mode-map "\M-;" 'fortran-indent-comment)
+    (define-key fortran-mode-map "\M-\n" 'fortran-split-line)
+    (define-key fortran-mode-map "\M-\C-q" 'fortran-indent-subprogram)
+    (define-key fortran-mode-map "\C-c\C-w" 'fortran-window-create-momentarily)
+    (define-key fortran-mode-map "\C-c\C-r" 'fortran-column-ruler)
+    (define-key fortran-mode-map "\C-c\C-p" 'fortran-previous-statement)
+    (define-key fortran-mode-map "\C-c\C-n" 'fortran-next-statement)
+    (define-key fortran-mode-map "\C-c\C-d" 'fortran-join-line) ; like f90
+    (define-key fortran-mode-map "\M-^" 'fortran-join-line) ; subvert delete-indentation
+    (define-key fortran-mode-map "0" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "1" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "2" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "3" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "4" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "5" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "6" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "7" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "8" 'fortran-electric-line-number)
+    (define-key fortran-mode-map "9" 'fortran-electric-line-number)
 
-  ;; Menu
-  (unless (boundp 'fortran-mode-menu)
-    (easy-menu-define
-     fortran-mode-menu fortran-mode-map ""
-     `("Fortran"
-       ["Manual" (info "(emacs)Fortran")]
-       ,(customize-menu-create 'fortran)
-       ["Set" Custom-set t]
-       ["Save" Custom-save t]
-       ["Reset to Current" Custom-reset-current t]
-       ["Reset to Saved" Custom-reset-saved t]
-       ["Reset to Standard Settings" Custom-reset-standard t]
-       "----"
-       ["Toggle Auto-fill" fortran-auto-fill-mode :style toggle
-        :selected (eq auto-fill-function 'fortran-do-auto-fill)]
-       ["Toggle abbrev-mode" abbrev-mode :style toggle :selected abbrev-mode]
-       "----"
-       ["Comment-out Region" fortran-comment-region mark-active]
-       ["Uncomment-out region"
-        (fortran-comment-region (region-beginning) (region-end) 1)
-        mark-active]
-       ["Indent Region" indent-region mark-active]
-       ["Indent Subprogram" fortran-indent-subprogram t]
-       "----"
-       ["Beginning of Subprogram" fortran-beginning-of-subprogram t]
-       ["End of Subprogram" fortran-end-of-subprogram t]
-       ("Mark"
-        ["Subprogram" fortran-mark-subprogram t]
-        ["IF Block" fortran-mark-if t]
-        ["DO Block" fortran-mark-do t])
-       ["Narrow to Subprogram" fortran-narrow-to-subprogram t]
-       ["Widen" widen t]
-       "----"
-       ["Temporary column ruler" fortran-column-ruler t]
-       ["72-column window" fortran-window-create t]
-       ["Full Width Window"
-        (enlarge-window-horizontally (- (frame-width) (window-width)))
-        (< (window-width) (frame-width))]
-       ["Momentary 72-column window" fortran-window-create-momentarily t]
-       "----"
-       ["Break Line at Point" fortran-split-line t]
-       ["Join Line" fortran-join-line t]
-       ["Fill Statement/Comment" fill-paragraph  t]
-       "----"
-       ["Add imenu menu"
-        imenu-add-menubar-index (not (and (boundp 'imenu--index-alist)
-					  imenu--index-alist))]))))
+    ;; Menu
+    (unless (boundp 'fortran-mode-menu)
+      (easy-menu-define
+       fortran-mode-menu fortran-mode-map ""
+       `("Fortran"
+	 ["Manual" (info "(emacs)Fortran")]
+	 ,(customize-menu-create 'fortran)
+	 ["Set" Custom-set t]
+	 ["Save" Custom-save t]
+	 ["Reset to Current" Custom-reset-current t]
+	 ["Reset to Saved" Custom-reset-saved t]
+	 ["Reset to Standard Settings" Custom-reset-standard t]
+	 "----"
+	 ["Toggle Auto-fill" fortran-auto-fill-mode :style toggle
+	  :selected (eq auto-fill-function 'fortran-do-auto-fill)]
+	 ["Toggle abbrev-mode" abbrev-mode :style toggle :selected abbrev-mode]
+	 "----"
+	 ["Comment-out Region" fortran-comment-region mark-active]
+	 ["Uncomment-out region"
+	  (fortran-comment-region (region-beginning) (region-end) 1)
+	  mark-active]
+	 ["Indent Region" indent-region mark-active]
+	 ["Indent Subprogram" fortran-indent-subprogram t]
+	 "----"
+	 ["Beginning of Subprogram" fortran-beginning-of-subprogram t]
+	 ["End of Subprogram" fortran-end-of-subprogram t]
+	 ("Mark"
+	  ["Subprogram" mark-defun t]
+	  ["IF Block" fortran-mark-if t]
+	  ["DO Block" fortran-mark-do t])
+	 ["Narrow to Subprogram" narrow-to-defun t]
+	 ["Widen" widen t]
+	 "----"
+	 ["Temporary column ruler" fortran-column-ruler t]
+	 ["72-column window" fortran-window-create t]
+	 ["Full Width Window"
+	  (enlarge-window-horizontally (- (frame-width) (window-width)))
+	  (< (window-width) (frame-width))]
+	 ["Momentary 72-column window" fortran-window-create-momentarily t]
+	 "----"
+	 ["Break Line at Point" fortran-split-line t]
+	 ["Join Line" fortran-join-line t]
+	 ["Fill Statement/Comment" fill-paragraph  t]
+	 "----"
+	 ["Add imenu menu"
+	  imenu-add-menubar-index (not (and (boundp 'imenu--index-alist)
+					    imenu--index-alist))])))
+    fortran-mode-map)
+  "Keymap used in Fortran mode.")
 
-(defvar fortran-mode-abbrev-table nil)
-(if fortran-mode-abbrev-table
-    ()
+(defvar fortran-mode-abbrev-table
   (let ((ac abbrevs-changed))
     (define-abbrev-table 'fortran-mode-abbrev-table ())
     (define-abbrev fortran-mode-abbrev-table  ";au"  "automatic" nil)
@@ -537,7 +528,8 @@
     (define-abbrev fortran-mode-abbrev-table  ";vo"  "volatile" nil)
     (define-abbrev fortran-mode-abbrev-table  ";w"   "write" nil)
     (define-abbrev fortran-mode-abbrev-table  ";wh"  "where" nil)
-    (setq abbrevs-changed ac)))
+    (setq abbrevs-changed ac)
+    fortran-mode-abbrev-table))
 
 (eval-when-compile			; silence compiler
   (defvar imenu-case-fold-search)
@@ -676,6 +668,8 @@
          (let (fortran-blink-matching-if ; avoid blinking delay
                indent-region-function)
            (indent-region start end nil))))
+  (setq beginning-of-defun #'fortran-beginning-of-subprogram)
+  (setq end-of-defun #'fortran-end-of-subprogram)
   (run-hooks 'fortran-mode-hook))
 
 (defun fortran-comment-indent-function ()
@@ -793,7 +787,7 @@
      (beginning-of-line)
      (if (eq (window-start (selected-window))
 	     (window-point (selected-window)))
-	 (progn (forward-line) (point))
+	 (line-beginning-position 2)
        (point)))
    nil "Type SPC or any command to erase ruler."))
 
@@ -960,14 +954,6 @@
 	(goto-char (match-beginning 0))
 	(forward-line)))))
 
-(defun fortran-mark-subprogram ()
-  "Put mark at end of Fortran subprogram, point at beginning.
-The marks are pushed."
-  (interactive)
-  (fortran-end-of-subprogram)
-  (push-mark (point) nil t)
-  (fortran-beginning-of-subprogram))
-
 (defun fortran-previous-statement ()
   "Moves point to beginning of the previous Fortran statement.
 Returns `first-statement' if that statement is the first
@@ -1008,27 +994,6 @@
  		    (looking-at (concat "[ \t]*"  comment-start-skip)))))
     (if (not not-last-statement)
  	'last-statement)))
-
-(defun fortran-narrow-to-subprogram ()
-  "Make text outside the current subprogram invisible.
-The subprogram visible is the one that contains or follows point."
-  (interactive)
-  (save-excursion
-    (fortran-mark-subprogram)
-    (narrow-to-region (point) (mark))))
-
-(defmacro fortran-with-subprogram-narrowing (&rest forms)
-  "Execute FORMS with buffer temporarily narrowed to current subprogram.
-Doesn't push a mark."
-  `(save-restriction
-     (save-excursion
-       (narrow-to-region (progn
-			   (fortran-beginning-of-subprogram)
-			   (point))
-			 (progn
-			   (fortran-end-of-subprogram)
-			   (point))))
-     ,@forms))
 
 (defun fortran-blink-match (regex keyword find-begin)
   "From a line matching REGEX, blink matching KEYWORD statement line.
@@ -1286,7 +1251,7 @@
   "Properly indent the Fortran subprogram which contains point."
   (interactive)
   (save-excursion
-    (fortran-mark-subprogram)
+    (mark-defun)
     (message "Indenting subprogram...")
     (indent-region (point) (mark) nil))
   (message "Indenting subprogram...done."))
@@ -1506,12 +1471,15 @@
 					      (skip-chars-forward "0-9")
 					      (point))))
 	    (beginning-of-line)
-	    (fortran-with-subprogram-narrowing
-	     (and (re-search-backward
-		   (concat "\\(^[ \t0-9]*do[ \t]*0*" charnum "\\b\\)\\|"
-			   "\\(^[ \t]*0*" charnum "\\b\\)")
-		   nil t)
-		  (looking-at (concat "^[ \t0-9]*do[ \t]*0*" charnum)))))))))
+	    (save-restriction
+	      (save-excursion
+		(narrow-to-defun)
+		(and (re-search-backward
+		      (concat "\\(^[ \t0-9]*do[ \t]*0*" charnum "\\b\\)\\|"
+			      "\\(^[ \t]*0*" charnum "\\b\\)")
+		      nil t)
+		     (looking-at (concat "^[ \t0-9]*do[ \t]*0*"
+					 charnum))))))))))
 
 (defun fortran-find-comment-start-skip ()
   "Move to past `comment-start-skip' found on current line.