aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/buffer.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-05-24 01:10:59 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-05-24 01:24:14 -0400
commit83c9d1df1b11326327c69cb009235a2e02fb31ed (patch)
treeef5b627b693239099ebcc3e0cbd7f560d7409c01 /src/nvim/buffer.c
parent9c437439452978fec4f858323e532b6cd4052608 (diff)
downloadrneovim-83c9d1df1b11326327c69cb009235a2e02fb31ed.tar.gz
rneovim-83c9d1df1b11326327c69cb009235a2e02fb31ed.tar.bz2
rneovim-83c9d1df1b11326327c69cb009235a2e02fb31ed.zip
vim-patch:8.0.1208: 'statusline' drops empty group with highlight change
Problem: 'statusline' drops empty group with highlight change. Solution: Do not drop an empty group if it changes highlighting. (Marius Gedminas, closes vim/vim#2228) https://github.com/vim/vim/commit/6b89dbb55f84c485310c8c9e094dbafe3ecbace6
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r--src/nvim/buffer.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index d944c654b0..88e19fd135 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -3480,15 +3480,25 @@ int build_stl_str_hl(
// Otherwise there would be no reason to do this step.
if (curitem > groupitems[groupdepth] + 1
&& items[groupitems[groupdepth]].minwid == 0) {
- bool has_normal_items = false;
- for (long n = groupitems[groupdepth] + 1; n < curitem; n++) {
- if (items[n].type == Normal || items[n].type == Highlight) {
- has_normal_items = true;
+ // remove group if all items are empty and highlight group
+ // doesn't change
+ int group_start_userhl = 0;
+ int group_end_userhl = 0;
+ int n;
+ for (n = 0; n < groupitems[groupdepth]; n++) {
+ if (items[n].type == Highlight) {
+ group_start_userhl = items[n].minwid;
+ }
+ }
+ for (n = groupitems[groupdepth] + 1; n < curitem; n++) {
+ if (items[n].type == Normal) {
break;
}
+ if (items[n].type == Highlight) {
+ group_end_userhl = items[n].minwid;
+ }
}
-
- if (!has_normal_items) {
+ if (n == curitem && group_start_userhl == group_end_userhl) {
out_p = t;
group_len = 0;
}