Mercurial > vim
changeset 6383:9c9c70625444 v7.4.523
updated for version 7.4.523
Problem: When the X11 server is stopped and restarted, while Vim is kept in
the background, copy/paste no longer works. (Issue 203)
Solution: Setup the clipboard again. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 19 Nov 2014 18:48:46 +0100 |
parents | 94ae8b2fd654 |
children | cf73717ada83 |
files | src/os_unix.c src/version.c |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_unix.c +++ b/src/os_unix.c @@ -1586,12 +1586,15 @@ x_IOerror_check(dpy) * An X IO Error handler, used to catch terminal errors. */ static int x_IOerror_handler __ARGS((Display *dpy)); +static void may_restore_clipboard __ARGS((void)); +static int xterm_dpy_was_reset = FALSE; static int x_IOerror_handler(dpy) Display *dpy UNUSED; { xterm_dpy = NULL; + xterm_dpy_was_reset = TRUE; x11_window = 0; x11_display = NULL; xterm_Shell = (Widget)0; @@ -1602,6 +1605,22 @@ x_IOerror_handler(dpy) return 0; /* avoid the compiler complains about missing return value */ # endif } + +/* + * If the X11 connection was lost try to restore it. + * Helps when the X11 server was stopped and restarted while Vim was inactive + * (e.g. though tmux). + */ + static void +may_restore_clipboard() +{ + if (xterm_dpy_was_reset) + { + xterm_dpy_was_reset = FALSE; + setup_term_clip(); + get_x11_title(FALSE); + } +} #endif /* @@ -5274,6 +5293,7 @@ RealWaitForChar(fd, msec, check_for_gpm) } # endif # ifdef FEAT_XCLIPBOARD + may_restore_clipboard(); if (xterm_Shell != (Widget)0) { xterm_idx = nfd; @@ -5426,6 +5446,7 @@ select_eintr: } # endif # ifdef FEAT_XCLIPBOARD + may_restore_clipboard(); if (xterm_Shell != (Widget)0) { FD_SET(ConnectionNumber(xterm_dpy), &rfds);