diff options
| author | Přemysl Janouch <p.janouch@gmail.com> | 2016-01-04 22:06:29 +0100 | 
|---|---|---|
| committer | Přemysl Janouch <p.janouch@gmail.com> | 2016-01-04 22:06:29 +0100 | 
| commit | 4832a994616bb9e7b8037cc1e58c96fc84da85e5 (patch) | |
| tree | 6276da7bfc5bd0a52b2881fb71bb93a607523565 /degesch.c | |
| parent | 0092c345688c7d84fb520207ca80335ccfde6e88 (diff) | |
| download | xK-4832a994616bb9e7b8037cc1e58c96fc84da85e5.tar.gz xK-4832a994616bb9e7b8037cc1e58c96fc84da85e5.tar.xz xK-4832a994616bb9e7b8037cc1e58c96fc84da85e5.zip | |
degesch: add basic autocomplete for /topic
Diffstat (limited to 'degesch.c')
| -rw-r--r-- | degesch.c | 29 | 
1 files changed, 28 insertions, 1 deletions
| @@ -1,7 +1,7 @@  /*   * degesch.c: the experimental IRC client   * - * Copyright (c) 2015, Přemysl Janouch <p.janouch@gmail.com> + * Copyright (c) 2015 - 2016, Přemysl Janouch <p.janouch@gmail.com>   *   * Permission to use, copy, modify, and/or distribute this software for any   * purpose with or without fee is hereby granted, provided that the above @@ -10176,6 +10176,29 @@ complete_option (struct app_context *ctx, struct completion *data,  }  static void +complete_topic (struct app_context *ctx, struct completion *data, +	const char *word, struct str_vector *output) +{ +	(void) data; + +	// TODO: make it work in other server-related buffers, too, i.e. when we're +	//   completing the third word and the second word is a known channel name +	struct buffer *buffer = ctx->current_buffer; +	if (buffer->type != BUFFER_CHANNEL) +		return; + +	const char *topic = buffer->channel->topic; +	if (topic && !strncasecmp_ascii (word, topic, strlen (word))) +	{ +		// We must prepend the channel name if the topic itself starts +		// with something that could be regarded as a channel name +		str_vector_add_owned (output, irc_is_channel (buffer->server, topic) +			? xstrdup_printf ("%s %s", buffer->channel->name, topic) +			: xstrdup (topic)); +	} +} + +static void  complete_nicknames (struct app_context *ctx, struct completion *data,  	const char *word, struct str_vector *output)  { @@ -10208,6 +10231,7 @@ complete_word (struct app_context *ctx, struct completion *data,  	// First figure out what exactly we need to complete  	bool try_commands = false;  	bool try_options = false; +	bool try_topic = false;  	bool try_nicknames = false;  	if (data->location == 0 && completion_matches (data, 0, "/*")) @@ -10216,6 +10240,8 @@ complete_word (struct app_context *ctx, struct completion *data,  		try_options = true;  	else if (data->location == 1 && completion_matches (data, 0, "/help"))  		try_commands = try_options = true; +	else if (data->location == 1 && completion_matches (data, 0, "/topic")) +		try_topic = try_nicknames = true;  	else  		try_nicknames = true; @@ -10227,6 +10253,7 @@ complete_word (struct app_context *ctx, struct completion *data,  	if (try_commands)   complete_command (ctx, data, word, &words);  	if (try_options)    complete_option (ctx, data, word, &words); +	if (try_topic)      complete_topic (ctx, data, word, &words);  	if (try_nicknames)  complete_nicknames (ctx, data, word, &words);  	if (words.len == 1) | 
