Function: python-nav--beginning-of-defun
python-nav--beginning-of-defun is a byte-compiled function defined in
python.el.gz.
Signature
(python-nav--beginning-of-defun &optional ARG)
Documentation
Internal implementation of python-nav-beginning-of-defun.
With positive ARG search backwards, else search forwards.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/python.el.gz
(defun python-nav--beginning-of-defun (&optional arg)
"Internal implementation of `python-nav-beginning-of-defun'.
With positive ARG search backwards, else search forwards."
(when (or (null arg) (= arg 0)) (setq arg 1))
(let* ((re-search-fn (if (> arg 0)
#'re-search-backward
#'re-search-forward))
(line-beg-pos (line-beginning-position))
(line-content-start (+ line-beg-pos (current-indentation)))
(pos (point-marker))
(body-indentation
(and (> arg 0)
(save-excursion
(while (and
(not (python-info-looking-at-beginning-of-defun))
(python-nav-backward-block)))
(or (and (python-info-looking-at-beginning-of-defun)
(+ (current-indentation) python-indent-offset))
0))))
(found
(progn
(when (and (python-info-looking-at-beginning-of-defun)
(or (< arg 0)
;; If looking at beginning of defun, and if
;; pos is > line-content-start, ensure a
;; backward re search match this defun by
;; going to end of line before calling
;; re-search-fn bug#40563
(and (> arg 0) (> pos line-content-start))))
(end-of-line 1))
(while (and (funcall re-search-fn
python-nav-beginning-of-defun-regexp nil t)
(or (python-syntax-context-type)
;; Handle nested defuns when moving
;; backwards by checking indentation.
(and (> arg 0)
(not (= (current-indentation) 0))
(>= (current-indentation) body-indentation)))))
(and (python-info-looking-at-beginning-of-defun)
(or (not (= (line-number-at-pos pos)
(line-number-at-pos)))
(and (>= (point) line-beg-pos)
(<= (point) line-content-start)
(> pos line-content-start)))))))
(if found
(or (beginning-of-line 1) t)
(and (goto-char pos) nil))))