From 8a278effe51c663092f0754585c7e56ace5059ba Mon Sep 17 00:00:00 2001 From: okamsn Date: Sat, 26 Nov 2022 00:19:25 -0500 Subject: [PATCH] gited: Initial support. These bindings are similar to Dired. - The commands `gited-hide-details-mode` and `gited-summary` are not autoloaded, so we use `declare-function`. - The command `gited-list-branches` was bound to `C-x g`. We bind it to `C-x C-b`. - Commands that open a new window are now prefixed by `g`, except for `gited-change-current-remote-rep` on `gR`. - Commands that don't do anything related to marks were moved out of the `*` prefix. - The commands for stashing were prefixed by `*s`. Since they don't operate on marks or marked rows, they were moved to `s`. - The commands for tags were moved from `*t` to `C-t`, similar to Dired's thumbnail commands. These commands also don't work on marked rows. - The command `gited-mark-branches-by-date` is bound to `%t` (for "time"?), as in the original map. There is no command for flagging by regexp, which would be on `%d`. --- evil-collection.el | 1 + modes/gited/evil-collection-gited.el | 157 +++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 modes/gited/evil-collection-gited.el diff --git a/evil-collection.el b/evil-collection.el index e2a6372..9643ce4 100644 --- a/evil-collection.el +++ b/evil-collection.el @@ -212,6 +212,7 @@ See `evil-collection-init' and `evil-collection--modes-with-delayed-setup'." geiser ggtags git-timemachine + gited gnus go-mode grep diff --git a/modes/gited/evil-collection-gited.el b/modes/gited/evil-collection-gited.el new file mode 100644 index 0000000..c68c48c --- /dev/null +++ b/modes/gited/evil-collection-gited.el @@ -0,0 +1,157 @@ +;;; evil-collection-gited.el --- Evil bindings for Gited -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Earl Hyatt + +;; Author: Earl Hyatt +;; Maintainer: Earl Hyatt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3") (evil "1.2") (gited "0.6")) +;; Keywords: evil, git, tools, vc + +;; This program 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 of the License, or +;; (at your option) any later version. + +;; This program 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. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Gited. + +;;; Code: +(require 'gited nil t) +(require 'evil-collection) +(declare-function gited-summary "gited") +(declare-function gited-hide-details-mode "gited") + +(defconst evil-collection-gited-maps '(gited-mode-map)) + +;;;###autoload +(defun evil-collection-gited-setup () + "Set up `evil' bindings for `gited'." + (evil-collection-set-readonly-bindings 'gited-mode-map) + (evil-collection-define-key 'normal 'gited-mode-map + "g?" 'gited-summary + "(" 'gited-hide-details-mode + "gr" 'gited-update + (kbd "C-c C-c") 'gited-commit + (kbd "C-c C-b") 'gited-list-branches + + ;; Movement + "j" 'gited-next-line + "k" 'gited-prev-line + (kbd "M-{") 'gited-prev-marked-branch + (kbd "M-}") 'gited-next-marked-branch + "G" 'gited-goto-last-branch + "gg" 'gited-goto-first-branch + "gj" 'gited-next-marked-branch + "gk" 'gited-prev-marked-branch + "gl" 'tabulated-list-next-column + "gh" 'tabulated-list-previous-column + "]]" 'gited-next-marked-branch + "[[" 'gited-prev-marked-branch + "<" 'gited-prev-marked-branch + ">" 'gited-next-marked-branch + " " 'gited-next-line + [?\S-\ ] 'gited-prev-line + [remap next-line] 'gited-next-line + [remap previous-line] 'gited-prev-line + "J" 'gited-goto-branch + + "gA" 'gited-move-to-end-of-author + "ga" 'gited-move-to-author + "gB" 'gited-move-to-end-of-branchname + "gb" 'gited-move-to-branchname + "gD" 'gited-move-to-end-of-date + "gd" 'gited-move-to-date + + ;; Operations on Things at Point + "=" 'gited-diff + "A" 'gited-add-patched-files + "a" 'gited-apply-patch + "B" 'gited-bisect + "C" 'gited-copy-branch + "c" 'gited-checkout-branch + "d" 'gited-flag-branch-deletion + "e" 'gited-extract-patches + "F" 'gited-pull ; Similar to Magit binding. Don't conflict with "f". + "gR" 'gited-change-current-remote-rep + + "gs" 'gited-status ; These "g"-prefixed operations open + "gL" 'gited-log ; new windows. + "gN" 'gited-log-last-n-commits ; + "gO" 'gited-origin ; Use "go" to visit branch source. + "gc" 'gited-show-commit ; + + "M" 'gited-merge-branch + "O" 'tabulated-list-sort + "o" 'tabulated-list-sort + "P" 'gited-push ; Only branches. + "p" 'gited-set-object-upstream ; Pushes branches and tags. + "R" 'gited-rename-branch + "r" 'gited-reset-branch + "s" nil ; Don't conflict with `tabulated-list-sort' on "S". + "ss" 'gited-stash + "sA" 'gited-stash-pop + "sa" 'gited-stash-apply + "sb" 'gited-stash-branch + "sD" 'gited-delete-all-stashes + "sd" 'gited-stash-drop + "Y" 'gited-copy-branchname-as-kill + + (kbd "RET") 'gited-visit-branch-sources + "go" 'gited-visit-branch-sources + + ;; Operations on Marked and Flagged Branches/Tags + "D" 'gited-do-delete + "K" 'gited-do-kill-lines + "T" 'gited-do-sync-with-trunk + "x" 'gited-do-flagged-delete + + ;; Marks + "*" nil + "*%" 'gited-mark-branches-regexp + "*m" 'gited-mark + "*u" 'gited-unmark + "*?" 'gited-unmark-all-branches + "*!" 'gited-unmark-all-marks + (kbd "* ") 'gited-unmark-backward + (kbd "* C-n") 'gited-next-marked-branch + (kbd "* C-p") 'gited-prev-marked-branch + "*t" 'gited-toggle-marks + "*l" 'gited-mark-local-tags + "*N" 'gited-number-marked + + "U" 'gited-unmark-all-marks + "m" 'gited-mark + "t" 'gited-toggle-marks + "~" 'gited-toggle-marks + "u" 'gited-unmark + (kbd "") 'gited-unmark-backward + + ;; Searching for marks + "%" nil + ;; "%d" No flag for deletion. + "%t" 'gited-mark-branches-by-date + "%c" 'gited-mark-branches-containing-commit + "%g" 'gited-mark-branches-containing-regexp + "%m" 'gited-mark-branches-regexp + "%M" 'gited-mark-merged-branches + "%U" 'gited-mark-unmerged-branches + + ;; Tags instead of thumbnails. Only usable when listing tags. Ideally, + ;; these would have a separate map that would be used when displaying tags. + (kbd "C-t a") 'gited-tag-add + (kbd "C-t d") 'gited-tag-delete + (kbd "C-t D") 'gited-remote-tag-delete + (kbd "C-t F") 'gited-fetch-remote-tags)) + +(provide 'evil-collection-gited) +;;; evil-collection-gited.el ends here