ex_echo: reuse code from message.c to show arg to user

This commit is contained in:
Alexandre Dubray
2018-02-17 22:31:24 +01:00
committed by Björn Linse
parent 7f2e43c637
commit 67bac681ea
2 changed files with 21 additions and 33 deletions

View File

@ -19593,24 +19593,7 @@ void ex_echo(exarg_T *eap)
msg_puts_attr(" ", echo_attr);
}
char *tofree = encode_tv2echo(&rettv, NULL);
const char *p = tofree;
if (p != NULL) {
for (; *p != NUL && !got_int; ++p) {
if (*p == '\n' || *p == '\r' || *p == TAB) {
if (*p != TAB && needclr) {
/* remove any text still there from the command */
msg_clr_eos();
needclr = false;
}
msg_putchar_attr((uint8_t)(*p), echo_attr);
} else {
int i = (*mb_ptr2len)((const char_u *)p);
(void)msg_outtrans_len_attr((char_u *)p, i, echo_attr);
p += i - 1;
}
}
}
msg_echo_show(tofree, echo_attr);
xfree(tofree);
}
tv_clear(&rettv);

View File

@ -173,23 +173,9 @@ bool msg_attr_skip(const char *s, const int attr, int *const call)
return false;
}
bool msg_echo_attr_keep(const char *s, const int attr, const int keep)
void msg_echo_show(const char *s, int attr)
FUNC_ATTR_NONNULL_ALL
{
static int entered = 0;
if (msg_attr_skip(s, attr, &entered)) {
return true;
}
msg_start();
char *const buf = (char *)msg_strtrunc((char_u *)s, false);
if (buf != NULL) {
s = buf;
}
const char *next_spec = s;
while (next_spec != NULL) {
@ -212,6 +198,25 @@ bool msg_echo_attr_keep(const char *s, const int attr, const int keep)
if (*s != NUL) {
msg_outtrans_attr((char_u *)s, attr);
}
}
bool msg_echo_attr_keep(const char *s, const int attr, const int keep)
FUNC_ATTR_NONNULL_ALL
{
static int entered = 0;
if (msg_attr_skip(s, attr, &entered)) {
return true;
}
msg_start();
char *const buf = (char *)msg_strtrunc((char_u *)s, false);
if (buf != NULL) {
s = buf;
}
msg_echo_show(s, attr);
msg_clr_eos();
const bool retval = msg_end();