Як згадувалося раніше, git-gutter - це розширення, призначене для показу інформації git безпосередньо у вашому файлі та роботи звідти, в той час як magit зосереджується на роботі на діфф.
Ця функція не планується найближчим часом для жолобів gitter ( https://github.com/syohex/emacs-git-gutter/isissue/91 )
Однак це щось таке, що Emacs lisp повинен бути дуже хорошим у витиранні (пройдіться через хунки в регіоні та поставити їх за раз). Спробувавши це, це було майже так, єдина проблема полягала в тому, що git-gutter починає фоновий процес після того, як ви поставите лунку, і не чекаєте, коли це закінчиться, тому мені довелося додати трохи хиткої магії, щоб вирішити це.
Наступна функція lisp emacs повинна робити те, що ви хочете. Ви можете прив’язати його до деяких клавіш.
(defun my-git-stage-region ()
(interactive)
(let ((git-gutter:ask-p nil)
(start (region-beginning))
(end (region-end)))
(save-excursion
(goto-char start)
(git-gutter:next-hunk 1)
(while (< (point) end)
(git-gutter:stage-hunk)
;; This is a hack to wait for git-gutter to finish
;; updating information (git-gutter kicks
;; of a process to update the diff information
;; and does not block)
(while (get-buffer (git-gutter:diff-process-buffer (git-gutter:base-file)))
(sit-for 0.05))
(git-gutter:next-hunk 1)))))