degesch: print usage on command syntax failure
This commit is contained in:
parent
b2cfbf1501
commit
05d21e8f3d
83
degesch.c
83
degesch.c
|
@ -2589,7 +2589,7 @@ log_outcoming_notice (struct app_context *ctx,
|
||||||
|
|
||||||
// --- User input handling -----------------------------------------------------
|
// --- User input handling -----------------------------------------------------
|
||||||
|
|
||||||
static void handle_command_help (struct app_context *, char *);
|
static bool handle_command_help (struct app_context *, char *);
|
||||||
|
|
||||||
/// Cuts the longest non-whitespace portion of text and advances the pointer
|
/// Cuts the longest non-whitespace portion of text and advances the pointer
|
||||||
static char *
|
static char *
|
||||||
|
@ -2642,12 +2642,12 @@ server_command_check (struct app_context *ctx, const char *action)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_buffer (struct app_context *ctx, char *arguments)
|
handle_command_buffer (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
char *action = cut_word (&arguments);
|
char *action = cut_word (&arguments);
|
||||||
if (try_handle_buffer_goto (ctx, action))
|
if (try_handle_buffer_goto (ctx, action))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
struct buffer *buffer = NULL;
|
struct buffer *buffer = NULL;
|
||||||
|
|
||||||
|
@ -2684,19 +2684,19 @@ handle_command_buffer (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
buffer_send_error (ctx, ctx->global_buffer,
|
buffer_send_error (ctx, ctx->global_buffer,
|
||||||
"%s: %s", "No such buffer", which);
|
"%s: %s", "No such buffer", which);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
if (buffer == ctx->global_buffer)
|
if (buffer == ctx->global_buffer)
|
||||||
{
|
{
|
||||||
buffer_send_error (ctx, ctx->global_buffer,
|
buffer_send_error (ctx, ctx->global_buffer,
|
||||||
"Can't close the global buffer");
|
"Can't close the global buffer");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
if (buffer == ctx->server_buffer)
|
if (buffer == ctx->server_buffer)
|
||||||
{
|
{
|
||||||
buffer_send_error (ctx, ctx->global_buffer,
|
buffer_send_error (ctx, ctx->global_buffer,
|
||||||
"Can't close the server buffer");
|
"Can't close the server buffer");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer == ctx->current_buffer)
|
if (buffer == ctx->current_buffer)
|
||||||
|
@ -2704,41 +2704,34 @@ handle_command_buffer (struct app_context *ctx, char *arguments)
|
||||||
buffer_remove (ctx, buffer);
|
buffer_remove (ctx, buffer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
return false;
|
||||||
// TODO: show usage (or do something else?)
|
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_msg (struct app_context *ctx, char *arguments)
|
handle_command_msg (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "send messages"))
|
if (!server_command_check (ctx, "send messages"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (!*arguments)
|
if (!*arguments)
|
||||||
{
|
return false;
|
||||||
// TODO: show usage or something
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *target = cut_word (&arguments);
|
char *target = cut_word (&arguments);
|
||||||
if (!*arguments)
|
if (!*arguments)
|
||||||
buffer_send_error (ctx, ctx->server_buffer, "No text to send");
|
buffer_send_error (ctx, ctx->server_buffer, "No text to send");
|
||||||
else
|
else
|
||||||
SEND_AUTOSPLIT_PRIVMSG (ctx, target, arguments);
|
SEND_AUTOSPLIT_PRIVMSG (ctx, target, arguments);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_query (struct app_context *ctx, char *arguments)
|
handle_command_query (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "send messages"))
|
if (!server_command_check (ctx, "send messages"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (!*arguments)
|
if (!*arguments)
|
||||||
{
|
return false;
|
||||||
// TODO: show usage or something
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *target = cut_word (&arguments);
|
char *target = cut_word (&arguments);
|
||||||
if (irc_is_channel (ctx, target))
|
if (irc_is_channel (ctx, target))
|
||||||
|
@ -2750,28 +2743,26 @@ handle_command_query (struct app_context *ctx, char *arguments)
|
||||||
buffer_activate (ctx, irc_get_or_make_user_buffer (ctx, target));
|
buffer_activate (ctx, irc_get_or_make_user_buffer (ctx, target));
|
||||||
SEND_AUTOSPLIT_PRIVMSG (ctx, target, arguments);
|
SEND_AUTOSPLIT_PRIVMSG (ctx, target, arguments);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_notice (struct app_context *ctx, char *arguments)
|
handle_command_notice (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "send messages"))
|
if (!server_command_check (ctx, "send messages"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (!*arguments)
|
if (!*arguments)
|
||||||
{
|
return false;
|
||||||
// TODO: show usage or something
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *target = cut_word (&arguments);
|
char *target = cut_word (&arguments);
|
||||||
if (!*arguments)
|
if (!*arguments)
|
||||||
buffer_send_error (ctx, ctx->server_buffer, "No text to send");
|
buffer_send_error (ctx, ctx->server_buffer, "No text to send");
|
||||||
else
|
else
|
||||||
SEND_AUTOSPLIT_NOTICE (ctx, target, arguments);
|
SEND_AUTOSPLIT_NOTICE (ctx, target, arguments);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_quit (struct app_context *ctx, char *arguments)
|
handle_command_quit (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (ctx->irc_fd != -1)
|
if (ctx->irc_fd != -1)
|
||||||
|
@ -2782,13 +2773,14 @@ handle_command_quit (struct app_context *ctx, char *arguments)
|
||||||
irc_send (ctx, "QUIT :%s", PROGRAM_NAME " " PROGRAM_VERSION);
|
irc_send (ctx, "QUIT :%s", PROGRAM_NAME " " PROGRAM_VERSION);
|
||||||
}
|
}
|
||||||
initiate_quit (ctx);
|
initiate_quit (ctx);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_join (struct app_context *ctx, char *arguments)
|
handle_command_join (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "join"))
|
if (!server_command_check (ctx, "join"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (*arguments)
|
if (*arguments)
|
||||||
// TODO: check if the arguments are in the form of
|
// TODO: check if the arguments are in the form of
|
||||||
|
@ -2809,13 +2801,14 @@ handle_command_join (struct app_context *ctx, char *arguments)
|
||||||
// TODO: send the key if known
|
// TODO: send the key if known
|
||||||
irc_send (ctx, "JOIN %s", ctx->current_buffer->channel->name);
|
irc_send (ctx, "JOIN %s", ctx->current_buffer->channel->name);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_part (struct app_context *ctx, char *arguments)
|
handle_command_part (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "part"))
|
if (!server_command_check (ctx, "part"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (*arguments)
|
if (*arguments)
|
||||||
// TODO: check if the arguments are in the form of "channel(,channel)*"
|
// TODO: check if the arguments are in the form of "channel(,channel)*"
|
||||||
|
@ -2834,21 +2827,23 @@ handle_command_part (struct app_context *ctx, char *arguments)
|
||||||
else
|
else
|
||||||
irc_send (ctx, "PART %s", ctx->current_buffer->channel->name);
|
irc_send (ctx, "PART %s", ctx->current_buffer->channel->name);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_quote (struct app_context *ctx, char *arguments)
|
handle_command_quote (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (!server_command_check (ctx, "quote"))
|
if (!server_command_check (ctx, "quote"))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
irc_send (ctx, arguments);
|
irc_send (ctx, arguments);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct command_handler
|
static struct command_handler
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
void (*handler) (struct app_context *ctx, char *arguments);
|
bool (*handler) (struct app_context *ctx, char *arguments);
|
||||||
const char *description;
|
const char *description;
|
||||||
const char *usage;
|
const char *usage;
|
||||||
}
|
}
|
||||||
|
@ -2898,14 +2893,14 @@ g_command_handlers[] =
|
||||||
"command" },
|
"command" },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
handle_command_help (struct app_context *ctx, char *arguments)
|
handle_command_help (struct app_context *ctx, char *arguments)
|
||||||
{
|
{
|
||||||
if (*arguments)
|
if (*arguments)
|
||||||
{
|
{
|
||||||
char *command = cut_word (&arguments);
|
char *command = cut_word (&arguments);
|
||||||
// TODO: search for the command and show specific help
|
// TODO: search for the command and show specific help
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer_send_status (ctx, ctx->global_buffer, "Commands:");
|
buffer_send_status (ctx, ctx->global_buffer, "Commands:");
|
||||||
|
@ -2917,6 +2912,7 @@ handle_command_help (struct app_context *ctx, char *arguments)
|
||||||
buffer_send_status (ctx, ctx->global_buffer,
|
buffer_send_status (ctx, ctx->global_buffer,
|
||||||
" Arguments: %s", iter->usage);
|
" Arguments: %s", iter->usage);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2970,11 +2966,12 @@ process_user_command (struct app_context *ctx, char *command)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
struct command_handler *handler = str_map_find (&partial, name);
|
struct command_handler *handler = str_map_find (&partial, name);
|
||||||
if (handler)
|
if (!handler)
|
||||||
handler->handler (ctx, command);
|
|
||||||
else
|
|
||||||
buffer_send_error (ctx, ctx->global_buffer,
|
buffer_send_error (ctx, ctx->global_buffer,
|
||||||
"%s: %s", "No such command", name);
|
"%s: %s", "No such command", name);
|
||||||
|
else if (!handler->handler (ctx, command))
|
||||||
|
buffer_send_error (ctx, ctx->global_buffer,
|
||||||
|
"%s: /%s %s", "Usage", handler->name, handler->usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue