From f02879dd047b05d14af738f139016f42f0c0abcf Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 29 Oct 2020 15:01:04 -0400 Subject: [PATCH] Add ffap & bug-reference support to +lookup/file And disable bug-reference-mode by default. It produces too many false positives, particularly in web modes where color hexes in strings and comments are very common. Now that bug-reference support is built into +lookup/file (on gf), users can use that instead. --- modules/emacs/vc/config.el | 12 +++--- modules/tools/lookup/autoload/lookup.el | 53 ++++++++++++++++--------- modules/tools/lookup/config.el | 4 +- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/modules/emacs/vc/config.el b/modules/emacs/vc/config.el index b9dac3c95..f9854c55f 100644 --- a/modules/emacs/vc/config.el +++ b/modules/emacs/vc/config.el @@ -1,12 +1,10 @@ ;;; emacs/vc/config.el -*- lexical-binding: t; -*- -(when (fboundp 'bug-reference-mode) - (add-hook! '(text-mode-hook conf-mode-hook) #'bug-reference-mode) - (add-hook 'prog-mode-hook #'bug-reference-prog-mode) - (map! :map bug-reference-map - "RET" (cmds! (and (bound-and-true-p evil-mode) - (evil-normal-state-p)) - #'bug-reference-push-button))) +(map! :when (fboundp 'bug-reference-mode) + :map bug-reference-map + "RET" (cmds! (and (bound-and-true-p evil-mode) + (evil-normal-state-p)) + #'bug-reference-push-button)) (when IS-WINDOWS diff --git a/modules/tools/lookup/autoload/lookup.el b/modules/tools/lookup/autoload/lookup.el index 285b3304d..dc5b94843 100644 --- a/modules/tools/lookup/autoload/lookup.el +++ b/modules/tools/lookup/autoload/lookup.el @@ -240,14 +240,39 @@ neither is available. These require ripgrep to be installed." (defun +lookup-evil-goto-definition-backend-fn (_identifier) "Uses `evil-goto-definition' to conduct a text search for IDENTIFIER in the current buffer." - (and (fboundp 'evil-goto-definition) - (ignore-errors - (cl-destructuring-bind (beg . end) - (bounds-of-thing-at-point 'symbol) - (evil-goto-definition) - (let ((pt (point))) - (not (and (>= pt beg) - (< pt end)))))))) + (when (fboundp 'evil-goto-definition) + (ignore-errors + (cl-destructuring-bind (beg . end) + (bounds-of-thing-at-point 'symbol) + (evil-goto-definition) + (let ((pt (point))) + (not (and (>= pt beg) + (< pt end)))))))) + +(defun +lookup-ffap-backend-fn (_identifier) + "Uses `find-file-at-point' to read file at point." + (require 'ffap) + (when (ffap-guesser) + (find-file-at-point))) + +(defun +lookup-bug-reference-backend-fn (_identifier) + "Searches for a bug reference in user/repo#123 or #123 format and opens it in +the browser." + (require 'bug-reference) + (let ((bug-reference-url-format bug-reference-url-format) + (bug-reference-bug-regexp bug-reference-bug-regexp) + (bug-reference-mode (derived-mode-p 'text-mode 'conf-mode)) + (bug-reference-prog-mode (derived-mode-p 'prog-mode))) + (bug-reference--run-auto-setup) + (unwind-protect + (catch 'found + (bug-reference-fontify (line-beginning-position) (line-end-position)) + (dolist (o (overlays-at (point))) + ;; It should only be possible to have one URL overlay. + (when-let (url (overlay-get o 'bug-reference-url)) + (browse-url url) + (throw 'found t)))) + (bug-reference-unfontify (line-beginning-position) (line-end-position))))) ;; @@ -318,22 +343,14 @@ for the current mode/buffer (if any), then falls back to the backends in (defvar ffap-file-finder) ;;;###autoload -(defun +lookup/file (path) +(defun +lookup/file (&optional path) "Figure out PATH from whatever is at point and open it. Each function in `+lookup-file-functions' is tried until one changes the point or the current buffer. Otherwise, falls back on `find-file-at-point'." - (interactive - (progn - (require 'ffap) - (list - (or (ffap-guesser) - (ffap-read-file-or-url - (if ffap-url-regexp "Find file or URL: " "Find file: ") - (doom-thing-at-point-or-region)))))) - (require 'ffap) + (interactive) (cond ((and path buffer-file-name (file-equal-p path buffer-file-name) diff --git a/modules/tools/lookup/config.el b/modules/tools/lookup/config.el index ace43b855..5dc20b33f 100644 --- a/modules/tools/lookup/config.el +++ b/modules/tools/lookup/config.el @@ -97,7 +97,9 @@ If the argument is interactive (satisfies `commandp'), it is called with argument: the identifier at point. See `set-lookup-handlers!' about adding to this list.") -(defvar +lookup-file-functions () +(defvar +lookup-file-functions + '(+lookup-ffap-backend-fn + +lookup-bug-reference-backend-fn) "Function for `+lookup/file' to try, before restoring to `find-file-at-point'. Stops at the first function to return non-nil or change the current window/point.