Introduction
Introduction Statistics Contact Development Disclaimer Help
indent.c - lchat - A line oriented chat front end for ii.
git clone git://git.suckless.org/lchat
Log
Files
Refs
README
---
indent.c (1933B)
---
1 #include <stdbool.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <time.h>
6 #include <unistd.h>
7
8 #include "../util.h"
9
10 #define color1 37 /* message 1 */
11 #define color2 97 /* message 2 */
12 #define color3 31 /* bell match */
13 #define color4 2 /* meta data */
14
15 int
16 main(void)
17 {
18 char buf[BUFSIZ];
19 char timestr[BUFSIZ];
20 char old_nick[BUFSIZ] = "";
21 char *fmt = "%H:%M";
22 char *next, *nick, *word;
23 int cols = 80; /* terminal width */
24 int color = color1;
25 char *bell_file = ".bellmatch";
26
27 while (fgets(buf, sizeof buf, stdin) != NULL) {
28 time_t time = strtol(buf, &next, 10);
29 struct tm *tm = localtime(&time);
30
31 next++; /* skip space */
32
33 if (next == NULL || next[0] == '-' || time == 0) {
34 printf("\033[%dm%s\033[m", color4, buf);
35 fflush(stdout);
36 continue;
37 }
38
39 nick = strsep(&next, ">");
40 if (next == NULL) {
41 fputs(buf, stdout);
42 fflush(stdout);
43 continue;
44 }
45 nick++; /* skip '<' */
46 next++; /* skip space */
47
48 strftime(timestr, sizeof timestr, fmt, tm);
49
50 /* swap color */
51 if (strcmp(nick, old_nick) != 0)
52 color = color == color1 ? color2 : color1;
53
54 if (access(bell_file, R_OK) == 0 && bell_match(next, bel…
55 color = color3;
56
57 /* print prompt */
58 /* HH:MM nnnnnnnnnnnn ttttttttttttt */
59 // e[7;30;40m
60 printf("\033[%dm\033[K%s %*s", color, timestr, 12,
61 strcmp(nick, old_nick) == 0 ? "" : nick);
62
63 strlcpy(old_nick, nick, sizeof old_nick);
64
65 ssize_t pw = 18; /* prompt width */
66 ssize_t tw = cols - pw; /* text width */
67 bool first = true;
68
69 /* print indented text */
70 while ((word = strsep(&next, " ")) != NULL) {
71 tw -= strlen(word) + 1;
72 if (tw < 0 && !first)
73 printf("\n\033[%dm ", c…
74 if (tw < 0)
75 tw = cols - pw - strlen(word);
76
77 fputc(' ', stdout);
78 fputs(word, stdout);
79 first = false;
80 }
81 fputs("\033[0m\033[K", stdout); /* turn color off…
82 fflush(stdout);
83 }
84
85 return EXIT_SUCCESS;
86 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.