To: vim_dev@googlegroups.com Subject: Patch 7.4.1674 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1674 Problem: The editexisting plugin has to be copied or sourced to be used. Solution: Turn it into a package. Files: runtime/macros/editexisting.vim, runtime/macros/README.txt, runtime/pack/dist/opt/editexisting/plugin/editexisting.vim, Filelist *** ../vim-7.4.1673/runtime/macros/editexisting.vim 2013-02-24 14:37:26.000000000 +0100 --- runtime/macros/editexisting.vim 2016-03-28 20:56:03.953191786 +0200 *************** *** 1,119 **** ! " Vim Plugin: Edit the file with an existing Vim if possible ! " Maintainer: Bram Moolenaar ! " Last Change: 2013 Feb 24 ! ! " This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32) ! " $VIM/vimfiles/plugin directory. Or make a symbolic link, so that you ! " automatically use the latest version. ! ! " This plugin serves two purposes: ! " 1. On startup, if we were invoked with one file name argument and the file ! " is not modified then try to find another Vim instance that is editing ! " this file. If there is one then bring it to the foreground and exit. ! " 2. When a file is edited and a swap file exists for it, try finding that ! " other Vim and bring it to the foreground. Requires Vim 7, because it ! " uses the SwapExists autocommand event. ! if v:version < 700 ! finish ! endif ! ! " Function that finds the Vim instance that is editing "filename" and brings ! " it to the foreground. ! func s:EditElsewhere(filename) ! let fname_esc = substitute(a:filename, "'", "''", "g") ! ! let servers = serverlist() ! while servers != '' ! " Get next server name in "servername"; remove it from "servers". ! let i = match(servers, "\n") ! if i == -1 ! let servername = servers ! let servers = '' ! else ! let servername = strpart(servers, 0, i) ! let servers = strpart(servers, i + 1) ! endif ! ! " Skip ourselves. ! if servername ==? v:servername ! continue ! endif ! ! " Check if this server is editing our file. ! if remote_expr(servername, "bufloaded('" . fname_esc . "')") ! " Yes, bring it to the foreground. ! if has("win32") ! call remote_foreground(servername) ! endif ! call remote_expr(servername, "foreground()") ! ! if remote_expr(servername, "exists('*EditExisting')") ! " Make sure the file is visible in a window (not hidden). ! " If v:swapcommand exists and is set, send it to the server. ! if exists("v:swapcommand") ! let c = substitute(v:swapcommand, "'", "''", "g") ! call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')") ! else ! call remote_expr(servername, "EditExisting('" . fname_esc . "', '')") ! endif ! endif ! ! if !(has('vim_starting') && has('gui_running') && has('gui_win32')) ! " Tell the user what is happening. Not when the GUI is starting ! " though, it would result in a message box. ! echomsg "File is being edited by " . servername ! sleep 2 ! endif ! return 'q' ! endif ! endwhile ! return '' ! endfunc ! ! " When the plugin is loaded and there is one file name argument: Find another ! " Vim server that is editing this file right now. ! if argc() == 1 && !&modified ! if s:EditElsewhere(expand("%:p")) == 'q' ! quit ! endif ! endif ! ! " Setup for handling the situation that an existing swap file is found. ! try ! au! SwapExists * let v:swapchoice = s:EditElsewhere(expand(":p")) ! catch ! " Without SwapExists we don't do anything for ":edit" commands ! endtry ! ! " Function used on the server to make the file visible and possibly execute a ! " command. ! func! EditExisting(fname, command) ! " Get the window number of the file in the current tab page. ! let winnr = bufwinnr(a:fname) ! if winnr <= 0 ! " Not found, look in other tab pages. ! let bufnr = bufnr(a:fname) ! for i in range(tabpagenr('$')) ! if index(tabpagebuflist(i + 1), bufnr) >= 0 ! " Make this tab page the current one and find the window number. ! exe 'tabnext ' . (i + 1) ! let winnr = bufwinnr(a:fname) ! break ! endif ! endfor ! endif ! ! if winnr > 0 ! exe winnr . "wincmd w" ! elseif exists('*fnameescape') ! exe "split " . fnameescape(a:fname) ! else ! exe "split " . escape(a:fname, " \t\n*?[{`$\\%#'\"|!<") ! endif ! ! if a:command != '' ! exe "normal " . a:command ! endif ! ! redraw ! endfunc --- 1,3 ---- ! " Load the editexisting package. ! " For those users who were loading the editexisting plugin from here. ! packadd editexisting *** ../vim-7.4.1673/runtime/macros/README.txt 2016-03-28 20:50:03.276828797 +0200 --- runtime/macros/README.txt 2016-03-28 20:59:39.675015297 +0200 *************** *** 17,36 **** swapmous.vim swap left and right mouse buttons ! editexisting.vim when editing a file that is already edited with ! another Vim instance This one is only for Unix. file_select.vim macros that make a handy file selector ! The Dvorak support has been moved to an optional package. To load it put this ! line in your vimrc file: ! packadd! dvorak ! ! The support for justifying test has been moved to an optional package. To ! load it put this line in your vimrc file: ! packadd! justify ! ! The matchit plugin has been moved to an optional package. To load it put this ! line in your vimrc file: ! packadd! matchit --- 17,36 ---- swapmous.vim swap left and right mouse buttons ! editexisting.vim This one is only for Unix. file_select.vim macros that make a handy file selector ! ! The following have been moved to an optional package. Add the command to your ! vimrc file to use the package: ! ! packadd! dvorak Dvorak keyboard support; adds mappings ! ! packadd! editexisting when editing a file that is already edited with ! another Vim instance, go to that Vim instance ! ! packadd! justify justifying text. ! ! packadd! matchit makes the % command work better *** ../vim-7.4.1673/runtime/pack/dist/opt/editexisting/plugin/editexisting.vim 1970-01-01 01:00:00.000000000 +0100 --- runtime/pack/dist/opt/editexisting/plugin/editexisting.vim 2016-03-28 21:00:36.190444957 +0200 *************** *** 0 **** --- 1,114 ---- + " Vim Plugin: Edit the file with an existing Vim if possible + " Maintainer: Bram Moolenaar + " Last Change: 2016 Mar 28 + + " To use add ":packadd! editexisting" in your vimrc file. + + " This plugin serves two purposes: + " 1. On startup, if we were invoked with one file name argument and the file + " is not modified then try to find another Vim instance that is editing + " this file. If there is one then bring it to the foreground and exit. + " 2. When a file is edited and a swap file exists for it, try finding that + " other Vim and bring it to the foreground. Requires Vim 7, because it + " uses the SwapExists autocommand event. + + " Function that finds the Vim instance that is editing "filename" and brings + " it to the foreground. + func s:EditElsewhere(filename) + let fname_esc = substitute(a:filename, "'", "''", "g") + + let servers = serverlist() + while servers != '' + " Get next server name in "servername"; remove it from "servers". + let i = match(servers, "\n") + if i == -1 + let servername = servers + let servers = '' + else + let servername = strpart(servers, 0, i) + let servers = strpart(servers, i + 1) + endif + + " Skip ourselves. + if servername ==? v:servername + continue + endif + + " Check if this server is editing our file. + if remote_expr(servername, "bufloaded('" . fname_esc . "')") + " Yes, bring it to the foreground. + if has("win32") + call remote_foreground(servername) + endif + call remote_expr(servername, "foreground()") + + if remote_expr(servername, "exists('*EditExisting')") + " Make sure the file is visible in a window (not hidden). + " If v:swapcommand exists and is set, send it to the server. + if exists("v:swapcommand") + let c = substitute(v:swapcommand, "'", "''", "g") + call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')") + else + call remote_expr(servername, "EditExisting('" . fname_esc . "', '')") + endif + endif + + if !(has('vim_starting') && has('gui_running') && has('gui_win32')) + " Tell the user what is happening. Not when the GUI is starting + " though, it would result in a message box. + echomsg "File is being edited by " . servername + sleep 2 + endif + return 'q' + endif + endwhile + return '' + endfunc + + " When the plugin is loaded and there is one file name argument: Find another + " Vim server that is editing this file right now. + if argc() == 1 && !&modified + if s:EditElsewhere(expand("%:p")) == 'q' + quit + endif + endif + + " Setup for handling the situation that an existing swap file is found. + try + au! SwapExists * let v:swapchoice = s:EditElsewhere(expand(":p")) + catch + " Without SwapExists we don't do anything for ":edit" commands + endtry + + " Function used on the server to make the file visible and possibly execute a + " command. + func! EditExisting(fname, command) + " Get the window number of the file in the current tab page. + let winnr = bufwinnr(a:fname) + if winnr <= 0 + " Not found, look in other tab pages. + let bufnr = bufnr(a:fname) + for i in range(tabpagenr('$')) + if index(tabpagebuflist(i + 1), bufnr) >= 0 + " Make this tab page the current one and find the window number. + exe 'tabnext ' . (i + 1) + let winnr = bufwinnr(a:fname) + break + endif + endfor + endif + + if winnr > 0 + exe winnr . "wincmd w" + elseif exists('*fnameescape') + exe "split " . fnameescape(a:fname) + else + exe "split " . escape(a:fname, " \t\n*?[{`$\\%#'\"|!<") + endif + + if a:command != '' + exe "normal! " . a:command + endif + + redraw + endfunc *** ../vim-7.4.1673/Filelist 2016-03-28 20:50:03.276828797 +0200 --- Filelist 2016-03-28 21:01:16.766035442 +0200 *************** *** 526,531 **** --- 526,532 ---- runtime/pack/dist/opt/dvorak/plugin/dvorak.vim \ runtime/pack/dist/opt/dvorak/dvorak/enable.vim \ runtime/pack/dist/opt/dvorak/dvorak/disable.vim \ + runtime/pack/dist/opt/editexisting/plugin/editexisting.vim \ runtime/pack/dist/opt/justify/plugin/justify.vim \ runtime/pack/dist/opt/matchit/plugin/matchit.vim \ runtime/pack/dist/opt/matchit/doc/matchit.txt \ *** ../vim-7.4.1673/src/version.c 2016-03-28 20:50:03.280828758 +0200 --- src/version.c 2016-03-28 21:02:26.865327889 +0200 *************** *** 750,751 **** --- 750,753 ---- { /* Add new patch number below this line */ + /**/ + 1674, /**/ -- hundred-and-one symptoms of being an internet addict: 154. You fondle your mouse. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///