diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2014-11-29 13:58:45 +0100 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2014-12-08 22:05:05 +0100 |
commit | cccc46acd7aa1a9b89f7252a074705a1f7039c61 (patch) | |
tree | 039fcaa726ad8e903214e1bb93e3f8da8f5f52b0 | |
parent | 5476250ba3208c92cc9865becf540fdd335c2927 (diff) | |
download | rneovim-cccc46acd7aa1a9b89f7252a074705a1f7039c61.tar.gz rneovim-cccc46acd7aa1a9b89f7252a074705a1f7039c61.tar.bz2 rneovim-cccc46acd7aa1a9b89f7252a074705a1f7039c61.zip |
clipboard: better error messages when provider not available
-rw-r--r-- | src/nvim/ops.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index e8cad24b92..1513eb2cbc 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -75,6 +75,7 @@ static struct yankreg *y_current; /* ptr to current yankreg */ static int y_append; /* TRUE when appending */ static struct yankreg *y_previous = NULL; /* ptr to last written yankreg */ +static bool clipboard_didwarn_unnamed = false; /* * structure used by block_prep, op_delete and op_yank for blockwise operators * also op_change, op_shift, op_insert, op_replace - AKelly @@ -5208,17 +5209,27 @@ static void free_register(struct yankreg *reg) } // return target register -static int check_clipboard_name(int *name) { +static int adjust_clipboard_name(int *name) { if (*name == '*' || *name == '+') { + if(!eval_has_provider("clipboard")) { + EMSG("clipboard: provider is not available"); + return -1; + } return CLIP_REGISTER; - } else if (*name == NUL && eval_has_provider("clipboard")) { + } else if (*name == NUL && (cb_flags & (CB_UNNAMED | CB_UNNAMEDPLUS))) { + if(!eval_has_provider("clipboard")) { + if (!clipboard_didwarn_unnamed) { + msg((char_u*)"clipboard: provider not available, ignoring clipboard=unnamed[plus]"); + clipboard_didwarn_unnamed = true; + } + return -1; + } if (cb_flags & CB_UNNAMEDPLUS) { *name = '+'; - return 0; //unnamed - } else if (cb_flags & CB_UNNAMED) { + } else { *name = '*'; - return 0; //unnamed } + return 0; //unnamed } // don't do anything for other register names return -1; @@ -5226,7 +5237,7 @@ static int check_clipboard_name(int *name) { static void get_clipboard(int name) { - int ireg = check_clipboard_name(&name); + int ireg = adjust_clipboard_name(&name); if (ireg < 0) { return; } @@ -5314,12 +5325,12 @@ err: } reg->y_array = NULL; reg->y_size = 0; - EMSG("Clipboard provider returned invalid data"); + EMSG("clipboard: provider returned invalid data"); } static void set_clipboard(int name) { - int ireg = check_clipboard_name(&name); + int ireg = adjust_clipboard_name(&name); if (ireg < 0) { return; } |