Posting own answer, it works but it has some limitations.
This is a wrapper for vc-root-diff which opens a fillscreen buffer, and jumps to the current file then the line/column (using search).
Ideally it would position the cursor using the diff line ranges, as long as you're on a unique within the file.
;; Override pop-up-windows, (defun vc-root-diff-fullscreen-and-jump-to-point () " Open a diff of the repository in the current frame, jumping to the file, then line if possible. " (interactive) (let ( (pop-up-windows nil) (current-filename (buffer-file-name)) ;; TODO, parse the diff chunks instead of searching for plain text. ;; not urgent. (current-line (buffer-substring-no-properties (line-beginning-position) (line-end-position))) ;; Chars to move backwards (so we keep the same relative point). (point-offset (- (save-excursion (end-of-line) (point)) (point))) ) (when (vc-root-diff nil) ;; It's possible we don't have a file. (when current-filename ;; Go to the file in the diff which we were previously viewing. (let ( (current-filename-rel (file-relative-name current-filename default-directory) ) ) (when (search-forward-regexp (concat ;; Prefix '+++ '. "^\\++[[:space:]]+" ;; Optional 'b/'. "\\(\\|b/\\)" (regexp-quote current-filename-rel) ;; Optional ' (some text)' ;; Subversion quirk. "\\(\\|[[:space:]]+.*\\)" "$" ) nil t 1 ) ;; Now search for the current line. (when (search-forward-regexp (concat ;; Space or '+' line prefix. "^\\([[:space:]]\\|\\+\\)" (regexp-quote current-line) "$" ) nil t 1 ) (backward-char point-offset) ) ) ) ) ) ) )