Add support for forge

This commit is contained in:
James Nguyen 2021-11-07 13:31:41 -05:00 committed by James
parent 9e47d61bdf
commit 33461aa545
3 changed files with 102 additions and 11 deletions

View File

@ -165,6 +165,7 @@ This will bind additional find-* type commands, e.g. usages, assignments, etc.."
finder
flycheck
flymake
forge
free-keys
geiser
ggtags

View File

@ -0,0 +1,101 @@
;;; evil-collection-forge.el --- Evil-based key bindings for forge
;; Copyright (C) 2021 James Nguyen
;; Author: James Nguyen <james@jojojames.com>
;; Maintainer: James Nguyen <james@jojojames.com>
;; Package-Requires: ((emacs "25.1") (evil "1.2.3"))
;; Homepage: https://github.com/emacs-evil/evil-collection
;; Version: 0.4.1
;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published
;; by the Free Software Foundation; either version 3, or (at your
;; option) any later version.
;;
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; For a full copy of the GNU General Public License
;; see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; This library configures Magit and Evil to play well with each
;; other. For some background see:
;; https://github.com/emacs-evil/evil-collection/issues/543.
;;; Code:
(require 'evil-collection)
(require 'forge nil t)
(require 'transient nil t)
(defcustom evil-collection-forge-use-y-for-yank t
"View `evil-collection-magit-state' for more information."
:group 'magit
:type 'boolean)
(defcustom evil-collection-forge-state
(if evil-collection-forge-use-y-for-yank 'normal 'motion)
"State to use for forge."
:group 'magit
:type 'symbol)
;;;###autoload
(defun evil-collection-forge-setup ()
"Set up `evil' bindings for `magit'."
(let ((states (if evil-collection-forge-use-y-for-yank
`(,evil-collection-forge-state visual)
`(,evil-collection-forge-state))))
(dolist (state states)
(evil-collection-define-key state 'magit-mode-map "@" 'forge-dispatch)
(evil-collection-define-key
state 'magit-commit-section-map
[remap magit-browse-thing] 'forge-browse-dwim)
(evil-collection-define-key
state 'magit-remote-section-map
[remap magit-browse-thing] 'forge-browse-remote)
(evil-collection-define-key
state 'magit-branch-section-map
[remap magit-browse-thing] 'forge-browse-branch)
(evil-collection-define-key
state 'magit-commit-section-map (kbd "C-c C-v") 'forge-visit-topic)
(evil-collection-define-key
state 'magit-branch-section-map (kbd "C-c C-v") 'forge-visit-topic)))
;; https://github.com/magit/forge/blob/master/lisp/forge.el
(transient-append-suffix 'magit-dispatch "!"
'("@" "Forge" forge-dispatch)) ;; N -> @
(transient-append-suffix 'magit-fetch "m"
'("n" "forge topics" forge-pull))
(transient-append-suffix 'magit-fetch "n"
'("N" "forge notifications" forge-pull-notifications))
(transient-append-suffix 'magit-pull "m"
'("n" "forge topics" forge-pull))
(transient-append-suffix 'magit-pull "n"
'("N" "forge notifications" forge-pull-notifications))
(transient-append-suffix 'magit-branch "w"
'("n" "pull-request" forge-checkout-pullreq))
(transient-append-suffix 'magit-branch "W"
'("N" "from pull-request" forge-branch-pullreq))
(transient-append-suffix 'magit-worktree "c"
'("n" "pull-request worktree" forge-checkout-worktree))
(transient-append-suffix 'magit-status-jump "w"
'("Np" "pull-requests" forge-jump-to-pullreqs))
(transient-append-suffix 'magit-status-jump "Np"
'("Ni" "issues" forge-jump-to-issues))
(transient-append-suffix 'magit-merge "a"
'(7 "M" "Merge using API" forge-merge)))
;;; evil-collection-forge.el ends soon
(provide 'evil-collection-forge)
;; Local Variables:
;; End:
;;; evil-collection-forge.el ends here

View File

@ -294,7 +294,6 @@ When this option is enabled, the stash popup is available on \"Z\"."
(,states magit-mode-map "'" magit-submodule "o")
(,states magit-mode-map "\"" magit-subtree "O")
(,states magit-mode-map "=" magit-diff-less-context "-")
(,states magit-mode-map "@" forge-dispatch)
(,states magit-mode-map "j" evil-next-line)
(,states magit-mode-map "k" evil-previous-line)
(,states magit-mode-map "gg" evil-goto-first-line)
@ -600,16 +599,6 @@ evil-collection-magit affects.")
(unless evil-collection-magit-popup-keys-changed
(dolist (change evil-collection-magit-popup-changes)
(apply #'evil-collection-magit-change-popup-key change))
(with-eval-after-load 'forge
;; When `forge' is loaded, it maps `forge-dispatch' to ' key which is
;; set for `magit-submodule', wiping it so we add it back after `forge'
;; loads.
(transient-append-suffix 'magit-dispatch "M"
'("'" "Submodule" magit-submodule))
;; Clear `forge' key and re-add back in as "@".
(transient-remove-suffix 'magit-dispatch 'forge-dispatch)
(transient-append-suffix 'magit-dispatch "!"
'("@" "Forge" forge-dispatch)))
(setq evil-collection-magit-popup-keys-changed t)))
(defun evil-collection-magit-revert-popups ()