mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -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
|
# ifdef FEAT_X11
|
||||||
// If we were yanking to the '+' register, send result to selection.
|
// 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
|
// 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
|
if (clip_plus.available
|
||||||
&& (curr == &(y_regs[PLUS_REGISTER])
|
&& (curr == &(y_regs[PLUS_REGISTER])
|
||||||
|| (!deleting && oap->regname == 0
|
|| (!deleting && oap->regname == 0
|
||||||
@@ -1425,6 +1426,8 @@ op_yank(oparg_T *oap, int deleting, int mess)
|
|||||||
if (!clip_isautosel_star()
|
if (!clip_isautosel_star()
|
||||||
&& !clip_isautosel_plus()
|
&& !clip_isautosel_plus()
|
||||||
&& !((clip_unnamed | clip_unnamed_saved) == CLIP_UNNAMED_PLUS)
|
&& !((clip_unnamed | clip_unnamed_saved) == CLIP_UNNAMED_PLUS)
|
||||||
|
&& !(deleting && (clip_unnamed | clip_unnamed_saved)
|
||||||
|
== (CLIP_UNNAMED | CLIP_UNNAMED_PLUS))
|
||||||
&& !did_star
|
&& !did_star
|
||||||
&& curr == &(y_regs[PLUS_REGISTER]))
|
&& curr == &(y_regs[PLUS_REGISTER]))
|
||||||
{
|
{
|
||||||
|
@@ -233,6 +233,15 @@ func CheckX11BasedGui()
|
|||||||
endif
|
endif
|
||||||
endfunc
|
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.
|
" Command to check for satisfying any of the conditions.
|
||||||
" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
|
" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
|
||||||
command -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
|
command -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
|
||||||
|
@@ -411,6 +411,36 @@ func Test_clipboard_regs()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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
|
" Test for restarting the current mode (insert or virtual replace) after
|
||||||
" executing the contents of a register
|
" executing the contents of a register
|
||||||
func Test_put_reg_restart_mode()
|
func Test_put_reg_restart_mode()
|
||||||
|
@@ -735,6 +735,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
78,
|
||||||
/**/
|
/**/
|
||||||
77,
|
77,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user