]> git.sev.monster Git - dotfiles.git/commitdiff
vim: update vim-suda and supporting framework
authorsev <git@sev.monster>
Fri, 6 Dec 2024 22:49:39 +0000 (16:49 -0600)
committersev <git@sev.monster>
Fri, 6 Dec 2024 22:49:39 +0000 (16:49 -0600)
- vim-suda was updated to remove `setlocal backup`, so the rc no longer handles
  that option. (#85)
- didn't notice at the time but even if undofile is set during :read or enabled
  after, the buffer's undo stack is not updated, so expand the undofile save to
  also read the undofile when loading suda:// buffers.

etc/vim/.vimrc
etc/vim/pack/vim-suda/start/vim-suda

index 5e027bda1fbf56ee4ae4ec1407e74a1806030a4d..0b9bcd9dc0739d766fbe7558209fa847134d13ea 100644 (file)
@@ -184,26 +184,31 @@ endif
 " re-enable backup, swap, undo for suda buffers that we can read
 " https://github.com/lambdalisue/vim-suda/issues/25
 function s:SudaSettingsSave()
-    let b:sev_suda_backup = &backup
     let b:sev_suda_swapfile = &swapfile
     let b:sev_suda_undofile = &undofile
+    " fix https://github.com/lambdalisue/vim-suda/issues/87
+    setlocal noswapfile
 endfunction
 function s:SudaSettingsRestore()
     if filereadable(expand('<afile>')[7:])
-        if exists('b:sev_suda_backup') && b:sev_suda_backup
-            " XXX: suda.vim uses setlocal for this, even though it's global...
-            "      https://github.com/lambdalisue/vim-suda/issues/85
-            setlocal backup
-        endif
         if exists('b:sev_suda_swapfile') && b:sev_suda_swapfile
-            setlocal swapfile
+            try
+                setlocal swapfile
+            catch
+                " ignore swapfile errors, they should have been shown already
+                echohl ErrorMsg
+                for line in split(v:exception, '\n')
+                    echomsg printf('[suda] %s', line)
+                endfor
+                echohl None
+            endtry
         endif
         if exists('b:sev_suda_undofile') && b:sev_suda_undofile
             setlocal undofile
         endif
     endif
 endfunction
-function s:SudaWriteUndo()
+function s:SudaProcessUndo(cmd)
     let p = expand('<afile>')[7:]
     if has('win32') || !&undofile || !filereadable(p)
         return
@@ -252,7 +257,7 @@ function s:SudaWriteUndo()
             continue
         endif
         try
-            execute printf('wundo! %s/%s', fnameescape(d), fnameescape(f))
+            execute printf('%s %s/%s', a:cmd, fnameescape(d), fnameescape(f))
             break
         catch
             continue
@@ -261,4 +266,5 @@ function s:SudaWriteUndo()
 endfunction
 autocmd BufReadPre suda://* call s:SudaSettingsSave()
 autocmd BufReadPost suda://* call s:SudaSettingsRestore()
-autocmd BufWritePost suda://* call s:SudaWriteUndo()
+autocmd BufReadPost suda://* call s:SudaProcessUndo('silent! rundo')
+autocmd BufWritePost suda://* call s:SudaProcessUndo('wundo!')
index b97fab52f9cdeabe2bbb5eb98d82356899f30829..e333169211b84d6f4012ac9e40bcbbf370b74289 160000 (submodule)
@@ -1 +1 @@
-Subproject commit b97fab52f9cdeabe2bbb5eb98d82356899f30829
+Subproject commit e333169211b84d6f4012ac9e40bcbbf370b74289
This page took 0.049335 seconds and 4 git commands to generate.