From 54a428a6510a23fcc125b99a30aa0d5723a1e0c9 Mon Sep 17 00:00:00 2001
From: Jerome Reybert <jreybert@gmail.com>
Date: Mon, 6 Nov 2017 13:26:10 +0100
Subject: [PATCH] Auto-close magit buffer/window on clean state

Option is by default false

fix #132
---
 README.md        |  8 ++++++++
 doc/vimagit.txt  |  7 +++++++
 plugin/magit.vim | 13 +++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/README.md b/README.md
index bfb2577..6ba4ac8 100644
--- a/README.md
+++ b/README.md
@@ -479,6 +479,14 @@ or a hunk is staged/unstaged).
 Default value is 1.
 > let g:magit_refresh_gitgutter=[01]
 
+#### g:magit_auto_close
+
+When set to 1, magit buffer automatically closes after a commit if there is
+nothing else to stage (which means that both Staged and Unstaged sections are
+empty).
+Default value is 0.
+> let g:magit_auto_close=[01]
+
 ## Requirements
 
 This part must be refined, I don't see any minimal version for git and vim, but for sure there should be one.
diff --git a/doc/vimagit.txt b/doc/vimagit.txt
index f442774..985e2e8 100644
--- a/doc/vimagit.txt
+++ b/doc/vimagit.txt
@@ -503,6 +503,13 @@ or a hunk is staged/unstaged).
 Default value is 1.
 let g:magit_refresh_gitgutter=[01]
 
+                                                    *vimagit-g:magit_auto_close*
+When set to 1, magit buffer automatically closes after a commit if there is
+nothing else to stage (which means that both Staged and Unstaged sections are
+empty).
+Default value is 0.
+let g:magit_auto_close=[01]
+
 ===============================================================================
 6. FAQ                                                             *vimagit-FAQ*
 
diff --git a/plugin/magit.vim b/plugin/magit.vim
index 9a87240..a14b2d8 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -26,6 +26,7 @@ let g:magit_enabled                = get(g:, 'magit_enabled',
 let g:magit_show_help              = get(g:, 'magit_show_help',                 0)
 let g:magit_default_show_all_files = get(g:, 'magit_default_show_all_files',    1)
 let g:magit_default_fold_level     = get(g:, 'magit_default_fold_level',        1)
+let g:magit_auto_close             = get(g:, 'magit_auto_close',                0)
 let g:magit_auto_foldopen            = get(g:, 'magit_auto_foldopen',               1)
 let g:magit_default_sections       = get(g:, 'magit_default_sections',          ['info', 'global_help', 'commit', 'staged', 'unstaged'])
 let g:magit_discard_untracked_do_delete = get(g:, 'magit_discard_untracked_do_delete',        0)
@@ -374,6 +375,7 @@ function! s:mg_git_commit(mode) abort
 		let b:magit_current_commit_mode=''
 		let b:magit_current_commit_msg=[]
 	endif
+	let b:magit_just_commited = 1
 endfunction
 
 " s:mg_select_file_block: select the whole diff file, relative to the current
@@ -593,6 +595,15 @@ function! magit#update_buffer(...)
 
 	call b:state.update()
 
+	if ( g:magit_auto_close == 1 &&
+				\ b:magit_just_commited == 1 &&
+				\ empty(b:state.get_filenames('staged')) &&
+				\ empty(b:state.get_filenames('unstaged')) )
+		let b:magit_just_commited = 0
+		call magit#close_magit()
+		return
+	endif
+
 	for section in g:magit_default_sections
 		try
 			let func = s:mg_display_functions[section]
@@ -798,6 +809,8 @@ function! magit#show_magit(display, ...)
 
 	let b:magit_diff_context=3
 
+	let b:magit_just_commited = 0
+
 	call magit#utils#setbufnr(bufnr(buffer_name))
 	call magit#sign#init()
 
-- 
GitLab