Change prompt depending on command

weechat-hashes
C. McEnroe 2020-02-05 19:00:54 -05:00
parent a7b0ed9907
commit b2d35edcb2
3 changed files with 42 additions and 5 deletions

3
chat.h
View File

@ -112,6 +112,9 @@ void ircFormat(const char *format, ...)
void handle(struct Message msg); void handle(struct Message msg);
void command(size_t id, char *input); void command(size_t id, char *input);
const char *commandIsPrivmsg(size_t id, const char *input);
const char *commandIsNotice(size_t id, const char *input);
const char *commandIsAction(size_t id, const char *input);
enum Heat { Cold, Warm, Hot }; enum Heat { Cold, Warm, Hot };
void uiInit(void); void uiInit(void);

View File

@ -19,6 +19,27 @@
#include "chat.h" #include "chat.h"
const char *commandIsPrivmsg(size_t id, const char *input) {
if (id == Network || id == Debug) return NULL;
if (input[0] != '/') return input;
const char *space = strchr(&input[1], ' ');
const char *slash = strchr(&input[1], '/');
if (slash && (!space || slash < space)) return input;
return NULL;
}
const char *commandIsNotice(size_t id, const char *input) {
if (id == Network || id == Debug) return NULL;
if (strncmp(input, "/notice ", 8)) return NULL;
return &input[8];
}
const char *commandIsAction(size_t id, const char *input) {
if (id == Network || id == Debug) return NULL;
if (strncmp(input, "/me ", 4)) return NULL;
return &input[4];
}
void command(size_t id, char *input) { void command(size_t id, char *input) {
if (id == Debug) { if (id == Debug) {
ircFormat("%s\r\n", input); ircFormat("%s\r\n", input);

23
ui.c
View File

@ -479,16 +479,29 @@ static void inputUpdate(void) {
colorPair(mapColor(self.color), -1), colorPair(mapColor(self.color), -1),
NULL NULL
); );
const char *head = editHead();
const char *skip = NULL;
if (self.nick) { if (self.nick) {
// TODO: Check if input is command or action. size_t id = windows.active->id;
waddch(input, '<'); if (NULL != (skip = commandIsPrivmsg(id, head))) {
waddstr(input, self.nick); waddch(input, '<');
waddstr(input, "> "); waddstr(input, self.nick);
waddstr(input, "> ");
} else if (NULL != (skip = commandIsNotice(id, head))) {
waddch(input, '-');
waddstr(input, self.nick);
waddstr(input, "- ");
} else if (NULL != (skip = commandIsAction(id, head))) {
waddstr(input, "* ");
waddstr(input, self.nick);
waddch(input, ' ');
}
} }
if (skip) head = skip;
int y, x; int y, x;
struct Style style = Reset; struct Style style = Reset;
inputAdd(&style, editHead()); inputAdd(&style, head);
getyx(input, y, x); getyx(input, y, x);
inputAdd(&style, editTail()); inputAdd(&style, editTail());
wclrtoeol(input); wclrtoeol(input);