will133 / vim-dirdiff

Vim plugin to diff two directories
335 stars 59 forks source link

DirDiff broken with Vim 8.2 #27

Closed sgsoftware closed 4 years ago

sgsoftware commented 4 years ago

After upgrading Vim from 8.1 to 8.2 DirDiff behaves weirdly. First files difference is shown correctly but when I go to other files diffs the windows are messed up. This is probably related to the new 'popup windows' feature of Vim 8.2.

rnmhdn commented 4 years ago

Is this project abandoned?

will133 commented 4 years ago

Can you give me your platform and exact vim build version btw? It seems to work ok on Mac (vim 8.2 with patch up to 450) so far. I'll try it on Linux next. It's hard when upgrading a minor version in Vim something is broken on a certain platform.

sgsoftware commented 4 years ago

Platform is Arch Linux. vim --version reports the following:

VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar  1 2020 17:21:03)
Included patches: 1-343
Compiled by Arch Linux
Huge version with GTK3 GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tag_old_static
+arabic            +file_in_path      +mouse_urxvt       -tag_any_white
+autocmd           +find_in_path      +mouse_xterm       +tcl/dyn
+autochdir         +float             +multi_byte        +termguicolors
-autoservername    +folding           +multi_lang        +terminal
+balloon_eval      -footer            -mzscheme          +terminfo
+balloon_eval_term +fork()            +netbeans_intg     +termresponse
+browse            +gettext           +num64             +textobjects
++builtin_terms    -hangul_input      +packages          +textprop
+byte_offset       +iconv             +path_extra        +timers
+channel           +insert_expand     +perl/dyn          +title
+cindent           +job               +persistent_undo   +toolbar
+clientserver      +jumplist          +popupwin          +user_commands
+clipboard         +keymap            +postscript        +vartabs
+cmdline_compl     +lambda            +printer           +vertsplit
+cmdline_hist      +langmap           +profile           +virtualedit
+cmdline_info      +libcall           +python/dyn        +visual
+comments          +linebreak         +python3/dyn       +visualextra
+conceal           +lispindent        +quickfix          +viminfo
+cryptv            +listcmds          +reltime           +vreplace
+cscope            +localmap          +rightleft         +wildignore
+cursorbind        +lua/dyn           +ruby/dyn          +wildmenu
+cursorshape       +menu              +scrollbind        +windows
+dialog_con_gui    +mksession         +signs             +writebackup
+diff              +modify_fname      +smartindent       +X11
+digraphs          +mouse             +sound             -xfontset
+dnd               +mouseshape        +spell             +xim
-ebcdic            +mouse_dec         +startuptime       -xpm
+emacs_tags        +mouse_gpm         +statusline        +xsmp_interact
+eval              -mouse_jsbterm     -sun_workshop      +xterm_clipboard
+ex_extra          +mouse_netterm     +syntax            -xterm_save
+extra_search      +mouse_sgr         +tag_binary        
   system vimrc file: "/etc/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "/etc/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/libffi-3.2.1/include -I/usr/include/harfbuzz -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/at-spi-2.0 -pthread    -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -D_REENTRANT  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: gcc   -L. -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.30/core_perl/CORE  -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -L/usr/local/lib -Wl,--as-needed -o vim   -lgtk-3 -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0  -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo -lelf -lnsl    -lcanberra  -lacl -lattr -lgpm -ldl   -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.30/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -fstack-protector-strong -L/usr/local/lib  -L/usr/lib/perl5/5.30/core_perl/CORE -lperl -lpthread -ldl -lm -lcrypt -lutil -lc   -L/usr/lib -ltclstub8.6 -ldl -lz -lpthread -lm     
sgsoftware commented 4 years ago

Attached are an example of directory structure and screenshots of what I am getting after ':DirDiff d1 d2' initially (screen1.png - correct) and after going to the next file (screen2.png - messed up). example.zip screen1 screen2

will133 commented 4 years ago

Can you try to run :messages and send me what you get? There seems to be a bug in vim where the GotoDiffWindow actually failed with this E479: No match error, which is somewhat similar to https://github.com/vim/vim/issues/4610.

sgsoftware commented 4 years ago

The only output from :messages is: Messages maintainer: Bram Moolenaar Bram@vim.org

will133 commented 4 years ago

It looks like there's something wrong with the :drop command in vim 8.2 on Linux. This is related to this issue here: https://github.com/vim/vim/issues/1503. Basically the wildignore option affects the :drop command somehow (like :args).

The script basically uses :drop when it's ensuring the cursor would land on the diff buffer (which is this /tmp/xyz/0 file), the :drop /tmp/xyz/0 would return E479: No match (only sometimes when wildignore is set to have /tmp/ pattern). I don't really understand the context of this bug and why they haven't fixed this yet. I may have to find some other way to work around it.

will133 commented 4 years ago

I tried to add set wildignore= before the :drop line and it seems to working after that. I don't really want to mess with the people settings of wildignore though, so I need to think about this about on how to fix this. Any suggestion is welcomed!

will133 commented 4 years ago

I believe this has been fix in master now. I basically worked around it by doing a simulated drop function with other functions. Please see if it would work for you.

sgsoftware commented 4 years ago

Latest master works fine. Thanks!