Visiting URLs and issues with counsel-find-file15 Feb 2016
Many experienced Emacs users are aware of
Find FILENAME, guessing a default from text around point. If
ffap-url-regexpis not nil, the FILENAME may also be an URL.
It's a great way to open an link, if you plan things in advance. But for me it was usually C-x C-f (annoyed grunt) C-g M-x ffap RET.
Now, thanks to counsel-find-file, it's C-x C-f (anticipated annoyance, followed by a sigh of relief) M-n.
With Ivy completion, M-n calls
which tries to
predict the history element in case you've reached history's edge. The prediction usually simply inserts thing-at-point into the minibuffer. My favorite applications of this are:
- C-s M-n -
swiperthing-at-point, to get the occurrences of the current symbol in the current file.
- C-c j M-n -
counsel-git-grepthing-at-point, to get the mentions within the current project.
- C-c g M-n -
counsel-gitthing-at-point to open a file to which the current symbol links.
One thing I've recently added is the
\_<...\_> wrapper for when
major-mode derives from
prog-mode. Since the
\_< regex matches
the symbol start, and
\_> matches the symbol end, there's no chance
of getting partial matches. You can call
undo or press
M-n again in case the symbol bounds aren't useful.
Finally, C-x C-f M-n can be used to open URLs. Recently,
I've added functionality to
counsel-find-file that allows me to also
visit Github issues by simply pointing at the plain issue number,
#123 in either a version-controlled file or in a Magit buffer.
The command will query:
$ git remote get-url origin
and fill in all the details. So I no longer bother with
bug-reference-mode - now it's all
It's also possible to make it work for places other than Github, for instance this code (already included in counsel) makes it work for the Emacs Git repository:
(defun counsel-emacs-url-p () "Return a Debbugs issue URL at point." (when (and (looking-at "#[0-9]+") (or (eq (vc-backend (buffer-file-name)) 'Git) (memq major-mode '(magit-commit-mode)))) (let ((url (match-string-no-properties 0)) (origin (shell-command-to-string "git remote get-url origin"))) (when (string-match "git.sv.gnu.org:/srv/git/emacs.git" origin) (format "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s" (substring url 1)))))) (add-to-list 'ivy-ffap-url-functions 'counsel-emacs-url-p)