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))

Reply via email to