From 5ca538ed24523ccebf70a05092aba4e90d0f42c2 Mon Sep 17 00:00:00 2001 From: Jerome Reybert <jerome.reybert@kalray.eu> Date: Tue, 20 Oct 2015 23:19:33 +0200 Subject: [PATCH] autoload/state.vim: file object handles itself its display --- autoload/magit/state.vim | 26 ++++++++++++++++++++++++++ plugin/magit.vim | 28 +++------------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/autoload/magit/state.vim b/autoload/magit/state.vim index cebbe23..27df640 100644 --- a/autoload/magit/state.vim +++ b/autoload/magit/state.vim @@ -96,6 +96,31 @@ function! magit#state#file_set_diff(val) dict endif endfunction +function! magit#state#file_put() dict + "if ( self.dirty != 0 ) + if (1) + let bufnr = magit#utils#bufnr() + let self.sign_start = magit#sign#add_sign(line('.'), 'S', bufnr) + put =file.get_filename_header() + if ( self.dir != 0 ) + if ( self.visible == 1 ) + let self.sign_end = magit#sign#add_sign(line('.'), 'E', bufnr) + return 1 + endif + endif + if ( self.visible == 0 ) + let self.sign_end = magit#sign#add_sign(line('.'), 'E', bufnr) + return 0 + endif + if ( self.exists == 0 ) + echoerr "Error, " . self.filename . " should not exists" + endif + let hunk_lines=self.get_flat_hunks() + silent put =hunk_lines + let self.sign_end = magit#sign#add_sign(line('.'), 'E', bufnr) + endif +endfunction + " s:hunk_template: template for hunk object (nested in s:diff_template) " WARNING: this variable must be deepcopy()'ied let s:hunk_template = { @@ -144,6 +169,7 @@ let s:file_template = { \ 'get_flat_hunks' : function("magit#state#file_get_flat_hunks"), \ 'toggle_visible' : function("magit#state#toggle_file_visible"), \ 'must_be_added' : function("magit#state#must_be_added"), +\ 'put' : function("magit#state#file_put"), \} " magit#state#get_file: function accessor for file diff --git a/plugin/magit.vim b/plugin/magit.vim index 8607817..317667b 100644 --- a/plugin/magit.vim +++ b/plugin/magit.vim @@ -141,35 +141,13 @@ function! s:mg_display_files(mode, curdir, depth) " FIXME: ouch, must store subdirs in more efficient way for filename in sort(keys(s:state.get_files(a:mode))) - let file = s:state.get_file(a:mode, filename, 0) + let file = s:state.get_file(a:mode, filename) if ( file.depth != a:depth || filename !~ a:curdir . '.*' ) continue endif - put =file.get_filename_header() - - if ( file.dir != 0 ) - if ( file.visible == 1 ) - call s:mg_display_files(a:mode, filename, a:depth + 1) - continue - endif - endif - - if ( file.visible == 0 ) - put ='' - continue + if ( file.put() != 0 ) + call s:mg_display_files(a:mode, filename, a:depth + 1) endif - if ( file.exists == 0 ) - echoerr "Error, " . filename . " should not exists" - endif - let hunks = file.get_hunks() - for hunk in hunks - if ( hunk.header != '' ) - silent put =hunk.header - endif - if ( !empty(hunk.lines) ) - silent put =hunk.lines - endif - endfor put ='' endfor endfunction -- GitLab