branch: elpa/evil commit 1379ab42c4090b2c677381b3911fec7ede47a4ad Author: Quentin Barbe <fo...@everteam.org> Commit: GitHub <nore...@github.com>
evil-find-file-at-point-with-line: Support format path(line,col). (#1789) Co-authored-by: Tom Dalziel <tom...@hotmail.com> --- evil-commands.el | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/evil-commands.el b/evil-commands.el index 82a9817169..0a340a1115 100644 --- a/evil-commands.el +++ b/evil-commands.el @@ -3647,22 +3647,32 @@ If FORCE is non-nil and MARKS is blank, all local marks except 0-9 are removed." (eval-when-compile (require 'ffap)) (evil-define-command evil-find-file-at-point-with-line () - "Open the file at point and go to position if present." + "Open the file at point and go to position if present. + Support positions in the following formats: path:line path(line) path:line:col and path(line,col)" (require 'ffap) (let ((fname (with-no-warnings (ffap-file-at-point)))) (unless fname (user-error "File does not exist.")) - (let* ((line-number-pattern ":\\([0-9]+\\)\\=" ) - (line-and-column-numbers-pattern ":\\([0-9]+\\):\\([0-9]+\\)\\=") - (get-number (lambda (pattern match-number) + (let* ((line-number-pattern ":\\([0-9]+\\)\\=" ) ; path:line format + (line-number-pattern-alt "\\=(\\([0-9]+\\))") ; path(line) format + (line-and-column-numbers-pattern ":\\([0-9]+\\):\\([0-9]+\\)\\=") ; path:line:col format + (line-and-column-numbers-pattern-alt "\\=(\\([0-9]+\\),\\([0-9]+\\))") ; file(line,col) format + (get-number (lambda (pattern match-number backward) (save-excursion (goto-char (cadr ffap-string-at-point-region)) - (and (re-search-backward pattern (line-beginning-position) t) + (and (if backward + (re-search-backward pattern (line-beginning-position) t) + (re-search-forward pattern (line-end-position) t)) (string-to-number (match-string match-number)))))) - (line-number (or (funcall get-number line-and-column-numbers-pattern 1) - (funcall get-number line-number-pattern 1))) - (column-number (funcall get-number line-and-column-numbers-pattern 2))) - (message "line: %s, column: %s" line-number column-number) + (line-number (or (funcall get-number line-and-column-numbers-pattern 1 t) + (funcall get-number line-and-column-numbers-pattern-alt 1 nil) + (funcall get-number line-number-pattern 1 t) + (funcall get-number line-number-pattern-alt 1 nil))) + (column-number (or (funcall get-number line-and-column-numbers-pattern 2 t) + (funcall get-number line-and-column-numbers-pattern-alt 2 nil)))) + (message "%s, %s" + (if line-number (format "line: %s" line-number) "no line") + (if column-number (format "column: %s" column-number) "no column")) (with-no-warnings (find-file-at-point fname)) (when line-number (goto-char (point-min))