From ad95ede203d780cbf643ce5d2f3ce038b7d7b66a Mon Sep 17 00:00:00 2001
From: Jerome Reybert <jreybert@gmail.com>
Date: Mon, 7 Dec 2015 21:59:15 +0100
Subject: [PATCH] plugin/magit.vim: dirty WIP for new display (horizontal
 lines)

---
 plugin/magit.vim | 37 +++++++++++++++++++++++++++++--------
 syntax/magit.vim | 12 +++++++++++-
 2 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/plugin/magit.vim b/plugin/magit.vim
index 58322aa..d365850 100644
--- a/plugin/magit.vim
+++ b/plugin/magit.vim
@@ -115,10 +115,15 @@ endfunction
 function! s:mg_get_info()
 	silent put =''
 	silent put =g:magit_sections.info
-	silent put =magit#utils#underline(g:magit_sections.info)
 	silent put =''
-	let branch=magit#utils#system("git rev-parse --abbrev-ref HEAD")
-	let commit=magit#utils#system("git show -s --oneline")
+	let linenum = line('.')
+	let bufnr = magit#utils#bufnr()
+	execute printf(
+				\ 'sign place %d line=%d name=GitaPseudoSeparatorSign buffer=%d',
+				\ linenum, linenum, bufnr,
+				\)
+	let branch=magit#git#current_branch()
+	let commit=magit#git#last_commit()
 	silent put =g:magit_section_info.cur_repo    . ': ' . magit#git#top_dir()
 	silent put =g:magit_section_info.cur_branch  . ':     ' . branch
 	silent put =g:magit_section_info.cur_commit  . ':        ' . commit
@@ -139,6 +144,7 @@ endfunction
 " directory)
 function! s:mg_display_files(mode, curdir, depth)
 
+	let bufnr = magit#utils#bufnr()
 	" FIXME: ouch, must store subdirs in more efficient way
 	for filename in b:state.get_filenames(a:mode)
 		let file = b:state.get_file(a:mode, filename, 0)
@@ -182,9 +188,14 @@ endfunction
 function! s:mg_get_staged_section(mode)
 	put =''
 	put =g:magit_sections[a:mode]
-	call <SID>mg_section_help(a:mode)
-	put =magit#utils#underline(g:magit_sections[a:mode])
 	put =''
+	let linenum = line('.')
+	let bufnr = magit#utils#bufnr()
+	execute printf(
+				\ 'sign place %d line=%d name=GitaPseudoSeparatorSign buffer=%d',
+				\ linenum, linenum, bufnr,
+				\)
+	call <SID>mg_section_help(a:mode)
 	call s:mg_display_files(a:mode, '', 0)
 endfunction
 
@@ -200,8 +211,13 @@ function! s:mg_get_stashes()
 	if (!empty(stash_list))
 		silent put =''
 		silent put =g:magit_sections.stash
-		silent put =magit#utils#underline(g:magit_sections.stash)
 		silent put =''
+		let linenum = line('.')
+		let bufnr = magit#utils#bufnr()
+		execute printf(
+					\ 'sign place %d line=%d name=GitaPseudoSeparatorSign buffer=%d',
+					\ linenum, linenum, bufnr,
+					\)
 
 		for stash in stash_list
 			let stash_id=substitute(stash, '^\(stash@{\d\+}\):.*$', '\1', '')
@@ -223,9 +239,14 @@ function! s:mg_get_commit_section()
 	if ( b:magit_current_commit_mode != '' )
 		silent put =''
 		silent put =g:magit_sections.commit_start
-		call <SID>mg_section_help('commit')
-		silent put =magit#utils#underline(g:magit_sections.commit_start)
 		silent put =''
+		let linenum = line('.')
+		let bufnr = magit#utils#bufnr()
+		execute printf(
+					\ 'sign place %d line=%d name=GitaPseudoSeparatorSign buffer=%d',
+					\ linenum, linenum, bufnr,
+					\)
+		call <SID>mg_section_help('commit')
 
 		let git_dir=magit#git#git_dir()
 		" refresh the COMMIT_EDITMSG file
diff --git a/syntax/magit.vim b/syntax/magit.vim
index 904d8d3..6b21a39 100644
--- a/syntax/magit.vim
+++ b/syntax/magit.vim
@@ -4,12 +4,22 @@ endif
 
 execute 'source ' . resolve(expand('<sfile>:p:h')) . '/../common/magit_common.vim'
 
+highlight GitaPseudoSeparatorDefault
+      \ term=undercurl
+      \ cterm=underline ctermfg=8
+      \ gui=underline guifg=#363636
+sign define GitaPseudoSeparatorSign
+      \ texthl=SignColumn
+      \ linehl=GitaPseudoSeparator
+
+highlight default link GitaPseudoSeparator GitaPseudoSeparatorDefault
+
 syn case match
 syn sync minlines=50
 
 syn include @diff syntax/diff.vim
 
-execute 'syn match titleEntry "' . g:magit_section_re . '\n=\+"'
+execute 'syn match titleEntry "' . g:magit_section_re . '\n$"'
 hi def link titleEntry Comment
 
 execute 'syn match stashEntry "' . g:magit_stash_re . '"'
-- 
GitLab