ZyX_I avatar ZyX_I committed 02988f8

Added :AuVimDiff full, FVdiff mapping
Fixed commit and prevmessage tests under wine

Comments (0)

Files changed (18)

     uncommited changes (really it is specifying `--force' to the underlying 
     VCS).
 
-                                                                  *:AuVimDiff*
-AuVimDiff [file {file}] [curfile] [[no]usewin] [repo {repo}] [rev1 [...]]
-    Open a vimdiff windows containing file {file} (default: current) that have 
-    working directory state of the file (if `curfile' option is given or if 
-    :AuVimDiff is called when current buffer contains this file) and all 
-    specified revisions (working directory revision if none specified) in 
-    adjacent windows. Layout depends on the value of 'diffopt', `usewin' 
-    controls whether new window will be opened instead of using existing one 
-    (existing one will be used only if it has similar dimensions) (overrides 
-    |g:aurum_usewin|). First file is always opened in the current window and 
-    it is always the first file opened by :AuVimDiff.
+AuVimDiff {opts} [rev1 [...]]                                     *:AuVimDiff*
+    Opens a vimdiff windows. Possible options:
+    Option       Description ~
+    file         File to be opened. Default: current file (see |:AuAnnotate|).
+    [no]curfile  Determines whether current state of the file should be used.
+    [no]usewin   Overrides |g:aurum_usewin|. Determines whether new window 
+                 should be opened instead of using existing one. First file 
+                 will always be opened in current window.
+    [no]full     If enabled, opens multiple tabs containing all files changed 
+                 between selected revisions (revisions and working directory 
+                 state if `curfile' is enabled). Overrides `file' option.
+    repo         Path. Repository that should be used.
+
+    Note: if less then two revisions were specified, one will be working 
+          directory state or current revision (see |:AuAnnotate|) and second 
+          will either be working directory revision or, if it is equal to 
+          current revision, its first parent.
                           *g:frawormap_AuVimDiff* *g:frawormap_AuVimDiff_Exit*
     :AuVimDiff command defines Exit mappings for all opened buffers. By 
     default lhs of this mapping is `X' with leader `,' (`,X'), but this can be 
                       *g:frawormap_Aurum_Log*    *g:frawormap_Aurum_LogFile*
                       *g:frawormap_Aurum_URL*    *g:frawormap_Aurum_LineURL*
                       *g:frawormap_Aurum_Track*  *g:frawormap_Aurum_Forget*
+                      *g:frawormap_Aurum_FVdiff*     *aurum-m-Aurum-FVdiff*
                           *aurum-m-Aurum_Commit*     *aurum-m-Aurum_CommitAll*
                           *aurum-m-Aurum_ROpen*      *aurum-m-Aurum_Revert*
                           *aurum-m-Aurum_Vdiff*      *aurum-m-Aurum_Diff*
                             version from working directory revision
 Diff        d   AuDiff :    Like Vdiff, but view them in diff format
 Fdiff      gd   AuDiff      Like Diff, but view changes in all files
+FVdiff     gD   AuVimDiff full
+                            View all differencies between working directory 
+                            state and working directory revision
 Annotate    a   AuAnnotate  Annotate current buffer
 Status      s   AuStatus | wincmd p
                             Open status window and switch back
                 \'ROpen':     {'lhs':  'o', 'rhs': ':<C-u>AuFile<CR>'            },
                 \'Revert':    {'lhs':  'O', 'rhs': ':<C-u>AuFile . : replace<CR>'},
                 \'Vdiff':     {'lhs':  'D', 'rhs': ':<C-u>AuVimDiff<CR>'         },
+                \'FVdiff':    {'lhs': 'gD', 'rhs': ':<C-u>AuVimDiff full<CR>'    },
                 \'Diff':      {'lhs':  'd', 'rhs': ':<C-u>AuDiff :<CR>'          },
                 \'Fdiff':     {'lhs': 'gd', 'rhs': ':<C-u>AuDiff<CR>'            },
                 \'Annotate':  {'lhs':  'a', 'rhs': ':<C-u>AuAnnotate<CR>'        },

plugin/aurum/cmdutils.vim

 let s:_messages={
             \  'nrepo': 'Failed to find a repository',
             \'noafile': 'Failed to deduce which file to annotate',
-            \'nodfile': 'Failed to deduce which file to diff with',
             \'noffile': 'Failed to deduce which file to show',
             \ 'nocurf': 'Failed to deduce which file was meant',
             \'nocfile': 'Unsure what should be commited',
             if rev isnot 0
                 let rev=repo.functions.getrevhex(repo, rev)
             endif
+        elseif has_key(a:opts, 'rev')
+            let rev=repo.functions.getrevhex(repo, a:opts.rev)
         else
-            let rev=repo.functions.getrevhex(repo, get(a:opts, 'rev', '.'))
+            let rev=0
         endif
         "▲2
     endif

plugin/aurum/commit.vim

         \}
 let s:statmsgs.unknown=s:statmsgs.added
 let s:statmsgs.deleted=s:statmsgs.removed
-" TODO Investigate why closing commit buffer using BufWriteCmd event on windows
-"      consumes next character
+" TODO Investigate why closing commit buffer on windows consumes next character
 " XXX Do not change names of options used here, see :AuRecord
 function s:F.commit(repo, opts, files, status)
     let user=''

plugin/aurum/edit.vim

     endfor
     return [repo]+strings+[opts]
 endfunction
+"▶1 runcmd
+function s:F.runcmd(cdescr, amatch, args)
+    let bvar=call(a:cdescr.function, a:args, {})
+    let buf=bufnr('%')
+    if has_key(s:_r.bufvars, buf) &&
+                \has_key(s:_r.bufvars[buf], 'prevbuf')
+        let bvar.prevbuf=s:_r.bufvars[buf].prevbuf
+    endif
+    if !get(a:cdescr, 'modifiable', 0)
+        setlocal buftype=nofile nomodifiable readonly
+    endif
+    let bvar.amatch=a:amatch
+    let bvar.command=a:cdescr.id
+    let bvar.repo=a:args[1]
+    if has_key(a:cdescr, 'options')
+        let bvar.opts=a:args[-1]
+    endif
+    let s:_r.bufvars[buf]=bvar
+    if has_key(a:cdescr, 'filetype')
+        let &l:filetype=a:cdescr.filetype
+        execute 'runtime! ftplugin/'.a:cdescr.filetype.'.vim'
+    endif
+    file
+endfunction
 "▶1 auefunc
 let s:okeys={
             \'list': 'map(split(opts[o],";"), "s:F.ounescape(v:val)")',
                     \                                        (["'[", "']"])))]+
                     \                            args)
     else
-        let bvar=call(cdescr.function, [a:rw]+args, {})
+        let args=[a:rw]+args
         if a:rw==0
-            if has_key(s:_r.bufvars, buf) &&
-                        \has_key(s:_r.bufvars[buf], 'prevbuf')
-                let bvar.prevbuf=s:_r.bufvars[buf].prevbuf
-            endif
-            if !get(cdescr, 'modifiable', 0)
-                setlocal buftype=nofile nomodifiable readonly
-            endif
-            let bvar.amatch=amatch
-            let bvar.command=command
-            let bvar.repo=args[0]
-            if hasopts
-                let bvar.opts=args[-1]
-            endif
-            let s:_r.bufvars[buf]=bvar
-            if has_key(cdescr, 'filetype')
-                let &l:filetype=cdescr.filetype
-                execute 'runtime! ftplugin/'.cdescr.filetype.'.vim'
-            endif
-            file
+            call s:F.runcmd(cdescr, amatch, args)
+        else
+            call call(cdescr.function, args, {})
         endif
     endif
 endfunction
     let repopath=((type(a:repo)==type({}))?(a:repo.path):(a:repo))
     return 'aurum://'.a:command.':'.s:F.encodecmd([repopath]+a:000)
 endfunction
-"▶1 runcmd
-function s:F.runcmd(vcommand, command, repo, ...)
+"▶1 run
+function s:F.run(vcommand, command, repo, ...)
     let file=call(s:F.fname, [a:command, a:repo]+a:000, {})
     let existed=bufexists(file)
-    execute a:vcommand fnameescape(file)
+    if 0 && type(a:repo)==type({}) && has_key(s:commands, a:command) &&
+                \a:vcommand=~#'\v%(sil%[ent]\ )?%(edit|view)'
+        try
+            let savedei=&eventignore
+            set eventignore+=BufReadCmd
+            execute a:vcommand fnameescape(file)
+        finally
+            let &eventignore=savedei
+        endtry
+        setlocal modifiable noreadonly
+        " TODO Check how this interacts with changes made after repository
+        "      object was created
+        " FIXME Populate this with missing arguments
+        silent call s:F.runcmd(s:commands[a:command], file, [0, a:repo]+a:000)
+        if a:vcommand[:2] isnot# 'sil'
+            file
+        endif
+    else
+        execute a:vcommand fnameescape(file)
+    endif
     return existed
 endfunction
 "▶1 Register resources
-call s:_f.postresource('run',       s:F.runcmd)
+call s:_f.postresource('run',       s:F.run)
 call s:_f.postresource('fname',     s:F.fname)
 call s:_f.postresource('setlines',  s:F.setlines)
 call s:_f.postresource('globtopat', s:F.globtopat)

plugin/aurum/vimdiff.vim

             \   'usewin': {'default': 0, 'filter': 'bool'},
         \}
 let s:_messages={
+            \'nodfile': 'Failed to deduce which file to diff with',
             \ 'nodrev': 'Unsure what revision should be diffed with',
         \}
+let s:lastfullid=0
 "▶1 diffrestore
 let s:diffsaveopts=['diff', 'foldcolumn', 'foldenable', 'foldmethod',
             \       'foldlevel', 'scrollbind', 'cursorbind', 'wrap']
 function s:F.exit()
     let buf=bufnr('%')
     let cmd="\<C-\>\<C-n>"
+    "▶2 AuV full was used
+    if exists('t:auvimdiff_full')
+        let vdid=t:auvimdiff_full
+        let tabnr=tabpagenr()
+        for tabnr in range(1, tabnr)
+            if gettabvar(tabnr, 'auvimdiff_full') is vdid
+                break
+            endif
+        endfor
+        let vdtabcond="exists('t:auvimdiff_full') && t:auvimdiff_full is ".vdid
+        let cmd.=":tabnext ".tabnr."\n"
+        let cmd.=":while tabpagenr('$')>1 && ".vdtabcond." | ".
+                    \"tabclose! | ".
+                    \"endwhile\n"
+        let cmd.=":if ".vdtabcond." | ".
+                    \"only! | ".
+                    \"enew! | ".
+                    \"endif\n"
+        return cmd
     "▶2 diffsplit() was not used
-    if !exists('t:auvimdiff_diffbufvar') || !exists('t:auvimdiff_origbufvar') ||
+    elseif !exists('t:auvimdiff_diffbufvar') ||
+                \!exists('t:auvimdiff_origbufvar') ||
                 \(buf!=t:auvimdiff_diffbufvar.bufnr &&
                 \ buf!=t:auvimdiff_origbufvar.bufnr)
         if &diff && exists('t:auvimdiff_prevbuffers')
         else
             call s:_f.mapgroup.unmap('AuVimDiff', buf)
         endif
-        unlet t:auvimdiff_prevbuffers
+        if exists('t:auvimdiff_prevbuffers')
+            unlet t:auvimdiff_prevbuffers
+        endif
         return cmd
     endif
     "▲2
 call s:_f.mapgroup.add('AuVimDiff', {
             \  'Exit': {'lhs': 'X', 'rhs': s:F.exit},
         \}, {'mode': 'n', 'silent': 1, 'dontmap': 1, 'leader': ',',})
+"▶1 openfile
+function s:F.openfile(usewin, hasbuf, repo, revs, file)
+    "▶2 Open first buffer
+    let frev=a:revs[0]
+    if a:hasbuf
+        let fbuf=bufnr('%')
+    else
+        let t:auvimdiff_prevbuffers={}
+        let prevbuf=s:_r.cmdutils.prevbuf()
+        if frev is 0
+            execute 'silent edit' fnameescape(s:_r.os.path.join(a:repo.path,
+                        \                     a:file))
+        else
+            call s:_r.run('silent edit', 'file', a:repo, frev, a:file)
+        endif
+        let t:auvimdiff_prevbuffers[bufnr('%')]=prevbuf
+        let fbuf=bufnr('%')
+    endif
+    call s:_f.mapgroup.map('AuVimDiff', fbuf)
+    "▶2 Open subsequent buffers
+    let i=0
+    for rev in a:revs[1:]
+        if rev is 0
+            let f=a:file
+        else
+            let f=s:_r.fname('file', a:repo, rev, a:file)
+        endif
+        if !i && a:hasbuf && len(a:revs)==2
+            let existed=bufexists(f)
+            call s:F.diffsplit(f, a:usewin)
+            if !existed
+                setlocal bufhidden=wipe
+            endif
+        else
+            if !i && a:usewin && winnr('$')>1
+                diffthis
+                if s:F.findwindow()
+                    let prevbuf=s:_r.cmdutils.prevbuf()
+                    execute 'silent edit' fnameescape(f)
+                    diffthis
+                    let t:auvimdiff_prevbuffers[bufnr('%')]=prevbuf
+                else
+                    execute 'silent diffsplit' fnameescape(f)
+                    let t:auvimdiff_prevbuffers[bufnr('%')]=0
+                endif
+            else
+                execute 'silent diffsplit' fnameescape(f)
+                let t:auvimdiff_prevbuffers[bufnr('%')]=0
+            endif
+            call s:_f.mapgroup.map('AuVimDiff', bufnr('%'))
+        endif
+        let i+=1
+    endfor
+    "▲2
+    return fbuf
+endfunction
+"▶1 opentab
+function s:F.opentab(repo, revs, file, fdescr)
+    "▶2 Open first revision
+    let frev=a:revs[0]
+    if !has_key(a:fdescr, 1) || a:fdescr[1] is# 'removed'
+        tabnew
+        let existed=0
+    elseif frev is 0
+        let fname=fnameescape(s:_r.os.path.join(a:repo.path, a:file))
+        let existed=bufexists(fname)
+        execute 'silent tabedit' fname
+    else
+        let existed=s:_r.run('silent tabedit', 'file', a:repo, frev, a:file)
+    endif
+    if !existed
+        setlocal bufhidden=wipe
+    endif
+    let t:auvimdiff_full=s:lastfullid
+    call s:_f.mapgroup.map('AuVimDiff', bufnr('%'))
+    "▶2 Open subsequent revisions
+    let i=1
+    let vertical=(stridx(&diffopt, 'vertical')!=-1)
+    for rev in a:revs[1:]
+        if !has_key(a:fdescr, i) || a:fdescr[i] is# 'added'
+            diffthis
+            if vertical
+                vnew
+            else
+                new
+            endif
+            diffthis
+            let existed=0
+        else
+            let existed=s:_r.run('silent diffsplit','file', a:repo, rev, a:file)
+        endif
+        if !existed
+            setlocal bufhidden=wipe
+        endif
+        call s:_f.mapgroup.map('AuVimDiff', bufnr('%'))
+        let i+=1
+    endfor
+    1 wincmd w
+    "▲2
+endfunction
 "▶1 vimdfunc
-" TODO AuVimDiff full (opens multiple splits in different tabs)
+let s:fullstatuses=['modified', 'added', 'removed']
+" TODO exclude binary files from full diff
 function s:vimdfunc.function(opts, ...)
     "▶2 repo and revisions
-    let [hasbuf, repo, rev, file]=s:_r.cmdutils.getrrf(a:opts, 'nodfile', 0)
+    let [hasbuf, repo, rev, file]=s:_r.cmdutils.getrrf(a:opts, 0, 0)
     call s:_r.cmdutils.checkrepo(repo)
     let revs=[]
     if rev isnot 0
             call s:_f.throw('nodrev')
         endif
     endif
-    "▶2 Open first buffer
-    let frev=remove(revs, 0)
-    if hasbuf
-        let fbuf=bufnr('%')
+    "▲2
+    if get(a:opts, 'full', 0)
+        let statuses=map(revs[1:], 'repo.functions.status(repo,v:val,revs[0])')
+        let files={}
+        let i=1
+        for status in statuses
+            for [k, fs] in filter(items(status),
+                        \         'index(s:fullstatuses, v:val[0])!=-1')
+                for f in fs
+                    if !has_key(files, f)
+                        let files[f]={}
+                    endif
+                    let files[f][i]=k
+                endfor
+            endfor
+            let i+=1
+        endfor
+        let s:lastfullid+=1
+        for [f, d] in items(files)
+            call s:F.opentab(repo, revs, f, d)
+        endfor
     else
-        let t:auvimdiff_prevbuffers={}
-        let prevbuf=s:_r.cmdutils.prevbuf()
-        if frev is 0
-            execute 'silent edit' fnameescape(s:_r.os.path.join(repo.path,file))
-        else
-            call s:_r.run('silent edit', 'file', repo, frev, file)
+        if file is 0
+            call s:_f.throw('nodfile')
         endif
-        let t:auvimdiff_prevbuffers[bufnr('%')]=prevbuf
-        let fbuf=bufnr('%')
-    endif
-    call s:_f.mapgroup.map('AuVimDiff', fbuf)
-    "▶2 Open subsequent buffers
-    let usewin=get(a:opts, 'usewin', -1)
-    let usewin=(usewin==-1 ? s:_f.getoption('usewin') : usewin)
-    let i=0
-    for rev in revs
-        if rev is 0
-            let f=file
-        else
-            let f=s:_r.fname('file', repo, rev, file)
+        let usewin=get(a:opts, 'usewin', -1)
+        let usewin=(usewin==-1 ? s:_f.getoption('usewin') : usewin)
+        let fbuf=s:F.openfile(usewin, hasbuf, repo, revs, file)
+        if bufwinnr(fbuf)!=-1
+            execute bufwinnr(fbuf).'wincmd w'
         endif
-        if !i && hasbuf && len(revs)==1
-            let existed=bufexists(f)
-            call s:F.diffsplit(f, usewin)
-            if !existed
-                setlocal bufhidden=wipe
-            endif
-        else
-            if !i && usewin && winnr('$')>1
-                diffthis
-                if s:F.findwindow()
-                    let prevbuf=s:_r.cmdutils.prevbuf()
-                    execute 'silent edit' fnameescape(f)
-                    diffthis
-                    let t:auvimdiff_prevbuffers[bufnr('%')]=prevbuf
-                else
-                    execute 'silent diffsplit' fnameescape(f)
-                    let t:auvimdiff_prevbuffers[bufnr('%')]=0
-                endif
-            else
-                execute 'silent diffsplit' fnameescape(f)
-                let t:auvimdiff_prevbuffers[bufnr('%')]=0
-            endif
-            call s:_f.mapgroup.map('AuVimDiff', bufnr('%'))
-        endif
-        let i+=1
-    endfor
-    "▲2
-    if bufwinnr(fbuf)!=-1
-        execute bufwinnr(fbuf).'wincmd w'
     endif
 endfunction
 let s:vimdfunc['@FWC']=['-onlystrings '.
             \           '{  repo  '.s:_r.cmdutils.nogetrepoarg.
             \           '  ?file  type ""'.
+            \           ' !?full'.
             \           ' !?curfile'.
             \           ' !?usewin'.
             \           '}'.
 "▶1 Post resource
 call s:_f.postresource('vimdiff', {'split': s:F.diffsplit,})
 "▶1
-call frawor#Lockvar(s:, '_r,_pluginloaded')
+call frawor#Lockvar(s:, '_r,_pluginloaded,lastfullid')
 " vim: ft=vim ts=4 sts=4 et fmr=▶,▲
 :call append('$', 'Brand new text')
 :silent write
 :silent AuCommit
-Jkl,i:WT
+Jkl,i
+:
+:WT
 :W{{{1 ,X mapping
 :call append('$', 'Brand new text 2')
 :silent write
 :silent write
 :bwipeout!
 :R silent AuCommit **
-Pqr,i:WT
+Pqr,i
+:
+:WT
 :source addmessages.vim

test/gentests-setuptestrepos.zsh

 tar xJf testrepo.tar.xz
 
 for test in annotate-buffers commit record stat statmaps vimdiff diff update \
-            prevmessage vimdiff-usewin
+            prevmessage vimdiff-usewin vimdiff-full
 do
     mkdir ${test}repo
     tar c -C testrepo . | (cd ${test}repo && tar x)

test/prevmessage.in

 Commiting
 all
 files
-,i:WT
+,i
+:
+:WT
 :R silent! !hg rollback
 :R AuCommit **
-,i:WT
+,i
+:
+:WT
 :let g:aurum_remembermsg=0
 :R AuCommit **
 :try | write | catch | echom v:exception | endtry

test/vimdiff-full.in

+:R AuVimDiff full
+:WTabs
+,X:WTabs

test/vimdiff-full.ok

+ 1*1: 
+ 2*1: 
+ 2#2: vimdiff-fullrepo/addeddef
+ 3*1: aurum://file:%ETMPDIR%%-test%-vimdiff-fullrepo:504f74154456dbb0e9441326514e42ce66279e62:hglines2.lst
+ 3#2: 
+*4*1: aurum://file:%ETMPDIR%%-test%-vimdiff-fullrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*4#2: vimdiff-fullrepo/nohglinesrev.lst
+*1*1: 

test/vimdiff-usewin.in

 :split
 :let g:aurum_usewin=0
 :AuVimDiff
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :wincmd p
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :bwipeout!
 :let g:aurum_usewin=1
 :AuVimDiff
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :wincmd p
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :bwipeout!
 :set diffopt+=vertical
 :vsplit
 :AuVimDiff
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :wincmd p
-:call WriteFile(bufname('%'), 'w0: '.winnr().'; w$: '.winnr('$'))
+:WW
 :bwipeout!
 :source addmessages.vim

test/vimdiff-usewin.ok

-vimdiff-usewinrepo/nohglinesrev.lst
-w0: 2; w$: 3
-aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 1; w$: 3
-vimdiff-usewinrepo/nohglinesrev.lst
-w0: 1; w$: 2
-aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 2; w$: 2
-vimdiff-usewinrepo/nohglinesrev.lst
-w0: 1; w$: 2
-aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 2; w$: 2
+#1: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*2: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+ 3: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+*1: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#2: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+ 3: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+*1: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+#2: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#1: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+*2: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*1: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+#2: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#1: %TMPDIR%/test/vimdiff-usewinrepo/nohglinesrev.lst
+*2: aurum://file:%ETMPDIR%%-test%-vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
 endfunction
 let g:aurum_diffopts={'dates': 0}
 command -nargs=0 -bar WW :call s:WriteWindows()
+function s:WriteTabs()
+    let tcur=tabpagenr()
+    let r=[]
+    for t in range(1, tabpagenr('$'))
+        let bs=tabpagebuflist(t)
+        let wcur=tabpagewinnr(t)
+        let wprev=tabpagewinnr(t, '#')
+        for w in range(1, tabpagewinnr(t, '$'))
+            let s  = ((t==tcur)?('*'):(' ')).t
+            let s .= ((w==wcur)?('*'):((w==wprev)?('#'):(' '))).w
+            let s .= ': '.bufname(bs[w-1])
+            let r+=[s]
+        endfor
+    endfor
+    return WriteFile(r)
+endfunction
+command -nargs=0 -bar WTabs :call s:WriteTabs()
 function s:WriteBuffers()
     call WriteFile(map(filter(range(1, bufnr('$')), 'bufexists(v:val)'),
                 \      '"*="[v:val=='.bufnr('%').'].bufname(v:val)'))

test/wine/annotate-buffers.ok

 #1: aurum:\\annotate:%ETMPDIR%%+test%+annotate-buffersrepo:504f74154456dbb0e9441326514e42ce66279e62:.hgignore
 *2: aurum:\\file:%ETMPDIR%%+test%+annotate-buffersrepo:504f74154456dbb0e9441326514e42ce66279e62:.hgignore
  3: 
- 4: aurum:\\status:%ETMPDIR%%+test%+annotate-buffersrepo:show:clean
+ 4: aurum:\\status:%ETMPDIR%%+test%+annotate-buffersrepo:show:clean,
 {{{1 aurum://diff
 #1: aurum:\\annotate:%ETMPDIR%%+test%+testrepo:5a6a1bf999fad1f4547eeb887af54f31d11833f2:crepo.zsh
 *2: aurum:\\file:%ETMPDIR%%+test%+testrepo:5a6a1bf999fad1f4547eeb887af54f31d11833f2:crepo.zsh

test/wine/logmaps.ok

 {{{1 <CR>
 aurum:\\diff:%ETMPDIR%%+test%+logmapsrepo:504f74154456dbb0e9441326514e42ce66279e62:
 {{{1 branch <CR>
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:branch:A,crrestrict:branch
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:crrestrict:branch,branch:A,
 {{{1 user <CR>
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:user:%+VA <a@example.com>,crrestrict:user
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:user:%+VA <a@example.com>,crrestrict:user,
 {{{1 date <CR>
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:date:2002-02,crrestrict:date
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:date:2002-02,crrestrict:date,
 {{{1 changeset <CR>
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:revision:504f74154456dbb0e9441326514e42ce66279e62,crrestrict:revision
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:crrestrict:revision,revision:504f74154456dbb0e9441326514e42ce66279e62,
 {{{1 gF
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:showfiles:1,files:directory%-file,crrestrict:files
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:showfiles:1,files:directory%-file,crrestrict:files,
 {{{1 gF+files
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:showfiles:1,files:.hgignore,crrestrict:files
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:showfiles:1,files:.hgignore,crrestrict:files,
 {{{1 gu
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:user:%+VA <a@example.com>,crrestrict:user
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:user:%+VA <a@example.com>,crrestrict:user,
 {{{1 gD
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:date:2002-02,crrestrict:date
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:date:2002-02,crrestrict:date,
 {{{1 gb
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:branch:A,crrestrict:branch
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:crrestrict:branch,branch:A,
 {{{1 gr
-aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:revision:be92227e3e43f4e7402408afe110098d209d2568,crrestrict:revision
+aurum:\\log:%ETMPDIR%%+test%+logmapsrepo:crrestrict:revision,revision:be92227e3e43f4e7402408afe110098d209d2568,
 {{{1 gd
 aurum:\\diff:%ETMPDIR%%+test%+logmapsrepo::dfe39aa48c6ddde158e42217548b531a45ff66e9
 {{{1 gc

test/wine/vimdiff-full.ok

+ 1*1: 
+ 2*1: 
+ 2#2: vimdiff-fullrepo\addeddef
+ 3*1: aurum:\\file:%ETMPDIR%%+test%+vimdiff-fullrepo:504f74154456dbb0e9441326514e42ce66279e62:hglines2.lst
+ 3#2: 
+*4*1: aurum:\\file:%ETMPDIR%%+test%+vimdiff-fullrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*4#2: vimdiff-fullrepo\nohglinesrev.lst
+*1*1: 

test/wine/vimdiff-usewin.ok

-vimdiff-usewinrepo\nohglinesrev.lst
-w0: 2; w$: 3
-aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 1; w$: 3
-vimdiff-usewinrepo\nohglinesrev.lst
-w0: 1; w$: 2
-aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 2; w$: 2
-vimdiff-usewinrepo\nohglinesrev.lst
-w0: 1; w$: 2
-aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
-w0: 2; w$: 2
+#1: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*2: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+ 3: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+*1: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#2: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+ 3: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+*1: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+#2: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#1: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+*2: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+*1: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+#2: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
+#1: %TMPDIR%\test\vimdiff-usewinrepo\nohglinesrev.lst
+*2: aurum:\\file:%ETMPDIR%%+test%+vimdiff-usewinrepo:504f74154456dbb0e9441326514e42ce66279e62:nohglinesrev.lst
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.