emacs/vc: replace git-link w/ browse-at-remote
git-link is no longer maintained and browse-at-remote has support for more remotes. - Bind '<leader> g o h' to open homepage in browser - Rebind '<leader> g o o' to open file or region (omits the #L<N> suffix if no selection is active).
This commit is contained in:
parent
20a733a861
commit
bb702acfd0
4 changed files with 44 additions and 45 deletions
|
@ -121,6 +121,8 @@
|
||||||
;;; <leader> v --- versioning
|
;;; <leader> v --- versioning
|
||||||
(:prefix-map ("v" . "versioning")
|
(:prefix-map ("v" . "versioning")
|
||||||
:desc "Git revert file" "R" #'vc-revert
|
:desc "Git revert file" "R" #'vc-revert
|
||||||
|
:desc "Kill link to remote" "y" #'+vc/browse-at-remote-kill-file-or-region
|
||||||
|
:desc "Kill link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage
|
||||||
(:when (featurep! :ui vc-gutter)
|
(:when (featurep! :ui vc-gutter)
|
||||||
:desc "Git revert hunk" "r" #'git-gutter:revert-hunk
|
:desc "Git revert hunk" "r" #'git-gutter:revert-hunk
|
||||||
:desc "Git stage hunk" "s" #'git-gutter:stage-hunk
|
:desc "Git stage hunk" "s" #'git-gutter:stage-hunk
|
||||||
|
@ -145,7 +147,8 @@
|
||||||
:desc "Find issue" "i" #'forge-visit-issue
|
:desc "Find issue" "i" #'forge-visit-issue
|
||||||
:desc "Find pull request" "p" #'forge-visit-pullreq)
|
:desc "Find pull request" "p" #'forge-visit-pullreq)
|
||||||
(:prefix ("o" . "open in browser")
|
(:prefix ("o" . "open in browser")
|
||||||
:desc "Browse region or line" "." #'+vc/git-browse-region-or-line
|
:desc "Browse file or region" "." #'+vc/browse-at-remote-file-or-region
|
||||||
|
:desc "Browse homepage" "h" #'+vc/browse-at-remote-homepage
|
||||||
:desc "Browse remote" "r" #'forge-browse-remote
|
:desc "Browse remote" "r" #'forge-browse-remote
|
||||||
:desc "Browse commit" "c" #'forge-browse-commit
|
:desc "Browse commit" "c" #'forge-browse-commit
|
||||||
:desc "Browse an issue" "i" #'forge-browse-issue
|
:desc "Browse an issue" "i" #'forge-browse-issue
|
||||||
|
|
|
@ -396,8 +396,8 @@
|
||||||
;;; <leader> g --- git
|
;;; <leader> g --- git
|
||||||
(:prefix-map ("g" . "git")
|
(:prefix-map ("g" . "git")
|
||||||
:desc "Git revert file" "R" #'vc-revert
|
:desc "Git revert file" "R" #'vc-revert
|
||||||
:desc "Copy git link" "y" #'git-link
|
:desc "Copy link to remote" "y" #'+vc/browse-at-remote-kill-file-or-region
|
||||||
:desc "Copy git link to homepage" "Y" #'git-link-homepage
|
:desc "Copy link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage
|
||||||
(:when (featurep! :ui vc-gutter)
|
(:when (featurep! :ui vc-gutter)
|
||||||
:desc "Git revert hunk" "r" #'git-gutter:revert-hunk
|
:desc "Git revert hunk" "r" #'git-gutter:revert-hunk
|
||||||
:desc "Git stage hunk" "s" #'git-gutter:stage-hunk
|
:desc "Git stage hunk" "s" #'git-gutter:stage-hunk
|
||||||
|
@ -423,7 +423,8 @@
|
||||||
:desc "Find issue" "i" #'forge-visit-issue
|
:desc "Find issue" "i" #'forge-visit-issue
|
||||||
:desc "Find pull request" "p" #'forge-visit-pullreq)
|
:desc "Find pull request" "p" #'forge-visit-pullreq)
|
||||||
(:prefix ("o" . "open in browser")
|
(:prefix ("o" . "open in browser")
|
||||||
:desc "Browse region or line" "o" #'+vc/git-browse-region-or-line
|
:desc "Browse file or region" "o" #'+vc/browse-at-remote-file-or-region
|
||||||
|
:desc "Browse homepage" "h" #'+vc/browse-at-remote-homepage
|
||||||
:desc "Browse remote" "r" #'forge-browse-remote
|
:desc "Browse remote" "r" #'forge-browse-remote
|
||||||
:desc "Browse commit" "c" #'forge-browse-commit
|
:desc "Browse commit" "c" #'forge-browse-commit
|
||||||
:desc "Browse an issue" "i" #'forge-browse-issue
|
:desc "Browse an issue" "i" #'forge-browse-issue
|
||||||
|
|
|
@ -1,46 +1,41 @@
|
||||||
;;; emacs/vc/autoload/vc.el -*- lexical-binding: t; -*-
|
;;; emacs/vc/autoload/vc.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +vc-git-root-url ()
|
(defun +vc/browse-at-remote-file-or-region ()
|
||||||
"Return the root git repo URL for the current file."
|
"Open the current file at remote in your browser.
|
||||||
(require 'git-link)
|
If a selection is active, highlight them. Otherwise omits the #L<N> suffix in
|
||||||
(let* ((remote (git-link--select-remote))
|
the URL."
|
||||||
(remote-url (git-link--remote-url remote))
|
(interactive)
|
||||||
(remote-info (if remote-url (git-link--parse-remote remote-url))))
|
(if (or (use-region-p)
|
||||||
(if remote-info
|
(ignore-errors (evil-visual-state-p)))
|
||||||
(format "https://%s/%s" (car remote-info) (cadr remote-info))
|
(browse-at-remote)
|
||||||
(error "Remote `%s' is unknown or contains an unsupported URL" remote))))
|
(browse-url (browse-at-remote--file-url (buffer-file-name)))))
|
||||||
|
|
||||||
(defvar git-link-default-branch)
|
|
||||||
(defvar git-link-open-in-browser)
|
|
||||||
(defvar git-link-use-commit)
|
|
||||||
;;;###autoload
|
|
||||||
(defun +vc/git-browse-region-or-line (&optional arg)
|
|
||||||
"Open the website for the current line of this version controlled file.
|
|
||||||
Uses the currently checked out branch. If prefix ARG, then use 'master' branch.
|
|
||||||
If an url can't be ascertained, opens the repository's root."
|
|
||||||
(interactive "P")
|
|
||||||
(require 'git-link)
|
|
||||||
(let ((git-link-default-branch (if arg "master" git-link-default-branch))
|
|
||||||
current-prefix-arg ; don't propagate to `git-link'
|
|
||||||
git-link-use-commit)
|
|
||||||
(cl-destructuring-bind (beg end)
|
|
||||||
(if buffer-file-name (git-link--get-region))
|
|
||||||
(let ((git-link-open-in-browser t))
|
|
||||||
(git-link (git-link--select-remote) beg end)))))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +vc-update-header-line-a (revision)
|
(defun +vc/browse-at-remote-kill-file-or-region ()
|
||||||
"Show revision details in the header-line, instead of the minibuffer.
|
"Copy the current file's remote URL to your clipboard.
|
||||||
|
If a selection is active, highlight them. Otherwise omits the #L<N> suffix in
|
||||||
|
the URL."
|
||||||
|
(interactive)
|
||||||
|
(if (or (use-region-p)
|
||||||
|
(ignore-errors (evil-visual-state-p)))
|
||||||
|
(browse-at-remote-kill)
|
||||||
|
(kill-new (browse-at-remote--file-url (buffer-file-name)))))
|
||||||
|
|
||||||
Sometimes I forget `git-timemachine' is enabled in a buffer. Putting revision
|
|
||||||
info in the `header-line-format' is a good indication."
|
(defun +vc--remote-homepage ()
|
||||||
(let* ((date-relative (nth 3 revision))
|
(or (let ((url (browse-at-remote--remote-ref)))
|
||||||
(date-full (nth 4 revision))
|
(cdr (browse-at-remote--get-url-from-remote (car url))))
|
||||||
(author (if git-timemachine-show-author (concat (nth 6 revision) ": ") ""))
|
(user-error "Can't find homepage for current project")))
|
||||||
(sha-or-subject (if (eq git-timemachine-minibuffer-detail 'commit) (car revision) (nth 5 revision))))
|
|
||||||
(setq header-line-format
|
;;;###autoload
|
||||||
(format "%s%s [%s (%s)]"
|
(defun +vc/browse-at-remote-homepage ()
|
||||||
(propertize author 'face 'git-timemachine-minibuffer-author-face)
|
"Open homepage for current project in browser."
|
||||||
(propertize sha-or-subject 'face 'git-timemachine-minibuffer-detail-face)
|
(interactive)
|
||||||
date-full date-relative))))
|
(browse-url (+vc--remote-homepage)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +vc/browse-at-remote-kill-homepage ()
|
||||||
|
"Copy homepage URL of current project to clipboard."
|
||||||
|
(interactive)
|
||||||
|
(kill-new (+vc--remote-homepage)))
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
(package! vc-annotate :built-in t)
|
(package! vc-annotate :built-in t)
|
||||||
(package! smerge-mode :built-in t)
|
(package! smerge-mode :built-in t)
|
||||||
|
|
||||||
(package! git-link)
|
(package! browse-at-remote)
|
||||||
(package! git-timemachine)
|
(package! git-timemachine)
|
||||||
(package! gitconfig-mode)
|
(package! gitconfig-mode)
|
||||||
(package! gitignore-mode)
|
(package! gitignore-mode)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue