Mercurial > emacs
changeset 45526:fcfb7bc58212
(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.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sun, 26 May 2002 19:54:22 +0000 |
parents | b7e5e5b2e920 |
children | 51cb1913e231 |
files | lisp/progmodes/f90.el |
diffstat | 1 files changed, 36 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/progmodes/f90.el Sun May 26 09:50:39 2002 +0000 +++ b/lisp/progmodes/f90.el Sun May 26 19:54:22 2002 +0000 @@ -433,8 +433,8 @@ (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 @@ 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 @@ 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 @@ (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 @@ 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