Mercurial > vim
diff src/message.c @ 8897:a410390e340b v7.4.1735
commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Apr 14 17:16:22 2016 +0200
patch 7.4.1735
Problem: It is not possible to only see part of the message history. It is
not possible to clear messages.
Solution: Add a count to ":messages" and a clear argument. (Yasuhiro
Matsumoto)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 14 Apr 2016 17:30:07 +0200 |
parents | 7c98c5d0298c |
children | b4dad96ade29 |
line wrap: on
line diff
--- a/src/message.c +++ b/src/message.c @@ -770,6 +770,22 @@ ex_messages(exarg_T *eap UNUSED) { struct msg_hist *p; char_u *s; + int c = 0; + + if (STRCMP(eap->arg, "clear") == 0) + { + int keep = eap->addr_count == 0 ? 0 : eap->line2; + + while (msg_hist_len > keep) + (void)delete_first_msg(); + return; + } + + if (*eap->arg != NUL) + { + EMSG(_(e_invarg)); + return; + } msg_hist_off = TRUE; @@ -779,7 +795,23 @@ ex_messages(exarg_T *eap UNUSED) _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"), hl_attr(HLF_T)); - for (p = first_msg_hist; p != NULL && !got_int; p = p->next) + p = first_msg_hist; + + if (eap->addr_count != 0) + { + /* Count total messages */ + for (; p != NULL && !got_int; p = p->next) + c++; + + c -= eap->line2; + + /* Skip without number of messages specified */ + for (p = first_msg_hist; p != NULL && !got_int && c > 0; + p = p->next, c--); + } + + /* Display what was not skipped. */ + for (; p != NULL && !got_int; p = p->next) if (p->msg != NULL) msg_attr(p->msg, p->attr);