Function: diff-current-defun
diff-current-defun is a byte-compiled function defined in
diff-mode.el.gz.
Signature
(diff-current-defun)
Documentation
Find the name of function at point.
For use in add-log-current-defun-function.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/diff-mode.el.gz
(defun diff-current-defun ()
"Find the name of function at point.
For use in `add-log-current-defun-function'."
;; Kill change-log-default-name so it gets recomputed each time, since
;; each hunk may belong to another file which may belong to another
;; directory and hence have a different ChangeLog file.
(kill-local-variable 'change-log-default-name)
(save-excursion
(when (looking-at diff-hunk-header-re)
(forward-line 1)
(re-search-forward "^[^ ]" nil t))
(pcase-let ((`(,buf ,_line-offset ,pos ,src ,dst ,switched)
(ignore-errors ;Signals errors in place of prompting.
;; Use `noprompt' since this is used in which-function-mode
;; and such.
(diff-find-source-location nil nil 'noprompt))))
(when buf
(beginning-of-line)
(or (when (memq (char-after) '(?< ?-))
;; Cursor is pointing at removed text. This could be a removed
;; function, in which case, going to the source buffer will
;; not help since the function is now removed. Instead,
;; try to figure out the function name just from the
;; code-fragment.
(let ((old (if switched dst src)))
(with-temp-buffer
(insert (car old))
(funcall (buffer-local-value 'major-mode buf))
(goto-char (+ (point-min) (cdr old)))
(add-log-current-defun))))
(with-current-buffer buf
(goto-char (+ (car pos) (cdr src)))
(add-log-current-defun)))))))