diff options
Diffstat (limited to 'src/nvim/sign.c')
-rw-r--r-- | src/nvim/sign.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/nvim/sign.c b/src/nvim/sign.c index 9caacd8115..bd7979153e 100644 --- a/src/nvim/sign.c +++ b/src/nvim/sign.c @@ -172,20 +172,28 @@ int sign_cmp(const void *p1, const void *p2) { const MTKey *s1 = (MTKey *)p1; const MTKey *s2 = (MTKey *)p2; - int n = s1->pos.row - s2->pos.row; - if (n) { - return n; + if (s1->pos.row != s2->pos.row) { + return s1->pos.row > s2->pos.row ? 1 : -1; } DecorSignHighlight *sh1 = decor_find_sign(mt_decor(*s1)); DecorSignHighlight *sh2 = decor_find_sign(mt_decor(*s2)); assert(sh1 && sh2); - n = sh2->priority - sh1->priority; + if (sh1->priority != sh2->priority) { + return sh1->priority < sh2->priority ? 1 : -1; + } + + if (s1->id != s2->id) { + return s1->id < s2->id ? 1 : -1; + } + + if (sh1->sign_add_id != sh2->sign_add_id) { + return sh1->sign_add_id < sh2->sign_add_id ? 1 : -1; + } - return n ? n : (n = (int)(s2->id - s1->id)) - ? n : (sh2->sign_add_id - sh1->sign_add_id); + return 0; } /// Delete the specified sign(s) |