aboutsummaryrefslogtreecommitdiffstats
path: root/kirc.c
diff options
context:
space:
mode:
Diffstat (limited to 'kirc.c')
-rw-r--r--kirc.c90
1 files changed, 81 insertions, 9 deletions
diff --git a/kirc.c b/kirc.c
index 28963cf..67ebb67 100644
--- a/kirc.c
+++ b/kirc.c
@@ -485,9 +485,10 @@ static int edit(state l)
}
char seq[3];
switch (c) {
+ case 10:
case 13:
edit_enter();
- return 1; /* enter */
+ return 1; /* enter */ /* ctrl+j */
case 3:
errno = EAGAIN;
return -1; /* ctrl-c */
@@ -535,7 +536,7 @@ static int edit(state l)
history_len = HIS_MAX - 1;
history_wrap = 0;
}
- return -1;
+ return 0;
}
edit_delete(l);
return 0;
@@ -587,6 +588,72 @@ static inline void state_reset(state l)
history_add("");
}
+static void lnicks_add(lnicks_t **head, const char *n)
+{
+ lnicks_t *tmp;
+ lnicks_t *new;
+ if (n == NULL) {
+ return;
+ }
+ new = (lnicks_t*)malloc(sizeof(lnicks_t));
+ if (new == NULL) {
+ return;
+ }
+ if (strlen(n) < WRAP_LEN) {
+ strcpy(new->nick, n);
+ }
+ else {
+ memcpy(new->nick, n, WRAP_LEN);
+ new->nick[WRAP_LEN - 1] = '\0';
+ }
+ new->next = NULL;
+ if (*head == NULL) {
+ *head = new;
+ }
+ else {
+ tmp = *head;
+ while (tmp->next != NULL) {
+ tmp = tmp->next;
+ }
+ tmp->next = new;
+ }
+}
+
+static void lnicks_clean(lnicks_t **head)
+{
+ lnicks_t *ptr;
+ lnicks_t *next;
+ ptr = *head;
+ if (head == NULL || ptr == NULL) {
+ return;
+ }
+ while (ptr != NULL) {
+ next = ptr->next;
+ free(ptr);
+ ptr = NULL;
+ ptr = next;
+ }
+ *head = NULL;
+}
+
+static void debug_lnicks_print(lnicks_t *lnicks)
+{
+ lnicks_t *ptr;
+ ptr = lnicks;
+ if (lnicks == NULL) {
+ return;
+ }
+ printf("[");
+ while (ptr != NULL) {
+ printf("%s", ptr->nick);
+ if (ptr->next != NULL) {
+ printf(" ");
+ }
+ ptr = ptr->next;
+ }
+ printf("]\r\n");
+}
+
static char *ctime_now(char *buf)
{
struct tm tm_;
@@ -750,7 +817,7 @@ static int connection_initialize(void)
return 0;
}
-static void message_wrap(param p, const char *nick)
+static void message_wrap(param p)
{
if (!p->message) {
return;
@@ -758,7 +825,7 @@ static void message_wrap(param p, const char *nick)
char color[8];
color[0] = '\0';
if (strstr(p->message, nick) != NULL) {
- strcpy(color, "\x1b[36;1m");
+ strcpy(color, "\x1b[33;1m");
}
char *tok;
size_t spaceleft = p->maxcols - (9 + strlen(p->nickname) + p->offset);
@@ -1174,7 +1241,7 @@ static void param_print_private(param p)
} else {
if (!memcmp(p->message, "\x01" "ACTION", sizeof("\x01" "ACTION") - 1)) {
p->message += sizeof("ACTION");
- p->offset += sizeof(" \x1b[33;1m* ");
+ p->offset += sizeof(" \x1b[33m* ");
printf(" %s* %s\x1b[0m ", color, p->nickname);
}
else {
@@ -1276,12 +1343,12 @@ static void raw_parser(char *string)
}if ((!memcmp(p.command, "PRIVMSG", sizeof("PRIVMSG") - 1)) || (!memcmp(p.command, "NOTICE", sizeof("NOTICE") - 1))) {
filter_colors(p.message); /* this can be slow if -f is passed to kirc */
param_print_private(&p);
- message_wrap(&p, nick);
+ message_wrap(&p);
printf("\x1b[0m\r\n");
return;
}
param_print_channel(&p);
- message_wrap(&p, nick);
+ message_wrap(&p);
printf("\x1b[0m\r\n");
}
@@ -1724,7 +1791,7 @@ static inline void chan_privmsg_command(state l)
}
}
-static void handle_user_input(state l, const char *nick)
+static void handle_user_input(state l)
{
if (*l->buf == '\0') {
return;
@@ -2005,6 +2072,9 @@ int main(int argc, char **argv)
state_t l;
memset(&l, 0, sizeof(l));
state_reset(&l);
+ lnicks_t *lnicks = NULL;
+ lnicks_add(&lnicks, NULL);
+ debug_lnicks_print(lnicks);
int rc, editReturnFlag = 0;
if (enable_raw_mode(ttyinfd) == -1) {
return 1;
@@ -2024,10 +2094,11 @@ int main(int argc, char **argv)
editReturnFlag = edit(&l);
if (editReturnFlag > 0) {
history_add(l.buf);
- handle_user_input(&l, nick);
+ handle_user_input(&l);
state_reset(&l);
} else if (editReturnFlag < 0) {
puts("\r\n");
+ lnicks_clean(&lnicks);
return 0;
}
refresh_line(&l);
@@ -2038,6 +2109,7 @@ int main(int argc, char **argv)
return 1;
}
if (rc != 0) {
+ lnicks_clean(&lnicks);
return 0;
}
refresh_line(&l);