git/list[1] front-page[2] threads[3] people[4] search[5] about
 

git emacs mode patch

From
GMGábor Melis <mega@retes.hu>
Date
Mar 15, 2007, 13:03 UTC
Message-ID
<200703151403.56552.mega@retes.hu>

The attached patch makes it possible to toggle show/hide of files with up-to-date and unknown statuses with M-d and M-u.

Cheers, Gábor Melis

Please CC me, I'm not on the list.
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index db87a37..2f993de 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el
@@ -97,6 +97,16 @@ if there is already one that displays the same directory."
   :group 'git
   :type 'string)
 
+(defcustom git-hide-up-to-date t
+  "Hide files with up-to-date status by default."
+  :group 'git
+  :type 'boolean)
+
+(defcustom git-hide-unknown t
+  "Hide files with unknown status by default."
+  :group 'git
+  :type 'boolean)
+
 
 (defface git-status-face
   '((((class color) (background light)) (:foreground "purple")))
@@ -428,6 +438,7 @@ and returns the process output as a string."
     (?A 'added)
     (?D 'deleted)
     (?U 'unmerged)
+    (?H 'uptodate)
     (t nil)))
 
 (defun git-status-code-as-string (code)
@@ -1017,15 +1028,18 @@ and returns the process output as a string."
       (with-temp-buffer
         (git-run-command t nil "diff-index" "-z" "-M" "HEAD")
         (git-parse-status status)))
+    (unless (member 'up-to-date hidden-statuses)
       (with-temp-buffer
-        (git-run-command t nil "ls-files" "-z" "-u")
-        (git-parse-ls-unmerged status))
+        (git-run-command t nil "ls-files" "-z" "-t")
+        (git-parse-ls-files status 'unknown)))
+    (unless (member 'unknown hidden-statuses)
       (when (file-readable-p ".git/info/exclude")
         (with-temp-buffer
           (git-run-command t nil "ls-files" "-z" "-t" "-o"
                            "--exclude-from=.git/info/exclude"
-                           (concat "--exclude-per-directory=" git-per-dir-ignore-file))
-          (git-parse-ls-files status 'unknown)))
+                           (concat "--exclude-per-directory="
+                                   git-per-dir-ignore-file))
+          (git-parse-ls-files status 'unknown))))
     (git-refresh-files)
     (git-refresh-ewoc-hf status)
     ; move point to the current file name if any
@@ -1080,6 +1094,8 @@ and returns the process output as a string."
     (define-key map "U"   'git-revert-file)
     (define-key map "v"   'git-view-file)
     (define-key map "x"   'git-remove-handled)
+    (define-key map "\M-d" 'git-toggle-up-to-date)
+    (define-key map "\M-u" 'git-toggle-unknown)
     (define-key map "\C-?" 'git-unmark-file-up)
     (define-key map "\M-\C-?" 'git-unmark-all)
     ; the diff submap
@@ -1093,6 +1109,20 @@ and returns the process output as a string."
     (define-key diff-map "o" 'git-diff-file-other)
     (setq git-status-mode-map map)))
 
+(defun git-toggle-up-to-date ()
+  (interactive)
+  (if (member 'up-to-date hidden-statuses)
+      (setq hidden-statuses (remove 'up-to-date hidden-statuses))
+    (push 'up-to-date hidden-statuses))
+  (git-refresh-status))
+
+(defun git-toggle-unknown ()
+  (interactive)
+  (if (member 'unknown hidden-statuses)
+      (setq hidden-statuses (remove 'unknown hidden-statuses))
+    (push 'unknown hidden-statuses))
+  (git-refresh-status))
+
 ;; git mode should only run in the *git status* buffer
 (put 'git-status-mode 'mode-class 'special)
 
@@ -1112,6 +1142,11 @@ Commands:
   (let ((status (ewoc-create 'git-fileinfo-prettyprint "" "")))
     (set (make-local-variable 'git-status) status))
   (set (make-local-variable 'list-buffers-directory) default-directory)
+  (set (make-local-variable 'hidden-statuses) ())
+  (when git-hide-up-to-date
+    (push 'up-to-date hidden-statuses))
+  (when git-hide-unknown
+    (push 'unknown hidden-statuses))
   (run-hooks 'git-status-mode-hook)))
 
 (defun git-find-status-buffer (dir)
Next: Alexandre Julliard
Message 1 of 4 in “git emacs mode patch”
  1. Gábor MelisMar 15, 2007
  2. Alexandre JulliardMar 17, 2007
  3. Gábor MelisMar 25, 2007
  4. Alexandre JulliardMar 26, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.