diff options
| author | C. McEnroe | 2020-02-05 19:00:54 -0500 | 
|---|---|---|
| committer | C. McEnroe | 2020-02-05 19:00:54 -0500 | 
| commit | b2d35edcb22a9a41235229b41b180a50b51b5908 (patch) | |
| tree | 4cfc6ca3682aff0fa7fd65348c35210df832460f | |
| parent | a7b0ed99079065f54db83160dfe651ce9d50a568 (diff) | |
Change prompt depending on command
| -rw-r--r-- | chat.h | 3 | ||||
| -rw-r--r-- | command.c | 21 | ||||
| -rw-r--r-- | ui.c | 23 | 
3 files changed, 42 insertions, 5 deletions
| @@ -112,6 +112,9 @@ void ircFormat(const char *format, ...)  void handle(struct Message msg);  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 };  void uiInit(void); @@ -19,6 +19,27 @@  #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) {  	if (id == Debug) {  		ircFormat("%s\r\n", input); @@ -479,16 +479,29 @@ static void inputUpdate(void) {  		colorPair(mapColor(self.color), -1),  		NULL  	); +	const char *head = editHead(); +	const char *skip = NULL;  	if (self.nick) { -		// TODO: Check if input is command or action. -		waddch(input, '<'); -		waddstr(input, self.nick); -		waddstr(input, "> "); +		size_t id = windows.active->id; +		if (NULL != (skip = commandIsPrivmsg(id, head))) { +			waddch(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;  	struct Style style = Reset; -	inputAdd(&style, editHead()); +	inputAdd(&style, head);  	getyx(input, y, x);  	inputAdd(&style, editTail());  	wclrtoeol(input); | 
