@@ -739,10 +739,10 @@ static struct fst
739739 {"reltimefloat" , 1 , 1 , f_reltimefloat },
740740#endif
741741 {"reltimestr" , 1 , 1 , f_reltimestr },
742- {"remote_expr" , 2 , 3 , f_remote_expr },
742+ {"remote_expr" , 2 , 4 , f_remote_expr },
743743 {"remote_foreground" , 1 , 1 , f_remote_foreground },
744744 {"remote_peek" , 1 , 2 , f_remote_peek },
745- {"remote_read" , 1 , 1 , f_remote_read },
745+ {"remote_read" , 1 , 2 , f_remote_read },
746746 {"remote_send" , 2 , 3 , f_remote_send },
747747 {"remote_startserver" , 1 , 1 , f_remote_startserver },
748748 {"remove" , 2 , 3 , f_remove },
@@ -8534,6 +8534,7 @@ remote_common(typval_T *argvars, typval_T *rettv, int expr)
85348534 char_u * keys ;
85358535 char_u * r = NULL ;
85368536 char_u buf [NUMBUFLEN ];
8537+ int timeout = 0 ;
85378538# ifdef WIN32
85388539 HWND w ;
85398540# elif defined(FEAT_X11 )
@@ -8549,18 +8550,19 @@ remote_common(typval_T *argvars, typval_T *rettv, int expr)
85498550 if (check_connection () == FAIL )
85508551 return ;
85518552# endif
8553+ if (argvars [2 ].v_type != VAR_UNKNOWN
8554+ && argvars [3 ].v_type != VAR_UNKNOWN )
8555+ timeout = get_tv_number (& argvars [3 ]);
85528556
85538557 server_name = get_tv_string_chk (& argvars [0 ]);
85548558 if (server_name == NULL )
85558559 return ; /* type error; errmsg already given */
85568560 keys = get_tv_string_buf (& argvars [1 ], buf );
8557- # ifdef WIN32
8558- if (serverSendToVim (server_name , keys , & r , & w , expr , TRUE) < 0 )
8559- # elif defined(FEAT_X11 )
8560- if (serverSendToVim (X_DISPLAY , server_name , keys , & r , & w , expr , 0 , TRUE)
8561- < 0 )
8562- # elif defined(MAC_CLIENTSERVER )
8563- if (serverSendToVim (server_name , keys , & r , & w , expr , TRUE) < 0 )
8561+ # if defined(WIN32 ) || defined(MAC_CLIENTSERVER )
8562+ if (serverSendToVim (server_name , keys , & r , & w , expr , timeout , TRUE) < 0 )
8563+ # else
8564+ if (serverSendToVim (X_DISPLAY , server_name , keys , & r , & w , expr , timeout ,
8565+ 0 , TRUE) < 0 )
85648566# endif
85658567 {
85668568 if (r != NULL )
@@ -8578,13 +8580,15 @@ remote_common(typval_T *argvars, typval_T *rettv, int expr)
85788580 char_u str [30 ];
85798581 char_u * idvar ;
85808582
8581- sprintf ((char * )str , PRINTF_HEX_LONG_U , (long_u )w );
8582- v .di_tv .v_type = VAR_STRING ;
8583- v .di_tv .vval .v_string = vim_strsave (str );
85848583 idvar = get_tv_string_chk (& argvars [2 ]);
8585- if (idvar != NULL )
8584+ if (idvar != NULL && * idvar != NUL )
8585+ {
8586+ sprintf ((char * )str , PRINTF_HEX_LONG_U , (long_u )w );
8587+ v .di_tv .v_type = VAR_STRING ;
8588+ v .di_tv .vval .v_string = vim_strsave (str );
85868589 set_var (idvar , & v .di_tv , FALSE);
8587- vim_free (v .di_tv .vval .v_string );
8590+ vim_free (v .di_tv .vval .v_string );
8591+ }
85888592 }
85898593}
85908594#endif
@@ -8656,7 +8660,7 @@ f_remote_peek(typval_T *argvars UNUSED, typval_T *rettv)
86568660 rettv -> vval .v_number = -1 ;
86578661 else
86588662 {
8659- s = serverGetReply ((HWND )n , FALSE, FALSE, FALSE);
8663+ s = serverGetReply ((HWND )n , FALSE, FALSE, FALSE, 0 );
86608664 rettv -> vval .v_number = (s != NULL );
86618665 }
86628666# elif defined(FEAT_X11 )
@@ -8695,19 +8699,26 @@ f_remote_read(typval_T *argvars UNUSED, typval_T *rettv)
86958699
86968700 if (serverid != NULL && !check_restricted () && !check_secure ())
86978701 {
8702+ int timeout = 0 ;
86988703# ifdef WIN32
86998704 /* The server's HWND is encoded in the 'id' parameter */
87008705 long_u n = 0 ;
8706+ # endif
8707+
8708+ if (argvars [1 ].v_type != VAR_UNKNOWN )
8709+ timeout = get_tv_number (& argvars [1 ]);
87018710
8711+ # ifdef WIN32
87028712 sscanf ((char * )serverid , SCANF_HEX_LONG_U , & n );
87038713 if (n != 0 )
8704- r = serverGetReply ((HWND )n , FALSE, TRUE, TRUE);
8714+ r = serverGetReply ((HWND )n , FALSE, TRUE, TRUE, timeout );
87058715 if (r == NULL )
8706- # elif defined(FEAT_X11 )
8707- if (check_connection () == FAIL || serverReadReply (X_DISPLAY ,
8708- serverStrToWin (serverid ), & r , FALSE) < 0 )
87098716# elif defined(MAC_CLIENTSERVER )
87108717 if (serverReadReply (serverStrToPort (serverid ), & r ) < 0 )
8718+ # else
8719+ if (check_connection () == FAIL
8720+ || serverReadReply (X_DISPLAY , serverStrToWin (serverid ),
8721+ & r , FALSE, timeout ) < 0 )
87118722# endif
87128723 EMSG (_ ("E277: Unable to read a server reply" ));
87138724 }
0 commit comments