1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

(f90-previous-block, f90-next-block): New names (and slightly changed

behaviour) for the functions f90-previous-block-start, f90-next-block-end.
(f90-beginning-of-subprogram, f90-end-of-subprogram): Simplify.
This commit is contained in:
Glenn Morris 2002-05-26 19:58:31 +00:00
parent 608d30f7be
commit 76bccf35b4
2 changed files with 43 additions and 42 deletions

View file

@ -1,3 +1,10 @@
2002-05-26 Glenn Morris <gmorris@ast.cam.ac.uk>
* progmodes/f90.el (f90-previous-block, f90-next-block): New names,
and slightly changed behaviour, for `f90-previous-block-start' and
`f90-next-block-end'.
(f90-beginning-of-subprogram, f90-end-of-subprogram): Simplify.
2002-05-26 Simon Josefsson <jas@extundo.com>
* fringe.el (set-fringe-mode): Work when updating

View file

@ -433,8 +433,8 @@ do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"
(define-key map "\r" 'newline)
(define-key map "\C-c\r" 'f90-break-line)
;;; (define-key map [M-return] 'f90-break-line)
(define-key map "\C-c\C-a" 'f90-previous-block-start)
(define-key map "\C-c\C-e" 'f90-next-block-end)
(define-key map "\C-c\C-a" 'f90-previous-block)
(define-key map "\C-c\C-e" 'f90-next-block)
(define-key map "\C-c\C-d" 'f90-join-lines)
(define-key map "\C-c\C-f" 'f90-fill-region)
(define-key map "\C-c\C-p" 'f90-previous-statement)
@ -1189,15 +1189,12 @@ Return nil if no later statement is found."
not-last-statement))
(defun f90-beginning-of-subprogram ()
"Move point to the beginning of subprogram.
"Move point to the beginning of the current subprogram.
Return (TYPE NAME), or nil if not found."
(interactive)
(let ((count 1) (case-fold-search t) matching-beg)
(beginning-of-line)
(skip-chars-forward " \t0-9")
(if (setq matching-beg (f90-looking-at-program-block-start))
(setq count (1- count)))
(while (and (not (zerop count))
(while (and (> count 0)
(re-search-backward f90-program-block-re nil 'move))
(beginning-of-line)
(skip-chars-forward " \t0-9")
@ -1212,16 +1209,12 @@ Return (TYPE NAME), or nil if not found."
nil)))
(defun f90-end-of-subprogram ()
"Move point to the end of subprogram.
"Move point to the end of the current subprogram.
Return (TYPE NAME), or nil if not found."
(interactive)
(let ((count 1) (case-fold-search t) matching-end)
(beginning-of-line)
(skip-chars-forward " \t0-9")
(if (setq matching-end (f90-looking-at-program-block-end))
(setq count (1- count)))
(end-of-line)
(while (and (not (zerop count))
(while (and (> count 0)
(re-search-forward f90-program-block-re nil 'move))
(beginning-of-line)
(skip-chars-forward " \t0-9")
@ -1285,7 +1278,7 @@ and completes outermost block if necessary."
(error "End label `%s' does not match start label `%s'"
end-label start-label)))))
(end-of-line))
(if (> count 0) (error "Unterminated block"))
(if (> count 0) (error "Missing block end"))
;; Check outermost block.
(if (interactive-p)
(save-excursion
@ -1340,39 +1333,40 @@ Does not check the outermost block, because it may be incomplete."
start-label end-label))))))
(if (> count 0) (error "Missing block start"))))
(defun f90-next-block-end (&optional num)
"Move point forward to the next block end.
With optional argument NUM, go forward that many block ends.
If NUM is negative, go backward to the start of a block."
(defun f90-next-block (&optional num)
"Move point forward to the next end or start of a code block.
With optional argument NUM, go forward that many blocks.
If NUM is negative, go backwards.
A block is a subroutine, if-endif, etc."
(interactive "p")
(if (and num (< num 0)) (f90-previous-block-start (- num)))
(let ((count (or num 1))
(end-re (concat "end[ \t]*" f90-blocks-re)))
(while (and (> count 0) (re-search-forward end-re nil 'move))
(let ((case-fold-search t)
(count (if num (abs num) 1)))
(while (and (> count 0)
(if (> num 0) (re-search-forward f90-blocks-re nil 'move)
(re-search-backward f90-blocks-re nil 'move)))
(beginning-of-line)
(skip-chars-forward " \t0-9")
(or (f90-in-string) (f90-in-comment)
(setq count (1- count)))
(end-of-line))))
(cond ((or (f90-in-string) (f90-in-comment)))
((or
(looking-at "end[ \t]*")
(f90-looking-at-do)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
(f90-looking-at-program-block-start)
(f90-looking-at-if-then)
(f90-looking-at-where-or-forall))
(setq count (1- count))))
(if (> num 0) (end-of-line)
(beginning-of-line)))))
(defun f90-previous-block-start (&optional num)
"Move point backward to the previous block start.
With optional argument NUM, go backward that many block starts.
If NUM is negative, go forward to the end of a block."
(defun f90-previous-block (&optional num)
"Move point backward to the previous end or start of a code block.
With optional argument NUM, go backward that many blocks.
If NUM is negative, go forwards.
A block is a subroutine, if-endif, etc."
(interactive "p")
(if (and num (< num 0)) (f90-next-block-end (- num)))
(let ((count (or num 1)))
(while (and (> count 0) (re-search-backward f90-blocks-re nil 'move))
(beginning-of-line)
(skip-chars-forward " \t0-9")
(or (f90-in-string) (f90-in-comment)
(and (or (f90-looking-at-do)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
(f90-looking-at-program-block-start)
(f90-looking-at-if-then)
(f90-looking-at-where-or-forall))
(setq count (1- count)))))))
(f90-next-block (- (or num 1))))
(defvar f90-mark-subprogram-overlay nil