1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
|
To: vim_dev@googlegroups.com
Subject: Patch 8.1.1307
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
Patch 8.1.1307
Problem: Cannot reconnect to the X server after it restarted.
Solution: Add the :xrestore command. (Adrian Kocis, closes #844)
Files: runtime/doc/index.txt, runtime/doc/various.txt, src/os_unix.c,
src/proto/os_unix.pro, src/globals.h, src/ex_cmds.h,
src/ex_cmdidxs.h, src/ex_docmd.c, src/testdir/test_paste.vim
*** ../vim-8.1.1306/runtime/doc/index.txt 2019-05-05 18:11:46.316590662 +0200
--- runtime/doc/index.txt 2019-05-09 16:55:09.231912512 +0200
***************
*** 1714,1719 ****
--- 1714,1720 ----
|:xmapclear| :xmapc[lear] remove all mappings for Visual mode
|:xmap| :xm[ap] like ":map" but for Visual mode
|:xmenu| :xme[nu] add menu for Visual mode
+ |:xrestore| :xr[estore] restores the X server connection
|:xnoremap| :xn[oremap] like ":noremap" but for Visual mode
|:xnoremenu| :xnoreme[nu] like ":noremenu" but for Visual mode
|:xunmap| :xu[nmap] like ":unmap" but for Visual mode
*** ../vim-8.1.1306/runtime/doc/various.txt 2019-05-05 18:11:46.328590595 +0200
--- runtime/doc/various.txt 2019-05-09 16:57:27.375214537 +0200
***************
*** 704,709 ****
--- 704,724 ----
available when compiled with the |+netbeans_intg|
feature}
+ *:xrestore* *:xr*
+ :xr[estore] [display] Reinitializes the connection to the X11 server. Useful
+ after the X server restarts, e.g. when running Vim for
+ long time inside screen/tmux and connecting from
+ different machines).
+ [display] should be in the format of the $DISPLAY
+ environment variable (e.g. "localhost:10.0")
+ If [display] is omitted, then it reinitializes the
+ connection to the X11 server using the same value as
+ was used for the previous execution of this command.
+ If the value was never specified, then it uses the
+ value of $DISPLAY environment variable as it was when
+ Vim was started.
+ {only available when compiled with the |+clipboard|
+ feature}
*g_CTRL-A*
g CTRL-A Only when Vim was compiled with MEM_PROFILING defined
*** ../vim-8.1.1306/src/os_unix.c 2019-05-04 17:34:30.653353882 +0200
--- src/os_unix.c 2019-05-09 18:51:32.467132185 +0200
***************
*** 1659,1664 ****
--- 1659,1683 ----
get_x11_title(FALSE);
}
}
+
+ void
+ ex_xrestore(exarg_T *eap)
+ {
+ if (eap->arg != NULL && STRLEN(eap->arg) > 0)
+ {
+ if (xterm_display_allocated)
+ vim_free(xterm_display);
+ xterm_display = (char *)vim_strsave(eap->arg);
+ xterm_display_allocated = TRUE;
+ }
+ smsg(_("restoring display %s"), xterm_display == NULL
+ ? (char *)mch_getenv("DISPLAY") : xterm_display);
+
+ clear_xterm_clip();
+ x11_window = 0;
+ xterm_dpy_retry_count = 5; // Try reconnecting five times
+ may_restore_clipboard();
+ }
#endif
/*
***************
*** 1761,1766 ****
--- 1780,1789 ----
x11_window = (Window)atol(winid);
#ifdef FEAT_XCLIPBOARD
+ if (xterm_dpy == x11_display)
+ // x11_display may have been set to xterm_dpy elsewhere
+ x11_display_from = XD_XTERM;
+
if (xterm_dpy != NULL && x11_window != 0)
{
/* We may have checked it already, but Gnome terminal can move us to
***************
*** 7661,7667 ****
return TRUE;
}
! # if defined(FEAT_GUI) || defined(PROTO)
/*
* Destroy the display, window and app_context. Required for GTK.
*/
--- 7684,7690 ----
return TRUE;
}
! # if defined(FEAT_GUI) || defined(FEAT_XCLIPBOARD) || defined(PROTO)
/*
* Destroy the display, window and app_context. Required for GTK.
*/
*** ../vim-8.1.1306/src/proto/os_unix.pro 2019-05-04 17:34:30.653353882 +0200
--- src/proto/os_unix.pro 2019-05-09 17:11:39.922883130 +0200
***************
*** 13,18 ****
--- 13,19 ----
int vim_handle_signal(int sig);
int mch_check_win(int argc, char **argv);
int mch_input_isatty(void);
+ void ex_xrestore(exarg_T *eap);
int mch_can_restore_title(void);
int mch_can_restore_icon(void);
void mch_settitle(char_u *title, char_u *icon);
*** ../vim-8.1.1306/src/globals.h 2019-05-02 23:00:19.227658452 +0200
--- src/globals.h 2019-05-09 17:02:10.449779876 +0200
***************
*** 1279,1287 ****
#endif
#ifdef FEAT_XCLIPBOARD
! EXTERN char *xterm_display INIT(= NULL); /* xterm display name; points
! into argv[] */
! EXTERN Display *xterm_dpy INIT(= NULL); /* xterm display pointer */
#endif
#if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11)
EXTERN XtAppContext app_context INIT(= (XtAppContext)NULL);
--- 1279,1292 ----
#endif
#ifdef FEAT_XCLIPBOARD
! // xterm display name
! EXTERN char *xterm_display INIT(= NULL);
!
! // whether xterm_display was allocated, when FALSE it points into argv[]
! EXTERN int xterm_display_allocated INIT(= FALSE);
!
! // xterm display pointer
! EXTERN Display *xterm_dpy INIT(= NULL);
#endif
#if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11)
EXTERN XtAppContext app_context INIT(= (XtAppContext)NULL);
*** ../vim-8.1.1306/src/ex_cmds.h 2019-05-05 21:00:22.850603981 +0200
--- src/ex_cmds.h 2019-05-09 17:12:48.258535032 +0200
***************
*** 1739,1744 ****
--- 1739,1747 ----
EX(CMD_xnoremenu, "xnoremenu", ex_menu,
RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
ADDR_OTHER),
+ EX(CMD_xrestore, "xrestore", ex_xrestore,
+ EXTRA|TRLBAR|CMDWIN,
+ ADDR_NONE),
EX(CMD_xunmap, "xunmap", ex_unmap,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
ADDR_NONE),
*** ../vim-8.1.1306/src/ex_cmdidxs.h 2019-05-05 15:02:26.176319819 +0200
--- src/ex_cmdidxs.h 2019-05-09 17:12:57.942485705 +0200
***************
*** 29,36 ****
/* v */ 503,
/* w */ 521,
/* x */ 535,
! /* y */ 544,
! /* z */ 545
};
/*
--- 29,36 ----
/* v */ 503,
/* w */ 521,
/* x */ 535,
! /* y */ 545,
! /* z */ 546
};
/*
***************
*** 64,72 ****
/* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 },
/* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, 0 },
! /* x */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 },
/* y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
! static const int command_count = 558;
--- 64,72 ----
/* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 },
/* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, 0 },
! /* x */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0 },
/* y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
/* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
! static const int command_count = 559;
*** ../vim-8.1.1306/src/ex_docmd.c 2019-05-07 22:06:48.679310672 +0200
--- src/ex_docmd.c 2019-05-09 17:18:30.268791994 +0200
***************
*** 394,399 ****
--- 394,402 ----
#ifndef FEAT_TERMINAL
# define ex_terminal ex_ni
#endif
+ #if !defined(FEAT_X11) || !defined(FEAT_XCLIPBOARD)
+ # define ex_xrestore ex_ni
+ #endif
/*
* Declare cmdnames[].
*** ../vim-8.1.1306/src/testdir/test_paste.vim 2019-03-23 13:30:19.247356528 +0100
--- src/testdir/test_paste.vim 2019-05-09 18:42:01.986284433 +0200
***************
*** 110,112 ****
--- 110,138 ----
bwipe!
endfunc
+
+ func CheckCopyPaste()
+ call setline(1, ['copy this', ''])
+ normal 1G0"*y$
+ normal j"*p
+ call assert_equal('copy this', getline(2))
+ endfunc
+
+ func Test_xrestore()
+ if !has('xterm_clipboard')
+ return
+ endif
+ call ch_logfile('logfile', 'w')
+ let display = $DISPLAY
+ new
+ call CheckCopyPaste()
+
+ xrestore
+ call CheckCopyPaste()
+
+ exe "xrestore " .. display
+ call CheckCopyPaste()
+
+ call ch_logfile('', '')
+ bwipe!
+ endfunc
*** ../vim-8.1.1306/src/version.c 2019-05-09 15:12:45.180723879 +0200
--- src/version.c 2019-05-09 18:57:26.853142128 +0200
***************
*** 769,770 ****
--- 769,772 ----
{ /* Add new patch number below this line */
+ /**/
+ 1307,
/**/
--
NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE
MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// 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 ///
|