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);