Skip to content

Instantly share code, notes, and snippets.

@mattn
Created January 2, 2016 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattn/b990965e20b317e2d5d2 to your computer and use it in GitHub Desktop.
Save mattn/b990965e20b317e2d5d2 to your computer and use it in GitHub Desktop.
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 9da5c09..c313583 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -7757,20 +7757,37 @@ ex_smile(eap)
exarg_T *eap UNUSED;
{
static char *code = "\34 \4o\14$\4ox\30 \2o\30$\1ox\25 \2o\36$\1o\11 \1o\1$\3 \2$\1 \1o\1$x\5 \1o\1 \1$\1 \2o\10 \1o\44$\1o\7 \2$\1 \2$\1 \2$\1o\1$x\2 \2o\1 \1$\1 \1$\1 \1\"\1$\6 \1o\11$\4 \15$\4 \11$\1o\7 \3$\1o\2$\1o\1$x\2 \1\"\6$\1o\1$\5 \1o\11$\6 \13$\6 \12$\1o\4 \10$x\4 \7$\4 \13$\6 \13$\6 \27$x\4 \27$\4 \15$\4 \16$\2 \3\"\3$x\5 \1\"\3$\4\"\61$\5 \1\"\3$x\6 \3$\3 \1o\62$\5 \1\"\3$\1ox\5 \1o\2$\1\"\3 \63$\7 \3$\1ox\5 \3$\4 \55$\1\"\1 \1\"\6$\5o\4$\1ox\4 \1o\3$\4o\5$\2 \45$\3 \1o\21$x\4 \10$\1\"\4$\3 \42$\5 \4$\10\"x\3 \4\"\7 \4$\4 \1\"\34$\1\"\6 \1o\3$x\16 \1\"\3$\1o\5 \3\"\22$\1\"\2$\1\"\11 \3$x\20 \3$\1o\12 \1\"\2$\2\"\6$\4\"\13 \1o\3$x\21 \4$\1o\40 \1o\3$\1\"x\22 \1\"\4$\1o\6 \1o\6$\1o\1\"\4$\1o\10 \1o\4$x\24 \1\"\5$\2o\5 \2\"\4$\1o\5$\1o\3 \1o\4$\2\"x\27 \2\"\5$\4o\2 \1\"\3$\1o\11$\3\"x\32 \2\"\7$\2o\1 \12$x\42 \4\"\13$x\46 \14$x\47 \12$\1\"x\50 \1\"\3$\4\"x";
- char *p;
+ char *p, buf[2];
+ int c1, c2, c3;
int n;
+ do_highlight((char_u *)("Smile1 ctermfg=Red guifg=Red"), FALSE, TRUE);
+ do_highlight((char_u *)("Smile2 ctermfg=Yellow guifg=Yellow"), FALSE, TRUE);
+ do_highlight((char_u *)("Smile3 ctermfg=Magenta guifg=Magenta"), FALSE, TRUE);
+ c1 = syn_id2attr(syn_name2id("Smile1"));
+ c2 = syn_id2attr(syn_name2id("Smile2"));
+ c3 = syn_id2attr(syn_name2id("Smile3"));
+
+ buf[1] = '\0';
msg_start();
msg_putchar('\n');
for (p = code; *p != NUL; ++p)
+ {
if (*p == 'x')
msg_putchar('\n');
- else
- for (n = *p++; n > 0; --n)
- if (*p == 'o' || *p == '$')
- msg_putchar_attr(*p, hl_attr(HLF_L));
- else
- msg_putchar(*p);
+ else {
+ for (n = *p++; n > 0; --n) {
+ buf[0] = *p;
+ switch (*p)
+ {
+ case 'o': msg_puts_attr(buf, c1); break;
+ case '$': msg_puts_attr(buf, c2); break;
+ case '"': msg_puts_attr(buf, c3); break;
+ default: msg_putchar(buf[0]); break;
+ }
+ }
+ }
+ }
msg_clr_eos();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment