mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-26 09:51:31 -08:00
Fix mark-defun in fortran-mode
* lisp/progmodes/fortran.el (fortran-beginning-of-subprogram): Make mark-defun work (bug#33208).
This commit is contained in:
parent
7b9f6ee5e0
commit
05dfbd0667
1 changed files with 24 additions and 18 deletions
|
|
@ -1218,25 +1218,31 @@ Auto-indent does not happen if a numeric ARG is used."
|
|||
;; Note that unlike the latter, we don't have to worry about nested
|
||||
;; subprograms (?).
|
||||
;; FIXME push-mark?
|
||||
(defun fortran-beginning-of-subprogram ()
|
||||
"Move point to the beginning of the current Fortran subprogram."
|
||||
(defun fortran-beginning-of-subprogram (&optional arg)
|
||||
"Move point to the beginning of the current Fortran subprogram.
|
||||
If ARG is negative, go to the beginning of the next instead."
|
||||
(interactive)
|
||||
(let ((case-fold-search t))
|
||||
;; If called already at the start of subprogram, go to the previous.
|
||||
(beginning-of-line (if (bolp) 0 1))
|
||||
(save-match-data
|
||||
(or (looking-at fortran-start-prog-re)
|
||||
;; This leaves us at bob if before the first subprogram.
|
||||
(eq (fortran-previous-statement) 'first-statement)
|
||||
(if (or (catch 'ok
|
||||
(while (re-search-backward fortran-end-prog-re nil 'move)
|
||||
(if (fortran-check-end-prog-re) (throw 'ok t))))
|
||||
;; If the search failed, must be at bob.
|
||||
;; First code line is the start of the subprogram.
|
||||
;; FIXME use a more rigorous test, cf fortran-next-statement?
|
||||
;; Though that needs to handle continuations too.
|
||||
(not (looking-at "^\\([ \t]*[0-9]\\|[ \t]+[^!#]\\)")))
|
||||
(fortran-next-statement))))))
|
||||
(if (and arg
|
||||
(< arg 0))
|
||||
(progn
|
||||
(fortran-end-of-subprogram)
|
||||
(fortran-beginning-of-subprogram))
|
||||
(let ((case-fold-search t))
|
||||
;; If called already at the start of subprogram, go to the previous.
|
||||
(beginning-of-line (if (bolp) 0 1))
|
||||
(save-match-data
|
||||
(or (looking-at fortran-start-prog-re)
|
||||
;; This leaves us at bob if before the first subprogram.
|
||||
(eq (fortran-previous-statement) 'first-statement)
|
||||
(if (or (catch 'ok
|
||||
(while (re-search-backward fortran-end-prog-re nil 'move)
|
||||
(if (fortran-check-end-prog-re) (throw 'ok t))))
|
||||
;; If the search failed, must be at bob.
|
||||
;; First code line is the start of the subprogram.
|
||||
;; FIXME use a more rigorous test, cf fortran-next-statement?
|
||||
;; Though that needs to handle continuations too.
|
||||
(not (looking-at "^\\([ \t]*[0-9]\\|[ \t]+[^!#]\\)")))
|
||||
(fortran-next-statement)))))))
|
||||
|
||||
;; This is simpler than f-beginning-of-s because the end of a
|
||||
;; subprogram is never implicit.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue