branch: elpa/magit
commit 92f6d57a0a1378555b3e93976ed6ffd77696b990
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>
magit-status-show-untracked-files: New option
---
docs/magit.org | 4 +++-
docs/magit.texi | 4 +++-
lisp/magit-status.el | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/docs/magit.org b/docs/magit.org
index ec110420579..95a3a21e83e 100644
--- a/docs/magit.org
+++ b/docs/magit.org
@@ -2221,7 +2221,9 @@ By default the following functions are also members of
that hook:
Maybe insert a list or tree of untracked files.
- Do so depending on the value of ~status.showUntrackedFiles~.
+ The option ~magit-status-show-untracked-files~ (which see), in
+ cooperation with the Git variable ~status.showUntrackedFiles~,
+ control whether and how that is done.
If the first element of ~magit-buffer-diff-files~ is a directory, then
limit the list to files below that. The value of that variable can
diff --git a/docs/magit.texi b/docs/magit.texi
index af960f7dabe..31be872b7fd 100644
--- a/docs/magit.texi
+++ b/docs/magit.texi
@@ -2602,7 +2602,9 @@ While bisecting, insert section logging bisect progress.
@defun magit-insert-untracked-files
Maybe insert a list or tree of untracked files.
-Do so depending on the value of @code{status.showUntrackedFiles}.
+The option @code{magit-status-show-untracked-files} (which see), in
+cooperation with the Git variable @code{status.showUntrackedFiles},
+control whether and how that is done.
If the first element of @code{magit-buffer-diff-files} is a directory, then
limit the list to files below that. The value of that variable can
diff --git a/lisp/magit-status.el b/lisp/magit-status.el
index f4a8c5940a7..71e94ca6108 100644
--- a/lisp/magit-status.el
+++ b/lisp/magit-status.el
@@ -142,6 +142,58 @@ The functions which respect this option are
:group 'magit-status
:type 'boolean)
+(defcustom magit-status-show-untracked-files nil
+ "Whether and how to list untracked files in the status buffer.
+
+This controls the behavior of function `magit-insert-untracked-files'.
+If that function is removed from `magit-status-sections-hook', then
+untracked files are not shown, regardless of what this option says.
+
+The behavior can be controled using this option and/or the Git variable
+`status.showUntrackedFiles'. The following settings are used in order:
+
+1. The buffer-local value of this option.
+
+ This can be set in \".dir-locals-2.el\" like so:
+ ((magit-status-mode
+ (magit-status-show-untracked-files . \"no\")))
+
+2. The repository-local value of `status.showUntrackedFiles'.
+
+ This can be set using:
+ git config --local status.showUntrackedFiles normal
+
+3. The global value of this option.
+
+ This can be set using the Custom interface or `setq'.
+
+4. The global value of `status.showUntrackedFiles'.
+
+ This can be set using:
+ git config --global status.showUntrackedFiles all
+
+5. The default is \"normal\" and is used if all of the above places
+ are unspecified or, in the case of the Lisp values, nil.
+
+The valid non-nil values are:
+
+- \"no\" - Show no untracked files.
+
+- \"normal\" - Show top-level untracked files and directories containing
+ untracked files. The directories can be expanded to reveal the
+ contained untracked files.
+
+- \"all\" - Immediately show all individual untracked files. This is
+ potentially expensive and/or overwhelming, and should be avoided."
+ :package-version '(magit . "4.2.1")
+ :group 'magit-status
+ :type '(choice
+ (const :tag "Show no untracked files" "no")
+ (const :tag "Show directories containing untracked files" "normal")
+ (const :tag "Show individual untracked files" "all")
+ (const :tag "Use value of status.showUntrackedFiles" nil))
+ :safe (lambda (value) (member value '("no" "normal" "all" nil))))
+
(defcustom magit-status-margin
(list nil
(nth 1 magit-log-margin)
@@ -708,12 +760,19 @@ remote in alphabetic order."
(defun magit-insert-untracked-files ()
"Maybe insert a list or tree of untracked files.
-Do so depending on the value of `status.showUntrackedFiles'.
+The option `magit-status-show-untracked-files' (which see), in
+cooperation with the Git variable `status.showUntrackedFiles', control
+whether and how that is done.
If the first element of `magit-buffer-diff-files' is a directory, then
limit the list to files below that. The value of that variable can be
set using \"D -- DIRECTORY RET g\"."
- (let ((show (or (magit-get "status.showUntrackedFiles") "normal")))
+ (let ((show (or (and (local-variable-p 'magit-status-show-untracked-files)
+ magit-status-show-untracked-files)
+ (magit-get "--local" "status.showUntrackedFiles")
+ (default-value 'magit-status-show-untracked-files)
+ (magit-get "--global" "status.showUntrackedFiles")
+ "normal")))
(unless (equal show "no")
(let* ((all (equal show "all"))
(base (car magit-buffer-diff-files))