@@ -899,17 +899,21 @@ valid_yank_reg(
899899 *
900900 * If regname is 0 and writing, use register 0
901901 * If regname is 0 and reading, use previous register
902+ *
903+ * Return TRUE when the register should be inserted literally (selection or
904+ * clipboard).
902905 */
903- void
906+ int
904907get_yank_register (int regname , int writing )
905908{
906909 int i ;
910+ int ret = FALSE;
907911
908912 y_append = FALSE;
909913 if ((regname == 0 || regname == '"' ) && !writing && y_previous != NULL )
910914 {
911915 y_current = y_previous ;
912- return ;
916+ return ret ;
913917 }
914918 i = regname ;
915919 if (VIM_ISDIGIT (i ))
@@ -926,10 +930,16 @@ get_yank_register(int regname, int writing)
926930#ifdef FEAT_CLIPBOARD
927931 /* When selection is not available, use register 0 instead of '*' */
928932 else if (clip_star .available && regname == '* ')
933+ {
929934 i = STAR_REGISTER ;
935+ ret = TRUE;
936+ }
930937 /* When clipboard is not available, use register 0 instead of '+' */
931938 else if (clip_plus .available && regname == '+ ')
939+ {
932940 i = PLUS_REGISTER ;
941+ ret = TRUE;
942+ }
933943#endif
934944#ifdef FEAT_DND
935945 else if (!writing && regname == '~' )
@@ -940,6 +950,7 @@ get_yank_register(int regname, int writing)
940950 y_current = & (y_regs [i ]);
941951 if (writing ) /* remember the register we write into for do_put() */
942952 y_previous = y_current ;
953+ return ret ;
943954}
944955
945956#if defined(FEAT_CLIPBOARD ) || defined(PROTO )
@@ -1387,12 +1398,13 @@ put_in_typebuf(
13871398 int
13881399insert_reg (
13891400 int regname ,
1390- int literally ) /* insert literally, not as if typed */
1401+ int literally_arg ) /* insert literally, not as if typed */
13911402{
13921403 long i ;
13931404 int retval = OK ;
13941405 char_u * arg ;
13951406 int allocated ;
1407+ int literally = literally_arg ;
13961408
13971409 /*
13981410 * It is possible to get into an endless loop by having CTRL-R a in
@@ -1423,7 +1435,8 @@ insert_reg(
14231435 }
14241436 else /* name or number register */
14251437 {
1426- get_yank_register (regname , FALSE);
1438+ if (get_yank_register (regname , FALSE))
1439+ literally = TRUE;
14271440 if (y_current -> y_array == NULL )
14281441 retval = FAIL ;
14291442 else
@@ -1580,12 +1593,14 @@ get_spec_reg(
15801593 int
15811594cmdline_paste_reg (
15821595 int regname ,
1583- int literally , /* Insert text literally instead of "as typed" */
1596+ int literally_arg , /* Insert text literally instead of "as typed" */
15841597 int remcr ) /* don't add CR characters */
15851598{
15861599 long i ;
1600+ int literally = literally_arg ;
15871601
1588- get_yank_register (regname , FALSE);
1602+ if (get_yank_register (regname , FALSE))
1603+ literally = TRUE;
15891604 if (y_current -> y_array == NULL )
15901605 return FAIL ;
15911606
0 commit comments