To: vim_dev@googlegroups.com Subject: Patch 8.0.1361 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1361 Problem: Some users don't want to diff with hidden buffers. Solution: Add the "hiddenoff" item to 'diffopt'. (Alisue, closes #2394) Files: runtime/doc/options.txt, src/buffer.c, src/diff.c, src/proto/diff.pro, src/testdir/test_diffmode.vim *** ../vim-8.0.1360/runtime/doc/options.txt 2017-11-26 14:56:11.124133298 +0100 --- runtime/doc/options.txt 2017-12-01 20:30:13.033898380 +0100 *************** *** 2560,2565 **** --- 2634,2642 ---- vertical Start diff mode with vertical splits (unless explicitly specified otherwise). + hiddenoff Do not use diff mode for a buffer when it + becomes hidden. + foldcolumn:{n} Set the 'foldcolumn' option to {n} when starting diff mode. Without this 2 is used. *** ../vim-8.0.1360/src/buffer.c 2017-10-26 18:21:20.166104258 +0200 --- src/buffer.c 2017-12-01 20:25:59.619252569 +0100 *************** *** 593,598 **** --- 593,603 ---- if (buf->b_nwindows > 0) --buf->b_nwindows; + #ifdef FEAT_DIFF + if (diffopt_hiddenoff() && !unload_buf && buf->b_nwindows == 0) + diff_buf_delete(buf); /* Clear 'diff' for hidden buffer. */ + #endif + /* Return when a window is displaying the buffer or when it's not * unloaded. */ if (buf->b_nwindows > 0 || !unload_buf) *** ../vim-8.0.1360/src/diff.c 2017-09-04 23:21:02.997152615 +0200 --- src/diff.c 2017-12-01 20:25:59.619252569 +0100 *************** *** 23,28 **** --- 23,29 ---- #define DIFF_IWHITE 4 /* ignore change in white space */ #define DIFF_HORIZONTAL 8 /* horizontal splits */ #define DIFF_VERTICAL 16 /* vertical splits */ + #define DIFF_HIDDEN_OFF 32 /* diffoff when hidden */ static int diff_flags = DIFF_FILLER; #define LBUFLEN 50 /* length of line in diff file */ *************** *** 1924,1929 **** --- 1925,1935 ---- p += 11; diff_foldcolumn_new = getdigits(&p); } + else if (STRNCMP(p, "hiddenoff", 9) == 0) + { + p += 9; + diff_flags_new |= DIFF_HIDDEN_OFF; + } if (*p != ',' && *p != NUL) return FAIL; if (*p == ',') *************** *** 1962,1967 **** --- 1968,1982 ---- } /* + * Return TRUE if 'diffopt' contains "hiddenoff". + */ + int + diffopt_hiddenoff(void) + { + return (diff_flags & DIFF_HIDDEN_OFF) != 0; + } + + /* * Find the difference within a changed line. * Returns TRUE if the line was added, no other buffer has it. */ *** ../vim-8.0.1360/src/proto/diff.pro 2016-10-18 14:50:14.731694041 +0200 --- src/proto/diff.pro 2017-12-01 20:25:59.619252569 +0100 *************** *** 16,21 **** --- 16,22 ---- void diff_set_topline(win_T *fromwin, win_T *towin); int diffopt_changed(void); int diffopt_horizontal(void); + int diffopt_hiddenoff(void); int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp); int diff_infold(win_T *wp, linenr_T lnum); void nv_diffgetput(int put, long count); *** ../vim-8.0.1360/src/testdir/test_diffmode.vim 2017-10-15 22:07:35.207683184 +0200 --- src/testdir/test_diffmode.vim 2017-12-01 20:25:59.619252569 +0100 *************** *** 375,380 **** --- 375,403 ---- %bwipe endfunc + func Test_diffopt_hiddenoff() + set diffopt=filler,foldcolumn:0,hiddenoff + e! one + call setline(1, ['Two', 'Three']) + redraw + let normattr = screenattr(1, 1) + diffthis + botright vert new two + call setline(1, ['One', 'Four']) + diffthis + redraw + call assert_notequal(normattr, screenattr(1, 1)) + set hidden + close + redraw + " should not diffing with hidden buffer two while 'hiddenoff' is enabled + call assert_equal(normattr, screenattr(1, 1)) + + bwipe! + bwipe! + set hidden& diffopt& + endfunc + func Test_diffoff_hidden() set diffopt=filler,foldcolumn:0 e! one *** ../vim-8.0.1360/src/version.c 2017-11-30 22:07:03.896029952 +0100 --- src/version.c 2017-12-01 20:28:10.574552212 +0100 *************** *** 773,774 **** --- 773,776 ---- { /* Add new patch number below this line */ + /**/ + 1361, /**/ -- Q: Should I clean my house or work on Vim? A: Whatever contains more bugs. /// 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 ///