aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hahler <git@thequod.de>2019-08-25 20:53:17 +0200
committerGitHub <noreply@github.com>2019-08-25 20:53:17 +0200
commitbec2336231f434948fcd17b35b67584234785996 (patch)
treec652210623667462a63f8c0432e01ac003a1a72d
parentc8fc285db60decb020c180622613d3880cbefbfe (diff)
downloadrneovim-bec2336231f434948fcd17b35b67584234785996.tar.gz
rneovim-bec2336231f434948fcd17b35b67584234785996.tar.bz2
rneovim-bec2336231f434948fcd17b35b67584234785996.zip
vim-patch:8.1.1913: not easy to compute the space on the command line (#10845)
Problem: Not easy to compute the space on the command line. Solution: Add v:echospace. (Daniel Hahler, closes vim/vim#4732) https://github.com/vim/vim/commit/37f4cbd46f5a6f2dd3a48d5fa4324dce37e4bd6c
-rw-r--r--runtime/doc/eval.txt7
-rw-r--r--src/nvim/eval.c3
-rw-r--r--src/nvim/eval.h1
-rw-r--r--src/nvim/option.c1
-rw-r--r--src/nvim/testdir/test_messages.vim17
5 files changed, 29 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 9bf964853a..209f1df4af 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1529,6 +1529,13 @@ v:dying Normally zero. When a deadly signal is caught it's set to
*v:exiting* *exiting-variable*
v:exiting Exit code, or |v:null| if not exiting. |VimLeave|
+ *v:echospace* *echospace-variable*
+v:echospace Number of screen cells that can be used for an `:echo` message
+ in the last screen line before causing the |hit-enter-prompt|.
+ Depends on 'showcmd', 'ruler' and 'columns'. You need to
+ check 'cmdheight' for whether there are full-width lines
+ available above the last line.
+
*v:errmsg* *errmsg-variable*
v:errmsg Last given error message.
Modifiable (can be set).
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 06254953cb..e59d6ee78e 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -419,6 +419,7 @@ static struct vimvar {
VV(VV_TYPE_DICT, "t_dict", VAR_NUMBER, VV_RO),
VV(VV_TYPE_FLOAT, "t_float", VAR_NUMBER, VV_RO),
VV(VV_TYPE_BOOL, "t_bool", VAR_NUMBER, VV_RO),
+ VV(VV_ECHOSPACE, "echospace", VAR_NUMBER, VV_RO),
VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO),
};
#undef VV
@@ -635,6 +636,8 @@ void eval_init(void)
set_vim_var_special(VV_NULL, kSpecialVarNull);
set_vim_var_special(VV_EXITING, kSpecialVarNull);
+ set_vim_var_nr(VV_ECHOSPACE, sc_col - 1);
+
set_reg_var(0); // default for v:register is not 0 but '"'
}
diff --git a/src/nvim/eval.h b/src/nvim/eval.h
index abe032a96e..e099de831a 100644
--- a/src/nvim/eval.h
+++ b/src/nvim/eval.h
@@ -115,6 +115,7 @@ typedef enum {
VV_TYPE_DICT,
VV_TYPE_FLOAT,
VV_TYPE_BOOL,
+ VV_ECHOSPACE,
VV_EXITING,
} VimVarIndex;
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 699f17acc5..c109e4e521 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -5456,6 +5456,7 @@ void comp_col(void)
if (ru_col <= 0) {
ru_col = 1;
}
+ set_vim_var_nr(VV_ECHOSPACE, sc_col - 1);
}
// Unset local option value, similar to ":set opt<".
diff --git a/src/nvim/testdir/test_messages.vim b/src/nvim/testdir/test_messages.vim
index 8b71d5f03e..265dee66ce 100644
--- a/src/nvim/testdir/test_messages.vim
+++ b/src/nvim/testdir/test_messages.vim
@@ -64,3 +64,20 @@ func Test_message_completion()
call feedkeys(":message \<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"message clear', @:)
endfunc
+
+func Test_echospace()
+ set noruler noshowcmd laststatus=1
+ call assert_equal(&columns - 1, v:echospace)
+ split
+ call assert_equal(&columns - 1, v:echospace)
+ set ruler
+ call assert_equal(&columns - 1, v:echospace)
+ close
+ call assert_equal(&columns - 19, v:echospace)
+ set showcmd noruler
+ call assert_equal(&columns - 12, v:echospace)
+ set showcmd ruler
+ call assert_equal(&columns - 29, v:echospace)
+
+ set ruler& showcmd&
+endfunc