mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.0.0078: star register is unexpectedly changed when deleting
Problem: Star register is changed when deleting and both "unnamed" and "unnamedplus" are in 'clipboard'. Solution: Make the use of the star register work as documented. (Ernie Rael, closes #10669)
This commit is contained in:
committed by
Bram Moolenaar
parent
b03950fafa
commit
559f230fd6
@@ -1409,7 +1409,8 @@ op_yank(oparg_T *oap, int deleting, int mess)
|
||||
# ifdef FEAT_X11
|
||||
// If we were yanking to the '+' register, send result to selection.
|
||||
// Also copy to the '*' register, in case auto-select is off. But not when
|
||||
// 'clipboard' has "unnamedplus" and not "unnamed".
|
||||
// 'clipboard' has "unnamedplus" and not "unnamed"; and not when
|
||||
// deleting and both "unnamedplus" and "unnamed".
|
||||
if (clip_plus.available
|
||||
&& (curr == &(y_regs[PLUS_REGISTER])
|
||||
|| (!deleting && oap->regname == 0
|
||||
@@ -1425,6 +1426,8 @@ op_yank(oparg_T *oap, int deleting, int mess)
|
||||
if (!clip_isautosel_star()
|
||||
&& !clip_isautosel_plus()
|
||||
&& !((clip_unnamed | clip_unnamed_saved) == CLIP_UNNAMED_PLUS)
|
||||
&& !(deleting && (clip_unnamed | clip_unnamed_saved)
|
||||
== (CLIP_UNNAMED | CLIP_UNNAMED_PLUS))
|
||||
&& !did_star
|
||||
&& curr == &(y_regs[PLUS_REGISTER]))
|
||||
{
|
||||
|
@@ -233,6 +233,15 @@ func CheckX11BasedGui()
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" Command to check that there are two clipboards
|
||||
command CheckTwoClipboards call CheckTwoClipboards()
|
||||
func CheckTwoClipboards()
|
||||
" avoid changing the clipboard here, only X11 supports both
|
||||
if !has('X11')
|
||||
throw 'Skipped: requires two clipboards'
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" Command to check for satisfying any of the conditions.
|
||||
" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
|
||||
command -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
|
||||
|
@@ -411,6 +411,36 @@ func Test_clipboard_regs()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Test unnamed for both clipboard registers (* and +)
|
||||
func Test_clipboard_regs_both_unnamed()
|
||||
CheckNotGui
|
||||
CheckFeature clipboard_working
|
||||
CheckTwoClipboards
|
||||
|
||||
let @* = 'xxx'
|
||||
let @+ = 'xxx'
|
||||
|
||||
new
|
||||
|
||||
set clipboard=unnamed,unnamedplus
|
||||
call setline(1, ['foo', 'bar'])
|
||||
|
||||
" op_yank copies to both
|
||||
:1
|
||||
:normal yw
|
||||
call assert_equal('foo', getreg('*'))
|
||||
call assert_equal('foo', getreg('+'))
|
||||
|
||||
" op_delete only copies to '+'
|
||||
:2
|
||||
:normal dw
|
||||
call assert_equal('foo', getreg('*'))
|
||||
call assert_equal('bar', getreg('+'))
|
||||
|
||||
set clipboard&vim
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Test for restarting the current mode (insert or virtual replace) after
|
||||
" executing the contents of a register
|
||||
func Test_put_reg_restart_mode()
|
||||
|
@@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
78,
|
||||
/**/
|
||||
77,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user