@@ -19,7 +19,11 @@ let s:default_folder_name = 'Default'
1919let s: untracked_folder_name = ' Untracked'
2020let s: staged_folder_name = ' Staged'
2121let s: unmerged_folder_name = ' Unmerged'
22+
2223let s: shelf_folder_prefix = ' 📚'
24+ let s: shelf_path_spliter = ' #'
25+ let s: shelf_path_file_spliter = ' @'
26+
2327let s: changed_files = []
2428let s: untracked_files = []
2529let s: staged_files = []
@@ -823,20 +827,20 @@ function! s:ShelfFile() range
823827 endif
824828
825829 for file in files
826- " TODO: fix file under a directory abc/def/name.txt
827830 let segments = split (file , ' /\|\\' )
828831 let diff_cmd = s: GetDiffCmd (file )
829832 if len (segments) == 1
830833 let cmd = diff_cmd.' > ' .folder.' /' .file .' .diff'
831834 else
832- let directory = segments[:-2 ]
835+ let dir = segments[:-2 ]
833836 let filename = segments[-1 ]
834- let diff_file = join (directory , ' _' ).' @' .filename
837+ let diff_file = join (dir , s: shelf_path_spliter )
838+ \. s: shelf_path_file_spliter .filename
835839 let cmd = diff_cmd.' > ' .folder.' /' .diff_file.' .diff'
836840 endif
837841 call project#RunShellCmd (cmd)
838842 if v: shell_error
839- return
843+ break
840844 endif
841845 endfor
842846
@@ -1307,10 +1311,15 @@ function! s:GetShelfFileDisplay(file, prefix = ' ')
13071311 " sign_mark is used by s:HighlightFiles
13081312 let sign_mark = ' '
13091313 let splitter = ' |'
1310-
13111314 let icon = project#GetIcon (a: file )
1312-
1313- return a: prefix .sign_mark.icon .splitter.a: file .splitter.' '
1315+ let segments = split (a: file , s: shelf_path_file_spliter )
1316+ if len (segments) == 1
1317+ return a: prefix .sign_mark.icon .splitter.a: file .splitter.' '
1318+ else
1319+ let dir = substitute (segments[0 ], s: shelf_path_spliter , ' /' , ' ' )
1320+ let filename = segments[1 ]
1321+ return a: prefix .sign_mark.icon .splitter.filename.splitter.' ' .dir
1322+ endif
13141323endfunction
13151324
13161325function ! s: UpdateChangelist (run_git = 0 )
0 commit comments