diff --git a/modules/config/default/+emacs-bindings.el b/modules/config/default/+emacs-bindings.el index 1ae8ed6fb..735826c25 100644 --- a/modules/config/default/+emacs-bindings.el +++ b/modules/config/default/+emacs-bindings.el @@ -299,7 +299,7 @@ ;;; v --- versioning (:prefix-map ("v" . "versioning") :desc "Git revert file" "R" #'vc-revert - :desc "Kill link to remote" "y" #'browse-at-remote-kill + :desc "Kill link to remote" "y" #'+vc/browse-at-remote-kill :desc "Kill link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage (:when (featurep! :ui vc-gutter) :desc "Git revert hunk" "r" #'git-gutter:revert-hunk @@ -327,7 +327,7 @@ :desc "Find issue" "i" #'forge-visit-issue :desc "Find pull request" "p" #'forge-visit-pullreq) (:prefix ("o" . "open in browser") - :desc "Browse file or region" "." #'browse-at-remote + :desc "Browse file or region" "." #'+vc/browse-at-remote :desc "Browse homepage" "h" #'+vc/browse-at-remote-homepage :desc "Browse remote" "r" #'forge-browse-remote :desc "Browse commit" "c" #'forge-browse-commit diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index a7a882cf8..0344ee23f 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -411,7 +411,7 @@ ;;; g --- git/version control (:prefix-map ("g" . "git") :desc "Revert file" "R" #'vc-revert - :desc "Copy link to remote" "y" #'browse-at-remote-kill + :desc "Copy link to remote" "y" #'+vc/browse-at-remote-kill :desc "Copy link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage (:when (featurep! :ui hydra) :desc "SMerge" "m" #'+vc/smerge-hydra/body) @@ -444,7 +444,7 @@ :desc "Find issue" "i" #'forge-visit-issue :desc "Find pull request" "p" #'forge-visit-pullreq) (:prefix ("o" . "open in browser") - :desc "Browse file or region" "o" #'browse-at-remote + :desc "Browse file or region" "o" #'+vc/browse-at-remote :desc "Browse homepage" "h" #'+vc/browse-at-remote-homepage :desc "Browse remote" "r" #'forge-browse-remote :desc "Browse commit" "c" #'forge-browse-commit diff --git a/modules/emacs/vc/autoload/vc.el b/modules/emacs/vc/autoload/vc.el index 44422c1a1..197955356 100644 --- a/modules/emacs/vc/autoload/vc.el +++ b/modules/emacs/vc/autoload/vc.el @@ -5,6 +5,29 @@ (cdr (browse-at-remote--get-url-from-remote (car url)))) (user-error "Can't find homepage for current project"))) +(defvar browse-at-remote-prefer-symbolic) +;;;###autoload +(defun +vc/browse-at-remote (&optional arg) + "Open URL to current file (and line if selection is active) in browser. +If prefix ARG, negate the default value of `browse-at-remote-prefer-symbolic'." + (interactive "P") + (let ((browse-at-remote-prefer-symbolic + (if arg + (not browse-at-remote-prefer-symbolic) + browse-at-remote-prefer-symbolic))) + (browse-at-remote))) + +;;;###autoload +(defun +vc/browse-at-remote-kill (&optional arg) + "Copy URL to current file (and line if selection is active) to clipboard. +If prefix ARG, negate the default value of `browse-at-remote-prefer-symbolic'." + (interactive "P") + (let ((browse-at-remote-prefer-symbolic + (if arg + (not browse-at-remote-prefer-symbolic) + browse-at-remote-prefer-symbolic))) + (browse-at-remote-kill))) + ;;;###autoload (defun +vc/browse-at-remote-homepage () "Open homepage for current project in browser." diff --git a/modules/emacs/vc/config.el b/modules/emacs/vc/config.el index a0a08fcdd..d5ef38dc9 100644 --- a/modules/emacs/vc/config.el +++ b/modules/emacs/vc/config.el @@ -100,7 +100,13 @@ otherwise in default state." (after! browse-at-remote + ;; It's more sensible that the user have more options. If they want line + ;; numbers, users can request them by making a selection first. Otherwise + ;; omitting them. (setq browse-at-remote-add-line-number-if-no-region-selected nil) + ;; Opt to produce permanent links with `browse-at-remote' by default, + ;; using commit hashes rather than branch names. + (setq browse-at-remote-prefer-symbolic nil) ;; HACK `browse-at-remote' produces urls with `nil' in them, when the repo is ;; detached. This creates broken links. I think it is more sensible to