diff --git a/autoload/magit/state.vim b/autoload/magit/state.vim index 1be452b68c40407bdb18ca4a56d50f7cd5fff415..4f2cbb4dbe981d7d1bdee14964efdf6bcb60dbce 100644 --- a/autoload/magit/state.vim +++ b/autoload/magit/state.vim @@ -304,13 +304,31 @@ function! magit#state#set_files_visible(is_visible) dict endfor endfunction -" magit#state#get_files: global dict getter function +" magit#state#get_files: global dict file objects getter function " param[in] mode: mode to select, can be 'staged' or 'unstaged' -" return all files belonging to mode +" return list of file objects belonging to mode function! magit#state#get_files(mode) dict return self.dict[a:mode] endfunction +" magit#state#get_filenames: global dict filenames getter function +" param[in] mode: mode to select, can be 'staged' or 'unstaged' +" return ordered list of filename strings belonging to mode, modified files +" first +function! magit#state#get_filenames(mode) dict + let modified = [] + let others = [] + for filename in sort(keys(self.dict[a:mode])) + let file = self.get_file(a:mode, filename) + if ( file.status == 'M' ) + call add(modified, filename) + else + call add(others, filename) + endif + endfor + return modified + others +endfunction + " dict: structure containing all diffs " It is formatted as follow @@ -330,6 +348,7 @@ let magit#state#state = { \ 'nb_diff_lines': 0, \ 'get_file': function("magit#state#get_file"), \ 'get_files': function("magit#state#get_files"), + \ 'get_filenames': function("magit#state#get_filenames"), \ 'add_file': function("magit#state#add_file"), \ 'set_files_visible': function("magit#state#set_files_visible"), \ 'check_max_lines': function("magit#state#check_max_lines"), diff --git a/plugin/magit.vim b/plugin/magit.vim index 87714b059ffeff31bcd088cb973355b759fa3779..765deb596906ad374421051bd0a10f673dc32dca 100644 --- a/plugin/magit.vim +++ b/plugin/magit.vim @@ -140,7 +140,7 @@ endfunction 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))) + for filename in s:state.get_filenames(a:mode) let file = s:state.get_file(a:mode, filename, 0) if ( file.depth != a:depth || filename !~ a:curdir . '.*' ) continue