stgit.el: Add stgit-git-status
[stgit] / contrib / stgit.el
index 4d957c3..220e159 100644 (file)
@@ -9,6 +9,8 @@
 ;;
 ;; To start: `M-x stgit'
 
+(require 'git nil t)
+
 (defun stgit (dir)
   "Manage stgit patches"
   (interactive "DDirectory: \n")
@@ -149,6 +151,16 @@ Argument DIR is the repository path."
   (interactive)
   (bury-buffer))
 
+(defun stgit-git-status ()
+  "Show status using `git-status'"
+  (interactive)
+  (unless (fboundp 'git-status)
+    (error "stgit-git-status requires git-status"))
+  (let ((dir default-directory))
+    (save-selected-window
+      (pop-to-buffer nil)
+      (git-status dir))))
+
 (defvar stgit-mode-hook nil
   "Run after `stgit-mode' is setup.")
 
@@ -161,11 +173,13 @@ Argument DIR is the repository path."
   (mapc (lambda (arg) (define-key stgit-mode-map (car arg) (cdr arg)))
         '((" " .        stgit-mark)
           ("m" .        stgit-mark)
-          ("\d" .       stgit-unmark)
+          ("\d" .       stgit-unmark-up)
+          ("u" .        stgit-unmark-down)
           ("?" .        stgit-help)
           ("h" .        stgit-help)
           ("p" .        previous-line)
           ("n" .        next-line)
+          ("s" .        stgit-git-status)
           ("g" .        stgit-reload)
           ("r" .        stgit-refresh)
           ("\C-c\C-r" . stgit-rename)
@@ -246,7 +260,7 @@ Commands:
   "Run stg init"
   (interactive)
   (stgit-capture-output nil
-   (stgit-run "init"))
+    (stgit-run "init"))
   (stgit-reload))
 
 (defun stgit-mark ()
@@ -257,13 +271,19 @@ Commands:
     (stgit-reload))
   (next-line))
 
-(defun stgit-unmark ()
-  "Mark the patch on the previous line"
+(defun stgit-unmark-up ()
+  "Remove mark from the patch on the previous line"
   (interactive)
   (forward-line -1)
-  (let ((patch (stgit-patch-at-point)))
-    (stgit-remove-mark patch)
-    (stgit-reload)))
+  (stgit-remove-mark (stgit-patch-at-point))
+  (stgit-reload))
+
+(defun stgit-unmark-down ()
+  "Remove mark from the patch on the current line"
+  (interactive)
+  (stgit-remove-mark (stgit-patch-at-point))
+  (forward-line)
+  (stgit-reload))
 
 (defun stgit-rename (name)
   "Rename the patch under point"
@@ -280,7 +300,7 @@ Commands:
   "Run stg repair"
   (interactive)
   (stgit-capture-output nil
-   (stgit-run "repair"))
+    (stgit-run "repair"))
   (stgit-reload))
 
 (defun stgit-commit ()
@@ -322,7 +342,7 @@ With numeric prefix argument, pop that many patches."
   (let ((patch (stgit-patch-at-point))
         (applied (stgit-applied-at-point)))
     (stgit-capture-output nil
-       (stgit-run (if applied "pop" "push") patch))
+      (stgit-run (if applied "pop" "push") patch))
     (stgit-reload)))
 
 (defun stgit-goto ()
@@ -330,7 +350,7 @@ With numeric prefix argument, pop that many patches."
   (interactive)
   (let ((patch (stgit-patch-at-point)))
     (stgit-capture-output nil
-       (stgit-run "goto" patch))
+      (stgit-run "goto" patch))
     (stgit-reload)))
 
 (defun stgit-show ()
@@ -454,14 +474,14 @@ With prefix argument, run it with the --hard flag."
 With prefix argument, refresh the patch under point."
   (interactive "P")
   (let ((patchargs (if arg
-                      (let ((patches (stgit-patches-marked-or-at-point)))
-                        (cond ((null patches)
-                               (error "no patch to update"))
-                              ((> (length patches) 1)
-                               (error "too many patches selected"))
-                              (t
-                               (cons "-p" patches))))
-                    nil)))
+                       (let ((patches (stgit-patches-marked-or-at-point)))
+                         (cond ((null patches)
+                                (error "no patch to update"))
+                               ((> (length patches) 1)
+                                (error "too many patches selected"))
+                               (t
+                                (cons "-p" patches))))
+                     nil)))
     (stgit-capture-output nil
       (apply 'stgit-run "refresh" patchargs)))
   (stgit-reload))