2012-10-21 15:02:20 -04:00
|
|
|
/*
|
2012-02-20 15:07:38 -05:00
|
|
|
* command.c
|
|
|
|
*
|
2013-01-10 21:05:29 -05:00
|
|
|
* Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
|
2012-10-21 15:02:20 -04:00
|
|
|
*
|
2012-02-20 15:07:38 -05:00
|
|
|
* This file is part of Profanity.
|
|
|
|
*
|
|
|
|
* Profanity is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Profanity is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2013-10-14 14:15:51 -04:00
|
|
|
#include <assert.h>
|
2013-02-02 15:55:58 -05:00
|
|
|
#include <errno.h>
|
|
|
|
#include <limits.h>
|
2012-02-19 15:57:46 -05:00
|
|
|
#include <stdlib.h>
|
2012-08-25 20:50:50 -04:00
|
|
|
#include <string.h>
|
2012-04-23 20:02:22 -04:00
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
|
2012-10-31 17:30:58 -04:00
|
|
|
#include "chat_session.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "command/command.h"
|
2013-12-15 11:10:32 -05:00
|
|
|
#include "command/commands.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "command/history.h"
|
2012-08-25 20:50:50 -04:00
|
|
|
#include "common.h"
|
2013-02-02 16:59:29 -05:00
|
|
|
#include "config/accounts.h"
|
|
|
|
#include "config/preferences.h"
|
|
|
|
#include "config/theme.h"
|
2012-10-04 17:48:41 -04:00
|
|
|
#include "contact.h"
|
2013-12-14 10:34:17 -05:00
|
|
|
#include "roster_list.h"
|
2013-01-12 22:14:36 -05:00
|
|
|
#include "jid.h"
|
2012-08-25 20:50:50 -04:00
|
|
|
#include "log.h"
|
2013-02-02 15:55:58 -05:00
|
|
|
#include "muc.h"
|
2013-08-17 13:45:51 -04:00
|
|
|
#include "otr.h"
|
2012-11-19 18:15:42 -05:00
|
|
|
#include "profanity.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "tools/autocomplete.h"
|
2013-07-11 17:57:35 -04:00
|
|
|
#include "tools/parser.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "tools/tinyurl.h"
|
2013-02-02 14:57:46 -05:00
|
|
|
#include "ui/ui.h"
|
2013-02-02 14:47:41 -05:00
|
|
|
#include "xmpp/xmpp.h"
|
2013-07-14 16:58:02 -04:00
|
|
|
#include "xmpp/bookmark.h"
|
2012-02-09 18:15:53 -05:00
|
|
|
|
2013-06-02 15:11:42 -04:00
|
|
|
typedef char*(*autocompleter)(char*, int*);
|
|
|
|
|
2012-10-27 20:42:26 -04:00
|
|
|
static void _cmd_complete_parameters(char *input, int *size);
|
2013-06-02 14:56:35 -04:00
|
|
|
|
|
|
|
static char * _sub_autocomplete(char *input, int *size);
|
|
|
|
static char * _notify_autocomplete(char *input, int *size);
|
|
|
|
static char * _titlebar_autocomplete(char *input, int *size);
|
|
|
|
static char * _theme_autocomplete(char *input, int *size);
|
|
|
|
static char * _autoaway_autocomplete(char *input, int *size);
|
2013-12-08 16:49:34 -05:00
|
|
|
static char * _autoconnect_autocomplete(char *input, int *size);
|
2013-06-02 14:56:35 -04:00
|
|
|
static char * _account_autocomplete(char *input, int *size);
|
|
|
|
static char * _who_autocomplete(char *input, int *size);
|
|
|
|
static char * _roster_autocomplete(char *input, int *size);
|
|
|
|
static char * _group_autocomplete(char *input, int *size);
|
2013-07-14 16:58:02 -04:00
|
|
|
static char * _bookmark_autocomplete(char *input, int *size);
|
2014-01-13 13:56:04 -05:00
|
|
|
static char * _otr_autocomplete(char *input, int *size);
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
GHashTable *commands = NULL;
|
2013-06-24 19:49:29 -04:00
|
|
|
|
2012-08-22 18:57:34 -04:00
|
|
|
/*
|
2013-06-24 19:49:29 -04:00
|
|
|
* Command list
|
2012-08-22 18:57:34 -04:00
|
|
|
*/
|
2013-06-24 19:49:29 -04:00
|
|
|
static struct cmd_t command_defs[] =
|
2012-08-11 20:39:51 -04:00
|
|
|
{
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/help",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_help, parse_args, 0, 1, NULL,
|
2014-01-01 20:40:46 -05:00
|
|
|
{ "/help [area|command]", "Get help on using Profanity.",
|
2013-06-25 17:16:23 -04:00
|
|
|
{ "/help [area|command]",
|
2012-11-11 18:57:02 -05:00
|
|
|
"-------------------------",
|
2013-06-25 17:16:23 -04:00
|
|
|
"Use with no arguments to get a help summary.",
|
|
|
|
"Supply an area to see help for commands related to specific features.",
|
|
|
|
"Supply a command (without the leading slash) to see help on that command.",
|
2012-08-14 17:50:38 -04:00
|
|
|
"",
|
2013-06-25 17:16:23 -04:00
|
|
|
"Example : /help commands",
|
|
|
|
"Example : /help presence",
|
|
|
|
"Example : /help who",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
2013-06-30 17:59:06 -04:00
|
|
|
"For more detailed help, see the user guide at http://www.profanity.im/userguide.html.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-14 17:06:27 -04:00
|
|
|
|
2012-10-22 19:18:28 -04:00
|
|
|
{ "/about",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_about, parse_args, 0, 0, NULL,
|
2014-01-01 20:31:03 -05:00
|
|
|
{ "/about", "About Profanity.",
|
2012-10-22 19:18:28 -04:00
|
|
|
{ "/about",
|
|
|
|
"------",
|
|
|
|
"Show versioning and license information.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/connect",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_connect, parse_args, 1, 2, NULL,
|
2012-12-22 18:48:45 -05:00
|
|
|
{ "/connect account [server]", "Login to a chat service.",
|
|
|
|
{ "/connect account [server]",
|
|
|
|
"-------------------------",
|
|
|
|
"Connect to an XMPP service using the specified account.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Use the server argument for chat services hosted at a different domain to the 'domainpart' of the Jabber ID.",
|
2012-12-22 18:48:45 -05:00
|
|
|
"An account is automatically created if one does not exist. See the /account command for more details.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"",
|
2012-10-21 15:02:20 -04:00
|
|
|
"Example: /connect myuser@gmail.com",
|
2012-12-06 15:36:16 -05:00
|
|
|
"Example: /connect myuser@mycompany.com talk.google.com",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-10-27 13:12:04 -04:00
|
|
|
{ "/disconnect",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_disconnect, parse_args, 0, 0, NULL,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/disconnect", "Logout of current session.",
|
2012-10-27 13:12:04 -04:00
|
|
|
{ "/disconnect",
|
2013-03-10 15:17:24 -04:00
|
|
|
"-----------",
|
|
|
|
"Disconnect from the current chat service.",
|
2012-10-27 13:12:04 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/msg",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_msg, parse_args_with_freetext, 1, 2, NULL,
|
2013-06-30 17:59:06 -04:00
|
|
|
{ "/msg contact|nick [message]", "Start chat with user.",
|
|
|
|
{ "/msg contact|nick [message]",
|
|
|
|
"---------------------------",
|
|
|
|
"Open a chat window for the contact and send the message if one is supplied.",
|
|
|
|
"When in a chat room, supply a nickname to start private chat with a room member.",
|
2013-01-15 16:41:17 -05:00
|
|
|
"Use quotes if the nickname includes spaces.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"",
|
2012-11-29 19:19:03 -05:00
|
|
|
"Example : /msg myfriend@server.com Hey, here's a message!",
|
|
|
|
"Example : /msg otherfriend@server.com",
|
2013-01-15 16:41:17 -05:00
|
|
|
"Example : /msg Bob Here is a private message",
|
|
|
|
"Example : /msg \"My Friend\" Hi, how are you?",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2013-05-18 21:07:01 -04:00
|
|
|
{ "/roster",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_roster, parse_args_with_freetext, 0, 3, NULL,
|
2013-06-01 19:45:40 -04:00
|
|
|
{ "/roster [add|remove|nick] [jid] [handle]", "Manage your roster.",
|
|
|
|
{ "/roster [add|remove|nick] [jid] [handle]",
|
|
|
|
"----------------------------------------",
|
|
|
|
"View, add to, and remove from your roster.",
|
|
|
|
"Passing no arguments lists all contacts in your roster.",
|
|
|
|
"The 'add' command will add a new item, the jid is required, the handle is an optional nickname",
|
|
|
|
"The 'remove' command removes a contact, the jid is required.",
|
|
|
|
"The 'nick' command changes a contacts nickname, the jid is required,",
|
|
|
|
"if no handle is supplied, the current one is removed.",
|
2013-05-18 21:07:01 -04:00
|
|
|
"",
|
2013-06-01 19:45:40 -04:00
|
|
|
"Example : /roster (show your roster)",
|
|
|
|
"Example : /roster add someone@contacts.org (add the contact)",
|
|
|
|
"Example : /roster add someone@contacts.org Buddy (add the contact with nickname 'Buddy')",
|
|
|
|
"Example : /roster remove someone@contacts.org (remove the contact)",
|
2013-05-18 21:07:01 -04:00
|
|
|
"Example : /roster nick myfriend@chat.org My Friend",
|
2013-05-18 22:27:59 -04:00
|
|
|
"Example : /roster nick kai@server.com (clears handle)",
|
2013-05-18 21:07:01 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2013-06-02 12:25:52 -04:00
|
|
|
{ "/group",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_group, parse_args_with_freetext, 0, 3, NULL,
|
2013-06-30 17:59:06 -04:00
|
|
|
{ "/group [show|add|remove] [group] [contact]", "Manage roster groups.",
|
|
|
|
{ "/group [show|add|remove] [group] [contact]",
|
|
|
|
"------------------------------------------",
|
2013-06-02 12:25:52 -04:00
|
|
|
"View, add to, and remove from roster groups.",
|
|
|
|
"Passing no argument will list all roster groups.",
|
|
|
|
"The 'show' command takes 'group' as an argument, and lists all roster items in that group.",
|
2013-06-30 17:59:06 -04:00
|
|
|
"The 'add' command takes 'group' and 'contact' arguments, and adds the contact to the group.",
|
|
|
|
"The 'remove' command takes 'group' and 'contact' arguments and removes the contact from the group,",
|
2013-06-02 12:25:52 -04:00
|
|
|
"",
|
|
|
|
"Example : /group",
|
|
|
|
"Example : /group show friends",
|
|
|
|
"Example : /group add friends newfriend@server.org",
|
2013-06-30 17:59:06 -04:00
|
|
|
"Example : /group add family Brother (using contacts nickname)",
|
2013-06-02 12:25:52 -04:00
|
|
|
"Example : /group remove colleagues boss@work.com",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-13 20:39:26 -05:00
|
|
|
{ "/info",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_info, parse_args, 0, 1, NULL,
|
2013-06-30 17:59:06 -04:00
|
|
|
{ "/info [contact|nick]", "Show basic information about a contact, or room member.",
|
|
|
|
{ "/info [contact|nick]",
|
|
|
|
"--------------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Show information including current subscription status and summary information for each connected resource.",
|
2013-01-17 17:46:50 -05:00
|
|
|
"If in a chat window the parameter is not required, the current recipient will be used.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
2013-06-30 17:59:06 -04:00
|
|
|
"Example : /info mybuddy@chat.server.org",
|
|
|
|
"Example : /info kai",
|
2012-11-13 17:08:46 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-02-16 20:04:10 -05:00
|
|
|
{ "/caps",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_caps, parse_args, 0, 1, NULL,
|
2013-02-17 11:59:20 -05:00
|
|
|
{ "/caps [fulljid|nick]", "Find out a contacts client software capabilities.",
|
|
|
|
{ "/caps [fulljid|nick]",
|
|
|
|
"--------------------",
|
|
|
|
"Find out a contact, or room members client software capabilities.",
|
|
|
|
"If in the console window or a regular chat window, a full JID is required.",
|
|
|
|
"If in a chat room, the nickname is required.",
|
|
|
|
"If in private chat, no parameter is required.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"Example : /caps mybuddy@chat.server.org/laptop (contact's laptop resource)",
|
|
|
|
"Example : /caps mybuddy@chat.server.org/phone (contact's phone resource)",
|
|
|
|
"Example : /caps bruce (room member)",
|
2013-02-16 20:04:10 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-02-16 21:10:56 -05:00
|
|
|
{ "/software",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_software, parse_args, 0, 1, NULL,
|
2013-03-10 15:17:24 -04:00
|
|
|
{ "/software [fulljid|nick]", "Find out software version information about a contacts resource.",
|
2013-02-17 11:59:20 -05:00
|
|
|
{ "/software [fulljid|nick]",
|
|
|
|
"------------------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Find out a contact, or room members software version information, if such requests are supported.",
|
2013-02-17 11:59:20 -05:00
|
|
|
"If in the console window or a regular chat window, a full JID is required.",
|
|
|
|
"If in a chat room, the nickname is required.",
|
|
|
|
"If in private chat, no parameter is required.",
|
2013-06-30 17:59:06 -04:00
|
|
|
"If the contact's software does not support software version requests, nothing will be displayed.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"Example : /software mybuddy@chat.server.org/laptop (contact's laptop resource)",
|
|
|
|
"Example : /software mybuddy@chat.server.org/phone (contact's phone resource)",
|
|
|
|
"Example : /software bruce (room member)",
|
2013-02-16 21:10:56 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-01-21 18:24:59 -05:00
|
|
|
{ "/status",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_status, parse_args, 0, 1, NULL,
|
2013-06-30 17:59:06 -04:00
|
|
|
{ "/status [contact|nick]", "Find out a contacts presence information.",
|
|
|
|
{ "/status [contact|nick]",
|
|
|
|
"----------------------",
|
2013-01-21 18:24:59 -05:00
|
|
|
"Find out a contact, or room members presence information.",
|
|
|
|
"If in a chat window the parameter is not required, the current recipient will be used.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
2013-06-30 17:59:06 -04:00
|
|
|
"Example : /status buddy@server.com",
|
|
|
|
"Example : /status jon",
|
2013-01-21 18:24:59 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-11-03 21:27:01 -04:00
|
|
|
{ "/join",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_join, parse_args_with_freetext, 1, 2, NULL,
|
2013-04-10 17:47:01 -04:00
|
|
|
{ "/join room[@server] [nick]", "Join a chat room.",
|
|
|
|
{ "/join room[@server] [nick]",
|
|
|
|
"--------------------------",
|
2012-11-03 21:27:01 -04:00
|
|
|
"Join a chat room at the conference server.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If nick is specified you will join with this nickname.",
|
2013-09-12 18:30:35 -04:00
|
|
|
"Otherwise the account preference 'muc.nick' will be used which is the localpart of your JID (before the @).",
|
|
|
|
"If no server is supplied, the account preference 'muc.service' is used, which is 'conference.<domain-part>' by default.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If the room doesn't exist, and the server allows it, a new one will be created.",
|
2012-11-03 21:27:01 -04:00
|
|
|
"",
|
|
|
|
"Example : /join jdev@conference.jabber.org",
|
|
|
|
"Example : /join jdev@conference.jabber.org mynick",
|
2013-04-10 17:47:01 -04:00
|
|
|
"Example : /join jdev (as user@jabber.org will join jdev@conference.jabber.org)",
|
2012-11-03 21:27:01 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2013-05-30 17:48:56 -04:00
|
|
|
{ "/leave",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_leave, parse_args, 0, 0, NULL,
|
2013-05-30 17:48:56 -04:00
|
|
|
{ "/leave", "Leave a chat room.",
|
|
|
|
{ "/leave",
|
|
|
|
"------",
|
|
|
|
"Leave the current chat room.",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-04-20 15:18:13 -04:00
|
|
|
{ "/invite",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_invite, parse_args_with_freetext, 1, 2, NULL,
|
2013-06-30 17:59:06 -04:00
|
|
|
{ "/invite contact [message]", "Invite contact to chat room.",
|
|
|
|
{ "/invite contact [message]",
|
|
|
|
"-------------------------",
|
2013-04-20 15:18:13 -04:00
|
|
|
"Send a direct invite to the specified contact to the current chat room.",
|
2013-07-20 18:47:57 -04:00
|
|
|
"If a message is supplied it will be sent as the reason for the invite.",
|
2013-04-20 15:18:13 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2013-04-24 18:50:47 -04:00
|
|
|
{ "/invites",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_invites, parse_args_with_freetext, 0, 0, NULL,
|
2013-04-24 18:50:47 -04:00
|
|
|
{ "/invites", "Show outstanding chat room invites.",
|
|
|
|
{ "/invites",
|
|
|
|
"--------",
|
|
|
|
"Show all rooms that you have been invited to, and have not yet been accepted or declind.",
|
|
|
|
"Use \"/join <room>\" to accept a room invitation.",
|
|
|
|
"Use \"/decline <room>\" to decline a room invitation.",
|
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/decline",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_decline, parse_args_with_freetext, 1, 1, NULL,
|
2013-04-24 18:50:47 -04:00
|
|
|
{ "/decline room", "Decline a chat room invite.",
|
|
|
|
{ "/decline room",
|
|
|
|
"-------------",
|
|
|
|
"Decline invitation to a chat room, the room will no longer be in the list of outstanding invites.",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-03-13 19:38:26 -04:00
|
|
|
{ "/rooms",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_rooms, parse_args, 0, 1, NULL,
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/rooms [conference-service]", "List chat rooms.",
|
|
|
|
{ "/rooms [conference-service]",
|
|
|
|
"---------------------------",
|
|
|
|
"List the chat rooms available at the specified conference service",
|
2013-09-12 18:30:35 -04:00
|
|
|
"If no argument is supplied, the account preference 'muc.service' is used, which is 'conference.<domain-part>' by default.",
|
2013-03-13 19:38:26 -04:00
|
|
|
"",
|
|
|
|
"Example : /rooms conference.jabber.org",
|
|
|
|
"Example : /rooms (if logged in as me@server.org, is equivalent to /rooms conference.server.org)",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-07-14 16:58:02 -04:00
|
|
|
{ "/bookmark",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_bookmark, parse_args, 0, 4, NULL,
|
2013-07-14 16:58:02 -04:00
|
|
|
{ "/bookmark [add|list|remove] [room@server] [autojoin on|off] [nick nickname]",
|
|
|
|
"Manage bookmarks.",
|
|
|
|
{ "/bookmark [add|list|remove] [room@server] [autojoin on|off] [nick nickname]",
|
|
|
|
"---------------------------------------------------------------------------",
|
|
|
|
"Manage bookmarks.",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/disco",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_disco, parse_args, 1, 2, NULL,
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/disco command entity", "Service discovery.",
|
|
|
|
{ "/disco command entity",
|
|
|
|
"---------------------",
|
|
|
|
"Find out information about an entities supported services.",
|
|
|
|
"Command may be one of:",
|
|
|
|
"info: List protocols and features supported by an entity.",
|
|
|
|
"items: List items associated with an entity.",
|
|
|
|
"",
|
|
|
|
"The entity must be a Jabber ID.",
|
|
|
|
"",
|
|
|
|
"Example : /disco info myserver.org",
|
|
|
|
"Example : /disco items myserver.org",
|
|
|
|
"Example : /disco items conference.jabber.org",
|
|
|
|
"Example : /disco info myfriend@server.com/laptop",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-18 13:36:17 -05:00
|
|
|
{ "/nick",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_nick, parse_args_with_freetext, 1, 1, NULL,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/nick nickname", "Change nickname in chat room.",
|
|
|
|
{ "/nick nickname",
|
|
|
|
"--------------",
|
|
|
|
"Change the name by which other members of a chat room see you.",
|
2012-11-18 13:36:17 -05:00
|
|
|
"This command is only valid when called within a chat room window.",
|
|
|
|
"",
|
|
|
|
"Example : /nick kai hansen",
|
|
|
|
"Example : /nick bob",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-08-29 16:41:10 -04:00
|
|
|
{ "/win",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_win, parse_args, 1, 1, NULL,
|
2013-08-29 16:41:10 -04:00
|
|
|
{ "/win num", "View a window.",
|
|
|
|
{ "/win num",
|
|
|
|
"------------------",
|
|
|
|
"Show the contents of a specific window in the main window area.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-13 19:39:34 -05:00
|
|
|
{ "/wins",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_wins, parse_args, 0, 1, NULL,
|
2013-05-16 19:33:00 -04:00
|
|
|
{ "/wins [tidy|prune]", "List or tidy active windows.",
|
|
|
|
{ "/wins [tidy|prune]",
|
|
|
|
"------------------",
|
|
|
|
"Passing no argument will list all currently active windows and information about their usage.",
|
2013-06-30 17:59:06 -04:00
|
|
|
"tidy : Shuffle windows so there are no gaps.",
|
2013-05-16 19:33:00 -04:00
|
|
|
"prune : Close all windows with no unread messages, and then tidy as above.",
|
2012-11-13 19:39:34 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-28 14:51:13 -04:00
|
|
|
{ "/sub",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_sub, parse_args, 1, 2, NULL,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/sub command [jid]", "Manage subscriptions.",
|
|
|
|
{ "/sub command [jid]",
|
|
|
|
"------------------",
|
|
|
|
"command : One of the following,",
|
2012-11-27 19:36:51 -05:00
|
|
|
"request : Send a subscription request to the user to be informed of their",
|
|
|
|
" : presence.",
|
2012-11-27 21:02:59 -05:00
|
|
|
"allow : Approve a contact's subscription reqeust to see your presence.",
|
2012-11-27 19:36:51 -05:00
|
|
|
"deny : Remove subscription for a contact, or deny a request",
|
|
|
|
"show : Show subscriprion status for a contact.",
|
|
|
|
"sent : Show all sent subscription requests pending a response.",
|
|
|
|
"received : Show all received subscription requests awaiting your response.",
|
2012-10-28 14:51:13 -04:00
|
|
|
"",
|
2012-11-27 21:02:59 -05:00
|
|
|
"The optional 'jid' parameter only applys to 'request', 'allow', 'deny' and 'show'",
|
|
|
|
"If it is omitted the contact of the current window is used.",
|
2012-11-11 07:00:21 -05:00
|
|
|
"",
|
2012-11-27 18:43:32 -05:00
|
|
|
"Example: /sub request myfriend@jabber.org",
|
|
|
|
"Example: /sub allow myfriend@jabber.org",
|
|
|
|
"Example: /sub request (whilst in chat with contact)",
|
2012-11-27 19:36:51 -05:00
|
|
|
"Example: /sub sent",
|
2012-10-28 14:51:13 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/tiny",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_tiny, parse_args, 1, 1, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/tiny url", "Send url as tinyurl in current chat.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/tiny url",
|
|
|
|
"---------",
|
|
|
|
"Send the url as a tiny url.",
|
|
|
|
"",
|
2013-06-30 17:59:06 -04:00
|
|
|
"Example : /tiny http://www.profanity.im",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2013-05-04 21:31:04 -04:00
|
|
|
{ "/duck",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_duck, parse_args_with_freetext, 1, 1, NULL,
|
2013-05-04 21:31:04 -04:00
|
|
|
{ "/duck query", "Perform search using DuckDuckGo chatbot.",
|
|
|
|
{ "/duck query",
|
|
|
|
"-----------",
|
|
|
|
"Send a search query to the DuckDuckGo chatbot.",
|
|
|
|
"Your chat service must be federated, i.e. allow message to be sent/received outside of its domain.",
|
|
|
|
"",
|
|
|
|
"Example : /duck dennis ritchie",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/who",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_who, parse_args, 0, 2, NULL,
|
2013-06-01 22:33:49 -04:00
|
|
|
{ "/who [status] [group]", "Show contacts/room participants with chosen status.",
|
|
|
|
{ "/who [status] [group]",
|
|
|
|
"---------------------",
|
2012-10-04 18:18:48 -04:00
|
|
|
"Show contacts with the specified status, no status shows all contacts.",
|
2012-11-11 19:21:49 -05:00
|
|
|
"Possible statuses are: online, offline, away, dnd, xa, chat, available, unavailable.",
|
2013-06-01 22:33:49 -04:00
|
|
|
"The groups argument will show only contacts in that group.",
|
2013-01-17 18:05:23 -05:00
|
|
|
"If in a chat room, the participants with the supplied status are displayed.",
|
2012-11-11 19:21:49 -05:00
|
|
|
"",
|
2012-12-09 13:59:11 -05:00
|
|
|
"online : Contacts that are connected, i.e. online, chat, away, xa, dnd",
|
|
|
|
"available : Contacts that are available for chat, i.e. online, chat.",
|
|
|
|
"unavailable : Contacts that are not available for chat, i.e. offline, away, xa, dnd.",
|
2013-06-01 22:33:49 -04:00
|
|
|
"any : Contacts with any status (same as calling with no argument.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/close",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_close, parse_args, 0, 1, NULL,
|
2013-06-24 19:49:29 -04:00
|
|
|
{ "/close [win|read|all]", "Close windows.",
|
2013-05-16 17:34:05 -04:00
|
|
|
{ "/close [win|read|all]",
|
|
|
|
"---------------------",
|
2013-05-12 17:57:36 -04:00
|
|
|
"Passing no argument will close the current window.",
|
2013-05-16 19:33:00 -04:00
|
|
|
"2,3,4,5,6,7,8,9 or 0 : Close the specified window.",
|
|
|
|
"all : Close all currently open windows.",
|
|
|
|
"read : Close all windows that have no new messages.",
|
2013-05-12 17:57:36 -04:00
|
|
|
"The console window cannot be closed.",
|
2012-11-07 19:29:52 -05:00
|
|
|
"If in a chat room, you will leave the room.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-14 17:06:27 -04:00
|
|
|
|
2013-03-02 16:55:55 -05:00
|
|
|
{ "/clear",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_clear, parse_args, 0, 0, NULL,
|
2013-03-02 16:55:55 -05:00
|
|
|
{ "/clear", "Clear current window.",
|
|
|
|
{ "/clear",
|
|
|
|
"------",
|
|
|
|
"Clear the current window.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/quit",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_quit, parse_args, 0, 0, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/quit", "Quit Profanity.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/quit",
|
|
|
|
"-----",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Logout of any current session, and quit Profanity.",
|
2013-06-24 19:49:29 -04:00
|
|
|
NULL } } },
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-08-11 20:39:51 -04:00
|
|
|
{ "/beep",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_beep, parse_args, 1, 1, &cons_beep_setting,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/beep on|off", "Terminal beep on new messages.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/beep on|off",
|
|
|
|
"------------",
|
|
|
|
"Switch the terminal bell on or off.",
|
|
|
|
"The bell will sound when incoming messages are received.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If the terminal does not support sounds, it may attempt to flash the screen instead.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-08-11 20:39:51 -04:00
|
|
|
{ "/notify",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_notify, parse_args, 2, 2, &cons_notify_setting,
|
2012-10-27 17:05:08 -04:00
|
|
|
{ "/notify type value", "Control various desktop noficiations.",
|
|
|
|
{ "/notify type value",
|
|
|
|
"------------------",
|
|
|
|
"Settings for various desktop notifications where type is one of:",
|
|
|
|
"message : Notificaitons for messages.",
|
|
|
|
" : on|off",
|
|
|
|
"remind : Notification reminders of unread messages.",
|
|
|
|
" : where value is the reminder period in seconds,",
|
|
|
|
" : use 0 to disable.",
|
|
|
|
"typing : Notifications when contacts are typing.",
|
|
|
|
" : on|off",
|
2013-04-22 18:48:23 -04:00
|
|
|
"invite : Notifications for chat room invites.",
|
|
|
|
" : on|off",
|
2013-04-27 18:46:49 -04:00
|
|
|
"sub : Notifications for subscription requests.",
|
|
|
|
" : on|off",
|
|
|
|
"",
|
2012-10-27 17:05:08 -04:00
|
|
|
"Example : /notify message on (enable message notifications)",
|
|
|
|
"Example : /notify remind 10 (remind every 10 seconds)",
|
|
|
|
"Example : /notify remind 0 (switch off reminders)",
|
|
|
|
"Example : /notify typing on (enable typing notifications)",
|
2013-04-22 18:48:23 -04:00
|
|
|
"Example : /notify invite on (enable chat room invite notifications)",
|
2012-09-23 17:24:31 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/flash",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_flash, parse_args, 1, 1, &cons_flash_setting,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/flash on|off", "Terminal flash on new messages.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/flash on|off",
|
|
|
|
"-------------",
|
|
|
|
"Make the terminal flash when incoming messages are recieved.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"The flash will only occur if you are not in the chat window associated with the user sending the message.",
|
|
|
|
"If the terminal doesn't support flashing, it may attempt to beep.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-27 19:33:20 -04:00
|
|
|
{ "/intype",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_intype, parse_args, 1, 1, &cons_intype_setting,
|
2012-10-27 19:33:20 -04:00
|
|
|
{ "/intype on|off", "Show when contact is typing.",
|
|
|
|
{ "/intype on|off",
|
|
|
|
"--------------",
|
|
|
|
"Show when a contact is typing in the console, and in active message window.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-12-01 21:21:59 -05:00
|
|
|
{ "/splash",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_splash, parse_args, 1, 1, &cons_splash_setting,
|
2013-03-10 15:17:24 -04:00
|
|
|
{ "/splash on|off", "Splash logo on startup and /about command.",
|
2012-12-01 21:21:59 -05:00
|
|
|
{ "/splash on|off",
|
|
|
|
"--------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Switch on or off the ascii logo on start up and when the /about command is called.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-10-27 12:40:17 -04:00
|
|
|
|
2013-11-07 18:04:12 -05:00
|
|
|
{ "/autoconnect",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_autoconnect, parse_args, 1, 2, &cons_autoconnect_setting,
|
2013-12-08 16:49:34 -05:00
|
|
|
{ "/autoconnect set|off [account]", "Set account to autoconnect with.",
|
|
|
|
{ "/autoconnect set|off [account]",
|
|
|
|
"------------------------------",
|
|
|
|
"Enable or disable autoconnect on start up.",
|
|
|
|
"The setting can be overridden by the -a (--account) command line option.",
|
|
|
|
"",
|
|
|
|
"Example: /autoconnect set jc@stuntteam.org (autoconnect with the specified account).",
|
|
|
|
"Example: /autoconnect off (disable autoconnect).",
|
2013-11-07 18:04:12 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-23 20:35:36 -04:00
|
|
|
{ "/vercheck",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_vercheck, parse_args, 0, 1, NULL,
|
2012-10-23 20:35:36 -04:00
|
|
|
{ "/vercheck [on|off]", "Check for a new release.",
|
|
|
|
{ "/vercheck [on|off]",
|
|
|
|
"------------------",
|
|
|
|
"Without a parameter will check for a new release.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Switching on or off will enable/disable a version check when Profanity starts, and each time the /about command is run.",
|
2012-10-23 20:35:36 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-12-02 15:53:45 -05:00
|
|
|
{ "/titlebar",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_titlebar, parse_args, 2, 2, &cons_titlebar_setting,
|
2012-12-02 15:53:45 -05:00
|
|
|
{ "/titlebar property on|off", "Show various properties in the window title bar.",
|
|
|
|
{ "/titlebar property on|off",
|
|
|
|
"-------------------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Show various properties in the window title bar.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Currently The only supported property is 'version'.",
|
2012-11-29 15:34:52 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-01-17 14:40:55 -05:00
|
|
|
{ "/mouse",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_mouse, parse_args, 1, 1, &cons_mouse_setting,
|
2013-01-17 14:40:55 -05:00
|
|
|
{ "/mouse on|off", "Use profanity mouse handling.",
|
|
|
|
{ "/mouse on|off",
|
|
|
|
"-------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"If set to 'on', profanity will handle mouse actions, which enables scrolling the main window with the mouse wheel.",
|
2013-01-17 14:40:55 -05:00
|
|
|
"To select text, use the shift key while selcting an area.",
|
|
|
|
"If set to 'off', profanity leaves mouse handling to the terminal implementation.",
|
2013-03-19 16:04:51 -04:00
|
|
|
"This feature is experimental, certain mouse click events may occasionally freeze",
|
|
|
|
"Profanity until a key is pressed or another mouse event is received",
|
|
|
|
"The default is 'off'.",
|
2013-01-17 14:40:55 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/chlog",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_chlog, parse_args, 1, 1, &cons_chlog_setting,
|
2014-01-01 20:33:24 -05:00
|
|
|
{ "/chlog on|off", "Chat logging to file.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/chlog on|off",
|
|
|
|
"-------------",
|
|
|
|
"Switch chat logging on or off.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"This setting will be enabled if /history is set to on.",
|
|
|
|
"When disabling this option, /history will also be disabled.",
|
2013-05-04 19:16:10 -04:00
|
|
|
"See the /grlog setting for enabling logging of chat room (groupchat) messages.",
|
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/grlog",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_grlog, parse_args, 1, 1, &cons_grlog_setting,
|
2014-01-01 20:39:43 -05:00
|
|
|
{ "/grlog on|off", "Chat logging of chat rooms to file.",
|
2013-05-04 19:16:10 -04:00
|
|
|
{ "/grlog on|off",
|
|
|
|
"-------------",
|
|
|
|
"Switch chat room logging on or off.",
|
|
|
|
"See the /chlog setting for enabling logging of one to one chat.",
|
2012-10-31 17:41:00 -04:00
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/states",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_states, parse_args, 1, 1, &cons_states_setting,
|
2012-10-31 17:41:00 -04:00
|
|
|
{ "/states on|off", "Send chat states during a chat session.",
|
|
|
|
{ "/states on|off",
|
|
|
|
"--------------",
|
|
|
|
"Sending of chat state notifications during chat sessions.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Such as whether you have become inactive, or have closed the chat window.",
|
2012-10-14 13:26:08 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2013-09-21 17:33:43 -04:00
|
|
|
{ "/otr",
|
2013-12-15 12:19:01 -05:00
|
|
|
cmd_otr, parse_args, 1, 2, NULL,
|
2014-01-13 15:17:45 -05:00
|
|
|
{ "/otr gen|myfp|theirfp|start|end|trust|untrust|log", "Off The Record encryption commands.",
|
|
|
|
{ "/otr gen|myfp|theirfp|start|end|trust|untrust|log",
|
|
|
|
"-------------------------------------------------",
|
2014-01-11 13:29:37 -05:00
|
|
|
"gen - Generate your private key.",
|
|
|
|
"myfp - Show your fingerprint.",
|
2014-01-11 19:10:16 -05:00
|
|
|
"theirfp - Show contacts fingerprint.",
|
2014-01-13 13:56:04 -05:00
|
|
|
"start <contact> - Start an OTR session with the contact, or the current recipient if in a chat window and no argument supplied.",
|
2014-01-11 19:10:16 -05:00
|
|
|
"end - End the current OTR session,",
|
2014-01-11 20:20:22 -05:00
|
|
|
"trust - Indicate that you have verified the contact's fingerprint.",
|
|
|
|
"untrust - Indicate the the contact's fingerprint is not verified,",
|
2014-01-13 15:17:45 -05:00
|
|
|
"log - How to log OTR messages, options are 'on', 'off' and 'redact', with redaction being the default.",
|
2013-09-21 17:33:43 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-31 20:12:35 -04:00
|
|
|
{ "/outtype",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_outtype, parse_args, 1, 1, &cons_outtype_setting,
|
2012-10-31 20:12:35 -04:00
|
|
|
{ "/outtype on|off", "Send typing notification to recipient.",
|
|
|
|
{ "/outtype on|off",
|
2013-03-10 15:17:24 -04:00
|
|
|
"---------------",
|
|
|
|
"Send an indication that you are typing to the chat recipient.",
|
|
|
|
"Chat states (/states) will be enabled if this setting is set.",
|
2012-10-31 20:12:35 -04:00
|
|
|
NULL } } },
|
2012-10-31 17:41:00 -04:00
|
|
|
|
2012-12-19 18:31:25 -05:00
|
|
|
{ "/gone",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_gone, parse_args, 1, 1, &cons_gone_setting,
|
2012-12-19 18:33:10 -05:00
|
|
|
{ "/gone minutes", "Send 'gone' state to recipient after a period.",
|
2012-12-19 18:31:25 -05:00
|
|
|
{ "/gone minutes",
|
2013-03-10 15:17:24 -04:00
|
|
|
"-------------",
|
2012-12-19 18:31:25 -05:00
|
|
|
"Send a 'gone' state to the recipient after the specified number of minutes."
|
|
|
|
"This indicates to the recipient's client that you have left the conversation.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"A value of 0 will disable sending this chat state.",
|
|
|
|
"Chat states (/states) will be enabled if this setting is set.",
|
2012-12-19 18:31:25 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/history",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_history, parse_args, 1, 1, &cons_history_setting,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/history on|off", "Chat history in message windows.",
|
2012-10-14 13:26:08 -04:00
|
|
|
{ "/history on|off",
|
2012-11-11 14:32:42 -05:00
|
|
|
"---------------",
|
2013-06-30 17:59:06 -04:00
|
|
|
"Switch chat history on or off, /chlog will automatically be enabled when this setting is on.",
|
2012-10-14 13:26:08 -04:00
|
|
|
"When history is enabled, previous messages are shown in chat windows.",
|
2012-11-12 04:13:03 -05:00
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/log",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_log, parse_args, 2, 2, &cons_log_setting,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/log maxsize value", "Manage system logging settings.",
|
|
|
|
{ "/log maxsize value",
|
|
|
|
"------------------",
|
2012-11-12 04:13:03 -05:00
|
|
|
"maxsize : When log file size exceeds this value it will be automatically",
|
|
|
|
" rotated (file will be renamed). Default value is 1048580 (1MB)",
|
2012-11-13 05:51:28 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-11-24 21:14:38 -05:00
|
|
|
{ "/reconnect",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_reconnect, parse_args, 1, 1, &cons_reconnect_setting,
|
2012-11-24 21:14:38 -05:00
|
|
|
{ "/reconnect seconds", "Set reconnect interval.",
|
|
|
|
{ "/reconnect seconds",
|
2013-03-10 15:17:24 -04:00
|
|
|
"------------------",
|
2012-11-24 21:14:38 -05:00
|
|
|
"Set the reconnect attempt interval in seconds for when the connection is lost.",
|
2013-06-30 17:59:06 -04:00
|
|
|
"A value of 0 will switch off reconnect attempts.",
|
2012-11-24 21:14:38 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-11-26 18:58:24 -05:00
|
|
|
{ "/autoping",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_autoping, parse_args, 1, 1, &cons_autoping_setting,
|
2012-11-26 18:58:24 -05:00
|
|
|
{ "/autoping seconds", "Server ping interval.",
|
|
|
|
{ "/autoping seconds",
|
2012-12-09 13:59:11 -05:00
|
|
|
"-----------------",
|
2012-11-26 18:58:24 -05:00
|
|
|
"Set the number of seconds between server pings, so ensure connection kept alive.",
|
|
|
|
"A value of 0 will switch off autopinging the server.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-30 18:34:14 -05:00
|
|
|
{ "/autoaway",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_autoaway, parse_args_with_freetext, 2, 2, &cons_autoaway_setting,
|
2012-11-30 18:34:14 -05:00
|
|
|
{ "/autoaway setting value", "Set auto idle/away properties.",
|
|
|
|
{ "/autoaway setting value",
|
|
|
|
"-----------------------",
|
|
|
|
"'setting' may be one of 'mode', 'minutes', 'message' or 'check', with the following values:",
|
|
|
|
"",
|
|
|
|
"mode : idle - Sends idle time, whilst your status remains online.",
|
|
|
|
" away - Sends an away presence.",
|
|
|
|
" off - Disabled (default).",
|
|
|
|
"time : Number of minutes before the presence change is sent, the default is 15.",
|
2012-12-01 19:38:10 -05:00
|
|
|
"message : Optional message to send with the presence change.",
|
|
|
|
" : off - Disable message (default).",
|
2012-11-30 18:34:14 -05:00
|
|
|
"check : on|off, when enabled, checks for activity and sends online presence, default is 'on'.",
|
|
|
|
"",
|
|
|
|
"Example: /autoaway mode idle",
|
|
|
|
"Example: /autoaway time 30",
|
|
|
|
"Example: /autoaway message I'm not really doing much",
|
|
|
|
"Example: /autoaway check false",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-13 05:51:28 -05:00
|
|
|
{ "/priority",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_priority, parse_args, 1, 1, &cons_priority_setting,
|
2013-01-31 17:48:21 -05:00
|
|
|
{ "/priority value", "Set priority for the current account.",
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/priority value",
|
|
|
|
"---------------",
|
2013-01-31 17:48:21 -05:00
|
|
|
"Set priority for the current account, presence will be sent when calling this command.",
|
|
|
|
"See the /account command for more specific priority settings per presence status.",
|
2012-11-13 05:51:28 -05:00
|
|
|
"value : Number between -128 and 127. Default value is 0.",
|
2013-01-20 20:26:09 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-06-23 14:19:39 -04:00
|
|
|
{ "/account",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_account, parse_args, 0, 4, NULL,
|
2013-06-23 14:19:39 -04:00
|
|
|
{ "/account [command] [account] [property] [value]", "Manage accounts.",
|
|
|
|
{ "/account [command] [account] [property] [value]",
|
|
|
|
"-----------------------------------------------",
|
|
|
|
"Commands for creating and managing accounts.",
|
2013-12-08 18:36:00 -05:00
|
|
|
"list : List all accounts.",
|
|
|
|
"show account : Show information about an account.",
|
|
|
|
"enable account : Enable the account, it will be used for autocomplete.",
|
|
|
|
"disable account : Disable the account.",
|
|
|
|
"add account : Create a new account.",
|
|
|
|
"rename account newname : Rename account to newname.",
|
|
|
|
"set account property value : Set 'property' of 'account' to 'value'.",
|
|
|
|
"clear account property value : Clear 'property' of 'account'.",
|
2013-06-23 14:19:39 -04:00
|
|
|
"",
|
|
|
|
"When connected, the /account command can be called with no arguments, to show current account settings.",
|
2013-12-08 18:36:00 -05:00
|
|
|
"",
|
|
|
|
"The set command may use one of the following for 'property'.",
|
2013-06-23 14:19:39 -04:00
|
|
|
"jid : The Jabber ID of the account, the account name will be used if this property is not set.",
|
|
|
|
"server : The chat server, if different to the domainpart of the JID.",
|
|
|
|
"status : The presence status to use on login, use 'last' to use whatever your last status was.",
|
|
|
|
"online|chat|away",
|
|
|
|
"|xa|dnd : Priority for the specified presence.",
|
|
|
|
"resource : The resource to be used.",
|
2013-11-07 18:36:04 -05:00
|
|
|
"password : Password for the account, note this is currently stored in plaintext if set.",
|
2013-09-12 18:30:35 -04:00
|
|
|
"muc : The default MUC chat service to use.",
|
|
|
|
"nick : The default nickname to use when joining chat rooms.",
|
2013-06-23 14:19:39 -04:00
|
|
|
"",
|
2013-12-08 18:36:00 -05:00
|
|
|
"The clear command may use one of the following for 'property'.",
|
|
|
|
"password : Clears the password for the account.",
|
|
|
|
"",
|
2013-06-23 14:19:39 -04:00
|
|
|
"Example : /account add work",
|
|
|
|
" : /account set work jid myuser@mycompany.com",
|
|
|
|
" : /account set work server talk.google.com",
|
|
|
|
" : /account set work resource desktop",
|
2013-09-12 18:30:35 -04:00
|
|
|
" : /account set work muc chatservice.mycompany.com",
|
|
|
|
" : /account set work nick dennis",
|
2013-06-23 14:19:39 -04:00
|
|
|
" : /account set work status dnd",
|
|
|
|
" : /account set work dnd -1",
|
|
|
|
" : /account set work online 10",
|
|
|
|
" : /account rename work gtalk",
|
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/prefs",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_prefs, parse_args, 0, 1, NULL,
|
2013-06-23 14:19:39 -04:00
|
|
|
{ "/prefs [area]", "Show configuration.",
|
|
|
|
{ "/prefs [area]",
|
|
|
|
"-------------",
|
|
|
|
"Area is one of:",
|
|
|
|
"ui : User interface preferences.",
|
|
|
|
"desktop : Desktop notification preferences.",
|
|
|
|
"chat : Chat state preferences.",
|
|
|
|
"log : Logging preferences.",
|
|
|
|
"conn : Connection handling preferences.",
|
|
|
|
"presence : Chat presence preferences.",
|
|
|
|
"",
|
|
|
|
"No argument shows all categories.",
|
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/theme",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_theme, parse_args, 1, 2, &cons_theme_setting,
|
2013-06-23 14:19:39 -04:00
|
|
|
{ "/theme command [theme-name]", "Change colour theme.",
|
|
|
|
{ "/theme command [theme-name]",
|
|
|
|
"---------------------------",
|
|
|
|
"Change the colour settings used.",
|
|
|
|
"",
|
|
|
|
"command : One of the following,",
|
|
|
|
"list : List all available themes.",
|
|
|
|
"set [theme-name] : Load the named theme.\"default\" will reset to the default colours.",
|
|
|
|
"",
|
|
|
|
"Example : /theme list",
|
|
|
|
"Example : /theme set mycooltheme",
|
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
|
2013-01-20 20:26:09 -05:00
|
|
|
{ "/statuses",
|
2013-12-22 17:14:15 -05:00
|
|
|
cmd_statuses, parse_args, 1, 1, &cons_statuses_setting,
|
2013-01-20 20:26:09 -05:00
|
|
|
{ "/statuses on|off", "Set notifications for status messages.",
|
|
|
|
{ "/statuses on|off",
|
2013-03-10 15:17:24 -04:00
|
|
|
"----------------",
|
|
|
|
"Show status updates from contacts, such as online/offline/away etc.",
|
|
|
|
"When disabled, status updates are not displayed.",
|
|
|
|
"The default is 'on'.",
|
2013-06-24 19:49:29 -04:00
|
|
|
NULL } } },
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-08-11 20:39:51 -04:00
|
|
|
{ "/away",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_away, parse_args_with_freetext, 0, 1, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/away [msg]", "Set status to away.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/away [msg]",
|
|
|
|
"-----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'away' with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /away Gone for lunch",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/chat",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_chat, parse_args_with_freetext, 0, 1, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/chat [msg]", "Set status to chat (available for chat).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/chat [msg]",
|
|
|
|
"-----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'chat', meaning 'available for chat', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /chat Please talk to me!",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/dnd",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_dnd, parse_args_with_freetext, 0, 1, NULL,
|
2012-11-17 21:40:49 -05:00
|
|
|
{ "/dnd [msg]", "Set status to dnd (do not disturb).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/dnd [msg]",
|
|
|
|
"----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'dnd', meaning 'do not disturb', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /dnd I'm in the zone",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/online",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_online, parse_args_with_freetext, 0, 1, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/online [msg]", "Set status to online.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/online [msg]",
|
|
|
|
"-------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'online' with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /online Up the Irons!",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/xa",
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_xa, parse_args_with_freetext, 0, 1, NULL,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/xa [msg]", "Set status to xa (extended away).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/xa [msg]",
|
|
|
|
"---------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'xa', meaning 'extended away', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /xa This meeting is going to be a long one",
|
|
|
|
NULL } } },
|
2012-06-04 15:49:18 -04:00
|
|
|
};
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
static Autocomplete commands_ac;
|
|
|
|
static Autocomplete who_ac;
|
|
|
|
static Autocomplete help_ac;
|
|
|
|
static Autocomplete notify_ac;
|
|
|
|
static Autocomplete prefs_ac;
|
|
|
|
static Autocomplete sub_ac;
|
|
|
|
static Autocomplete log_ac;
|
|
|
|
static Autocomplete autoaway_ac;
|
|
|
|
static Autocomplete autoaway_mode_ac;
|
2013-12-08 16:49:34 -05:00
|
|
|
static Autocomplete autoconnect_ac;
|
2013-01-24 20:11:49 -05:00
|
|
|
static Autocomplete titlebar_ac;
|
|
|
|
static Autocomplete theme_ac;
|
|
|
|
static Autocomplete theme_load_ac;
|
|
|
|
static Autocomplete account_ac;
|
2013-12-10 17:11:48 -05:00
|
|
|
static Autocomplete account_set_ac;
|
|
|
|
static Autocomplete account_clear_ac;
|
2013-03-14 16:50:09 -04:00
|
|
|
static Autocomplete disco_ac;
|
2013-05-16 17:49:35 -04:00
|
|
|
static Autocomplete close_ac;
|
2013-05-16 19:33:00 -04:00
|
|
|
static Autocomplete wins_ac;
|
2013-05-18 21:30:03 -04:00
|
|
|
static Autocomplete roster_ac;
|
2013-06-02 12:51:38 -04:00
|
|
|
static Autocomplete group_ac;
|
2013-07-14 16:58:02 -04:00
|
|
|
static Autocomplete bookmark_ac;
|
2014-01-11 19:10:16 -05:00
|
|
|
static Autocomplete otr_ac;
|
2014-01-13 15:17:45 -05:00
|
|
|
static Autocomplete otr_log_ac;
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-08-22 18:57:34 -04:00
|
|
|
/*
|
|
|
|
* Initialise command autocompleter and history
|
|
|
|
*/
|
2012-07-24 18:19:48 -04:00
|
|
|
void
|
2012-08-22 19:30:11 -04:00
|
|
|
cmd_init(void)
|
2012-04-30 19:24:31 -04:00
|
|
|
{
|
2012-08-25 19:54:18 -04:00
|
|
|
log_info("Initialising commands");
|
2012-10-27 20:47:57 -04:00
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
commands_ac = autocomplete_new();
|
2013-06-24 19:49:29 -04:00
|
|
|
|
|
|
|
help_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(help_ac, "commands");
|
|
|
|
autocomplete_add(help_ac, "basic");
|
|
|
|
autocomplete_add(help_ac, "chatting");
|
|
|
|
autocomplete_add(help_ac, "groupchat");
|
|
|
|
autocomplete_add(help_ac, "presence");
|
|
|
|
autocomplete_add(help_ac, "contacts");
|
|
|
|
autocomplete_add(help_ac, "service");
|
|
|
|
autocomplete_add(help_ac, "settings");
|
|
|
|
autocomplete_add(help_ac, "other");
|
|
|
|
autocomplete_add(help_ac, "navigation");
|
2013-06-24 19:49:29 -04:00
|
|
|
|
|
|
|
// load command defs into hash table
|
|
|
|
commands = g_hash_table_new(g_str_hash, g_str_equal);
|
|
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(command_defs); i++) {
|
|
|
|
Command *pcmd = command_defs+i;
|
|
|
|
|
|
|
|
// add to hash
|
|
|
|
g_hash_table_insert(commands, pcmd->cmd, pcmd);
|
|
|
|
|
|
|
|
// add to commands and help autocompleters
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(commands_ac, pcmd->cmd);
|
|
|
|
autocomplete_add(help_ac, pcmd->cmd+1);
|
2013-06-24 19:49:29 -04:00
|
|
|
}
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
prefs_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(prefs_ac, "ui");
|
|
|
|
autocomplete_add(prefs_ac, "desktop");
|
|
|
|
autocomplete_add(prefs_ac, "chat");
|
|
|
|
autocomplete_add(prefs_ac, "log");
|
|
|
|
autocomplete_add(prefs_ac, "conn");
|
|
|
|
autocomplete_add(prefs_ac, "presence");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
notify_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(notify_ac, "message");
|
|
|
|
autocomplete_add(notify_ac, "typing");
|
|
|
|
autocomplete_add(notify_ac, "remind");
|
|
|
|
autocomplete_add(notify_ac, "invite");
|
|
|
|
autocomplete_add(notify_ac, "sub");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
sub_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(sub_ac, "request");
|
|
|
|
autocomplete_add(sub_ac, "allow");
|
|
|
|
autocomplete_add(sub_ac, "deny");
|
|
|
|
autocomplete_add(sub_ac, "show");
|
|
|
|
autocomplete_add(sub_ac, "sent");
|
|
|
|
autocomplete_add(sub_ac, "received");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
titlebar_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(titlebar_ac, "version");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
log_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(log_ac, "maxsize");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
autoaway_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(autoaway_ac, "mode");
|
|
|
|
autocomplete_add(autoaway_ac, "time");
|
|
|
|
autocomplete_add(autoaway_ac, "message");
|
|
|
|
autocomplete_add(autoaway_ac, "check");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
|
|
|
autoaway_mode_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(autoaway_mode_ac, "away");
|
|
|
|
autocomplete_add(autoaway_mode_ac, "idle");
|
|
|
|
autocomplete_add(autoaway_mode_ac, "off");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
2013-12-08 16:49:34 -05:00
|
|
|
autoconnect_ac = autocomplete_new();
|
|
|
|
autocomplete_add(autoconnect_ac, "set");
|
|
|
|
autocomplete_add(autoconnect_ac, "off");
|
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
theme_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(theme_ac, "list");
|
|
|
|
autocomplete_add(theme_ac, "set");
|
2013-01-24 20:11:49 -05:00
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
disco_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(disco_ac, "info");
|
|
|
|
autocomplete_add(disco_ac, "items");
|
2013-03-14 16:50:09 -04:00
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
account_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(account_ac, "list");
|
|
|
|
autocomplete_add(account_ac, "show");
|
|
|
|
autocomplete_add(account_ac, "add");
|
|
|
|
autocomplete_add(account_ac, "enable");
|
|
|
|
autocomplete_add(account_ac, "disable");
|
|
|
|
autocomplete_add(account_ac, "rename");
|
|
|
|
autocomplete_add(account_ac, "set");
|
2013-12-08 18:36:00 -05:00
|
|
|
autocomplete_add(account_ac, "clear");
|
2012-12-09 17:58:45 -05:00
|
|
|
|
2013-12-10 17:11:48 -05:00
|
|
|
account_set_ac = autocomplete_new();
|
|
|
|
autocomplete_add(account_set_ac, "jid");
|
|
|
|
autocomplete_add(account_set_ac, "server");
|
|
|
|
autocomplete_add(account_set_ac, "status");
|
|
|
|
autocomplete_add(account_set_ac, "online");
|
|
|
|
autocomplete_add(account_set_ac, "chat");
|
|
|
|
autocomplete_add(account_set_ac, "away");
|
|
|
|
autocomplete_add(account_set_ac, "xa");
|
|
|
|
autocomplete_add(account_set_ac, "dnd");
|
|
|
|
autocomplete_add(account_set_ac, "resource");
|
|
|
|
autocomplete_add(account_set_ac, "password");
|
|
|
|
autocomplete_add(account_set_ac, "muc");
|
|
|
|
autocomplete_add(account_set_ac, "nick");
|
|
|
|
|
|
|
|
account_clear_ac = autocomplete_new();
|
|
|
|
autocomplete_add(account_clear_ac, "password");
|
|
|
|
|
2013-05-16 17:49:35 -04:00
|
|
|
close_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(close_ac, "read");
|
|
|
|
autocomplete_add(close_ac, "all");
|
2013-05-16 17:49:35 -04:00
|
|
|
|
2013-05-16 19:33:00 -04:00
|
|
|
wins_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(wins_ac, "prune");
|
|
|
|
autocomplete_add(wins_ac, "tidy");
|
2013-05-16 19:33:00 -04:00
|
|
|
|
2013-05-18 21:30:03 -04:00
|
|
|
roster_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(roster_ac, "add");
|
|
|
|
autocomplete_add(roster_ac, "nick");
|
|
|
|
autocomplete_add(roster_ac, "remove");
|
2013-05-18 21:30:03 -04:00
|
|
|
|
2013-06-02 12:51:38 -04:00
|
|
|
group_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(group_ac, "show");
|
|
|
|
autocomplete_add(group_ac, "add");
|
|
|
|
autocomplete_add(group_ac, "remove");
|
2013-06-02 12:51:38 -04:00
|
|
|
|
2012-12-08 19:46:14 -05:00
|
|
|
theme_load_ac = NULL;
|
|
|
|
|
2013-06-24 19:49:29 -04:00
|
|
|
who_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(who_ac, "chat");
|
|
|
|
autocomplete_add(who_ac, "online");
|
|
|
|
autocomplete_add(who_ac, "away");
|
|
|
|
autocomplete_add(who_ac, "xa");
|
|
|
|
autocomplete_add(who_ac, "dnd");
|
|
|
|
autocomplete_add(who_ac, "offline");
|
|
|
|
autocomplete_add(who_ac, "available");
|
|
|
|
autocomplete_add(who_ac, "unavailable");
|
|
|
|
autocomplete_add(who_ac, "any");
|
2012-10-27 22:58:12 -04:00
|
|
|
|
2013-07-14 16:58:02 -04:00
|
|
|
bookmark_ac = autocomplete_new();
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(bookmark_ac, "add");
|
|
|
|
autocomplete_add(bookmark_ac, "list");
|
|
|
|
autocomplete_add(bookmark_ac, "remove");
|
2013-07-14 16:58:02 -04:00
|
|
|
|
2014-01-11 19:10:16 -05:00
|
|
|
otr_ac = autocomplete_new();
|
|
|
|
autocomplete_add(otr_ac, "gen");
|
|
|
|
autocomplete_add(otr_ac, "start");
|
|
|
|
autocomplete_add(otr_ac, "end");
|
|
|
|
autocomplete_add(otr_ac, "myfp");
|
|
|
|
autocomplete_add(otr_ac, "theirfp");
|
2014-01-11 20:20:22 -05:00
|
|
|
autocomplete_add(otr_ac, "trust");
|
|
|
|
autocomplete_add(otr_ac, "untrust");
|
2014-01-13 15:17:45 -05:00
|
|
|
autocomplete_add(otr_ac, "log");
|
|
|
|
|
|
|
|
otr_log_ac = autocomplete_new();
|
|
|
|
autocomplete_add(otr_log_ac, "on");
|
|
|
|
autocomplete_add(otr_log_ac, "off");
|
|
|
|
autocomplete_add(otr_log_ac, "redact");
|
2014-01-11 19:10:16 -05:00
|
|
|
|
2013-01-27 20:35:11 -05:00
|
|
|
cmd_history_init();
|
2012-04-30 19:24:31 -04:00
|
|
|
}
|
|
|
|
|
2012-10-21 19:29:39 -04:00
|
|
|
void
|
2013-12-15 11:10:32 -05:00
|
|
|
cmd_uninit(void)
|
2012-10-21 19:29:39 -04:00
|
|
|
{
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(commands_ac);
|
|
|
|
autocomplete_free(who_ac);
|
|
|
|
autocomplete_free(help_ac);
|
|
|
|
autocomplete_free(notify_ac);
|
|
|
|
autocomplete_free(sub_ac);
|
2013-08-23 17:30:54 -04:00
|
|
|
autocomplete_free(titlebar_ac);
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(log_ac);
|
|
|
|
autocomplete_free(prefs_ac);
|
|
|
|
autocomplete_free(autoaway_ac);
|
|
|
|
autocomplete_free(autoaway_mode_ac);
|
2013-12-08 16:49:34 -05:00
|
|
|
autocomplete_free(autoconnect_ac);
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(theme_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(theme_load_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
}
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(account_ac);
|
2013-12-10 17:11:48 -05:00
|
|
|
autocomplete_free(account_set_ac);
|
|
|
|
autocomplete_free(account_clear_ac);
|
2013-03-14 16:50:09 -04:00
|
|
|
autocomplete_free(disco_ac);
|
2013-05-16 17:49:35 -04:00
|
|
|
autocomplete_free(close_ac);
|
2013-05-16 19:33:00 -04:00
|
|
|
autocomplete_free(wins_ac);
|
2013-05-18 21:30:03 -04:00
|
|
|
autocomplete_free(roster_ac);
|
2013-06-02 12:51:38 -04:00
|
|
|
autocomplete_free(group_ac);
|
2013-07-14 16:58:02 -04:00
|
|
|
autocomplete_free(bookmark_ac);
|
2014-01-11 19:10:16 -05:00
|
|
|
autocomplete_free(otr_ac);
|
2014-01-13 15:17:45 -05:00
|
|
|
autocomplete_free(otr_log_ac);
|
2012-10-21 19:29:39 -04:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// Command autocompletion functions
|
2012-07-24 18:19:48 -04:00
|
|
|
void
|
2012-10-27 20:42:26 -04:00
|
|
|
cmd_autocomplete(char *input, int *size)
|
2012-10-21 18:37:20 -04:00
|
|
|
{
|
2012-10-27 20:42:26 -04:00
|
|
|
int i = 0;
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
2012-10-21 18:37:20 -04:00
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
// autocomplete command
|
2012-10-27 20:42:26 -04:00
|
|
|
if ((strncmp(input, "/", 1) == 0) && (!str_contains(input, *size, ' '))) {
|
|
|
|
for(i = 0; i < *size; i++) {
|
|
|
|
inp_cpy[i] = input[i];
|
|
|
|
}
|
|
|
|
inp_cpy[i] = '\0';
|
2013-01-24 20:11:49 -05:00
|
|
|
found = autocomplete_complete(commands_ac, inp_cpy);
|
2012-10-27 20:42:26 -04:00
|
|
|
if (found != NULL) {
|
2013-08-03 06:17:50 -04:00
|
|
|
auto_msg = (char *) malloc(strlen(found) + 1);
|
2012-10-27 20:42:26 -04:00
|
|
|
strcpy(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
2012-08-22 19:44:14 -04:00
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
// autocomplete parameters
|
|
|
|
} else {
|
|
|
|
_cmd_complete_parameters(input, size);
|
|
|
|
}
|
2012-10-27 17:22:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-10-27 20:42:26 -04:00
|
|
|
cmd_reset_autocomplete()
|
2012-10-27 17:22:30 -04:00
|
|
|
{
|
2013-05-06 17:32:58 -04:00
|
|
|
roster_reset_search_attempts();
|
2013-04-24 18:50:47 -04:00
|
|
|
muc_reset_invites_ac();
|
2012-12-09 19:53:57 -05:00
|
|
|
accounts_reset_all_search();
|
|
|
|
accounts_reset_enabled_search();
|
2012-10-27 20:42:26 -04:00
|
|
|
prefs_reset_boolean_choice();
|
2013-05-05 18:42:11 -04:00
|
|
|
presence_reset_sub_request_search();
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(help_ac);
|
|
|
|
autocomplete_reset(notify_ac);
|
|
|
|
autocomplete_reset(sub_ac);
|
2013-01-10 19:48:58 -05:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
Autocomplete nick_ac = muc_get_roster_ac(ui_current_recipient());
|
2013-01-10 19:48:58 -05:00
|
|
|
if (nick_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(nick_ac);
|
2013-01-10 19:48:58 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(who_ac);
|
|
|
|
autocomplete_reset(prefs_ac);
|
|
|
|
autocomplete_reset(log_ac);
|
|
|
|
autocomplete_reset(commands_ac);
|
|
|
|
autocomplete_reset(autoaway_ac);
|
|
|
|
autocomplete_reset(autoaway_mode_ac);
|
2013-12-08 16:49:34 -05:00
|
|
|
autocomplete_reset(autoconnect_ac);
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(theme_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(theme_load_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
theme_load_ac = NULL;
|
|
|
|
}
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(account_ac);
|
2013-12-10 17:11:48 -05:00
|
|
|
autocomplete_reset(account_set_ac);
|
|
|
|
autocomplete_reset(account_clear_ac);
|
2013-03-14 16:50:09 -04:00
|
|
|
autocomplete_reset(disco_ac);
|
2013-05-16 17:49:35 -04:00
|
|
|
autocomplete_reset(close_ac);
|
2013-05-16 19:33:00 -04:00
|
|
|
autocomplete_reset(wins_ac);
|
2013-05-18 21:30:03 -04:00
|
|
|
autocomplete_reset(roster_ac);
|
2013-06-02 12:51:38 -04:00
|
|
|
autocomplete_reset(group_ac);
|
2013-07-14 16:58:02 -04:00
|
|
|
autocomplete_reset(bookmark_ac);
|
2014-01-11 19:10:16 -05:00
|
|
|
autocomplete_reset(otr_ac);
|
2014-01-13 15:17:45 -05:00
|
|
|
autocomplete_reset(otr_log_ac);
|
2013-07-14 16:58:02 -04:00
|
|
|
bookmark_autocomplete_reset();
|
2012-10-27 17:22:30 -04:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// Command execution
|
|
|
|
|
2012-08-22 19:41:22 -04:00
|
|
|
gboolean
|
|
|
|
cmd_execute(const char * const command, const char * const inp)
|
2012-08-14 19:42:38 -04:00
|
|
|
{
|
2013-06-24 19:49:29 -04:00
|
|
|
Command *cmd = g_hash_table_lookup(commands, command);
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-08-14 19:42:38 -04:00
|
|
|
if (cmd != NULL) {
|
2012-11-17 21:40:49 -05:00
|
|
|
gchar **args = cmd->parser(inp, cmd->min_args, cmd->max_args);
|
2013-06-25 18:38:06 -04:00
|
|
|
if ((args == NULL) && (cmd->setting_func != NULL)) {
|
|
|
|
cons_show("");
|
2013-12-22 17:14:15 -05:00
|
|
|
(*cmd->setting_func)();
|
2013-06-25 18:41:53 -04:00
|
|
|
cons_show("Usage: %s", cmd->help.usage);
|
2013-06-25 18:38:06 -04:00
|
|
|
return TRUE;
|
|
|
|
} else if (args == NULL) {
|
|
|
|
cons_show("");
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show("Usage: %s", cmd->help.usage);
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_CHAT) {
|
2012-11-17 21:40:49 -05:00
|
|
|
char usage[strlen(cmd->help.usage) + 8];
|
|
|
|
sprintf(usage, "Usage: %s", cmd->help.usage);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line(usage);
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
|
|
|
gboolean result = cmd->func(args, cmd->help);
|
|
|
|
g_strfreev(args);
|
|
|
|
return result;
|
|
|
|
}
|
2012-08-14 19:42:38 -04:00
|
|
|
} else {
|
2012-08-22 19:41:22 -04:00
|
|
|
return cmd_execute_default(inp);
|
2012-08-14 19:42:38 -04:00
|
|
|
}
|
2012-02-18 18:09:21 -05:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:41:22 -04:00
|
|
|
gboolean
|
|
|
|
cmd_execute_default(const char * const inp)
|
|
|
|
{
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
|
|
|
jabber_conn_status_t status = jabber_get_connection_status();
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-04-21 13:40:22 -04:00
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
|
|
|
message_send_groupchat(inp, recipient);
|
|
|
|
}
|
|
|
|
break;
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
case WIN_CHAT:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
2013-08-17 13:45:51 -04:00
|
|
|
#ifdef HAVE_LIBOTR
|
2014-01-11 16:44:24 -05:00
|
|
|
if (otr_is_secure(recipient)) {
|
2014-01-11 12:03:01 -05:00
|
|
|
char *encrypted = otr_encrypt_message(recipient, inp);
|
|
|
|
if (encrypted != NULL) {
|
|
|
|
message_send(encrypted, recipient);
|
|
|
|
otr_free_message(encrypted);
|
|
|
|
if (prefs_get_boolean(PREF_CHLOG)) {
|
|
|
|
const char *jid = jabber_get_fulljid();
|
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, recipient, inp, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
|
|
|
}
|
|
|
|
|
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
|
|
|
} else {
|
|
|
|
cons_show_error("Failed to send message.");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
message_send(inp, recipient);
|
2014-01-09 19:08:49 -05:00
|
|
|
if (prefs_get_boolean(PREF_CHLOG)) {
|
|
|
|
const char *jid = jabber_get_fulljid();
|
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, recipient, inp, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
|
|
|
}
|
|
|
|
|
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
|
|
|
}
|
2013-08-17 13:45:51 -04:00
|
|
|
#else
|
2013-04-21 13:40:22 -04:00
|
|
|
message_send(inp, recipient);
|
|
|
|
if (prefs_get_boolean(PREF_CHLOG)) {
|
2013-05-21 17:00:42 -04:00
|
|
|
const char *jid = jabber_get_fulljid();
|
2013-04-21 13:40:22 -04:00
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, recipient, inp, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
2014-01-09 19:08:49 -05:00
|
|
|
#endif
|
2012-11-19 18:15:42 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
2012-10-02 17:00:05 -04:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
case WIN_PRIVATE:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
|
|
|
message_send(inp, recipient);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
2013-04-21 13:40:22 -04:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case WIN_CONSOLE:
|
|
|
|
cons_show("Unknown command: %s", inp);
|
|
|
|
break;
|
2013-05-04 21:31:04 -04:00
|
|
|
|
|
|
|
case WIN_DUCK:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
|
|
|
ui_current_print_line("You are not currently connected.");
|
|
|
|
} else {
|
|
|
|
message_send_duck(inp);
|
|
|
|
ui_duck(inp);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
default:
|
|
|
|
break;
|
2012-08-22 19:41:22 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-10-27 20:42:26 -04:00
|
|
|
static void
|
|
|
|
_cmd_complete_parameters(char *input, int *size)
|
2012-10-27 20:08:04 -04:00
|
|
|
{
|
2013-06-02 14:56:35 -04:00
|
|
|
int i;
|
|
|
|
char *result = NULL;
|
|
|
|
|
|
|
|
// autocomplete boolean settings
|
|
|
|
gchar *boolean_choices[] = { "/beep", "/intype", "/states", "/outtype",
|
|
|
|
"/flash", "/splash", "/chlog", "/grlog", "/mouse", "/history",
|
|
|
|
"/vercheck", "/statuses" };
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, boolean_choices[i],
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2012-10-27 20:08:04 -04:00
|
|
|
|
2013-06-02 14:56:35 -04:00
|
|
|
// autocomplete nickname in chat rooms
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_MUC) {
|
2013-07-30 18:51:07 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
|
|
|
Autocomplete nick_ac = muc_get_roster_ac(recipient);
|
2013-01-10 19:48:58 -05:00
|
|
|
if (nick_ac != NULL) {
|
2013-06-02 14:56:35 -04:00
|
|
|
gchar *nick_choices[] = { "/msg", "/info", "/caps", "/status", "/software" } ;
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(nick_choices); i++) {
|
|
|
|
result = autocomplete_param_with_ac(input, size, nick_choices[i],
|
|
|
|
nick_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2013-01-10 19:48:58 -05:00
|
|
|
}
|
2013-06-02 14:56:35 -04:00
|
|
|
|
|
|
|
// otherwise autocomple using roster
|
2013-01-10 19:48:58 -05:00
|
|
|
} else {
|
2013-06-02 14:56:35 -04:00
|
|
|
gchar *contact_choices[] = { "/msg", "/info", "/status" };
|
|
|
|
for (i = 0; i < ARRAY_SIZE(contact_choices); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, contact_choices[i],
|
|
|
|
roster_find_contact);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gchar *resource_choices[] = { "/caps", "/software" };
|
|
|
|
for (i = 0; i < ARRAY_SIZE(resource_choices); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, resource_choices[i],
|
|
|
|
roster_find_resource);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
result = autocomplete_param_with_func(input, size, "/invite", roster_find_contact);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
gchar *invite_choices[] = { "/decline", "/join" };
|
|
|
|
for (i = 0; i < ARRAY_SIZE(invite_choices); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, invite_choices[i],
|
|
|
|
muc_find_invite);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-14 16:58:02 -04:00
|
|
|
result = autocomplete_param_with_func(input, size, "/join", bookmark_find);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-06-02 14:56:35 -04:00
|
|
|
result = autocomplete_param_with_func(input, size, "/connect", accounts_find_enabled);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-01-13 13:56:04 -05:00
|
|
|
gchar *cmds[] = { "/help", "/prefs", "/log", "/disco", "/close", "/wins" };
|
2014-01-13 15:17:45 -05:00
|
|
|
Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac };
|
2013-06-02 14:56:35 -04:00
|
|
|
|
2013-06-24 16:38:02 -04:00
|
|
|
for (i = 0; i < ARRAY_SIZE(cmds); i++) {
|
|
|
|
result = autocomplete_param_with_ac(input, size, cmds[i], completers[i]);
|
2013-06-02 14:56:35 -04:00
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-06-02 15:11:42 -04:00
|
|
|
autocompleter acs[] = { _who_autocomplete, _sub_autocomplete, _notify_autocomplete,
|
|
|
|
_autoaway_autocomplete, _titlebar_autocomplete, _theme_autocomplete,
|
2013-07-14 16:58:02 -04:00
|
|
|
_account_autocomplete, _roster_autocomplete, _group_autocomplete,
|
2014-01-13 13:56:04 -05:00
|
|
|
_bookmark_autocomplete, _autoconnect_autocomplete, _otr_autocomplete };
|
2013-06-02 15:11:42 -04:00
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(acs); i++) {
|
|
|
|
result = acs[i](input, size);
|
|
|
|
if (result != NULL) {
|
|
|
|
inp_replace_input(input, result, size);
|
|
|
|
g_free(result);
|
|
|
|
return;
|
|
|
|
}
|
2013-06-02 14:56:35 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
2012-10-27 20:08:04 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_sub_autocomplete(char *input, int *size)
|
2012-02-18 18:09:21 -05:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
char *result = NULL;
|
|
|
|
result = autocomplete_param_with_func(input, size, "/sub allow", presence_sub_request_find);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_func(input, size, "/sub deny", presence_sub_request_find);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/sub", sub_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-02-18 18:09:21 -05:00
|
|
|
}
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2012-02-18 18:09:21 -05:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_who_autocomplete(char *input, int *size)
|
2012-12-09 15:18:38 -05:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
int i = 0;
|
|
|
|
char *result = NULL;
|
|
|
|
gchar *group_commands[] = { "/who any", "/who online", "/who offline",
|
|
|
|
"/who chat", "/who away", "/who xa", "/who dnd", "/who available",
|
|
|
|
"/who unavailable" };
|
2012-12-09 19:23:55 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(group_commands); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, group_commands[i], roster_find_group);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-12-09 19:23:55 -05:00
|
|
|
}
|
2013-12-15 11:10:32 -05:00
|
|
|
}
|
2013-12-08 18:36:00 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/who", who_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-12-09 15:18:38 -05:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2012-12-09 15:18:38 -05:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_roster_autocomplete(char *input, int *size)
|
2012-10-28 14:51:13 -04:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
char *result = NULL;
|
|
|
|
result = autocomplete_param_with_func(input, size, "/roster nick", roster_find_jid);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_func(input, size, "/roster remove", roster_find_jid);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/roster", roster_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 16:20:00 -05:00
|
|
|
}
|
2012-11-11 07:00:21 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
|
|
|
}
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_group_autocomplete(char *input, int *size)
|
|
|
|
{
|
|
|
|
char *result = NULL;
|
|
|
|
result = autocomplete_param_with_func(input, size, "/group show", roster_find_group);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 16:20:00 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_no_with_func(input, size, "/group add", 4, roster_find_contact);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 19:36:51 -05:00
|
|
|
}
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_no_with_func(input, size, "/group remove", 4, roster_find_contact);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 19:36:51 -05:00
|
|
|
}
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_func(input, size, "/group add", roster_find_group);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 16:53:56 -05:00
|
|
|
}
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_func(input, size, "/group remove", roster_find_group);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-10-28 14:51:13 -04:00
|
|
|
}
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/group", group_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-27 16:20:00 -05:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2012-10-28 14:51:13 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_bookmark_autocomplete(char *input, int *size)
|
2012-10-27 13:12:04 -04:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
char *result = NULL;
|
2012-10-27 13:12:04 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
if (strcmp(input, "/bookmark add ") == 0) {
|
|
|
|
GString *str = g_string_new(input);
|
2012-02-09 18:15:53 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
str = g_string_append(str, "autojoin");
|
|
|
|
result = str->str;
|
|
|
|
g_string_free(str, FALSE);
|
|
|
|
return result;
|
2013-05-16 19:33:00 -04:00
|
|
|
}
|
2012-11-13 19:39:34 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_func(input, size, "/bookmark list", bookmark_find);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_func(input, size, "/bookmark remove", bookmark_find);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2013-08-29 16:41:10 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/bookmark", bookmark_ac);
|
2013-06-24 19:49:29 -04:00
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_notify_autocomplete(char *input, int *size)
|
2013-06-24 19:49:29 -04:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
int i = 0;
|
|
|
|
char *result = NULL;
|
2013-06-24 19:49:29 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
gchar *boolean_choices[] = { "/notify message", "/notify typing",
|
|
|
|
"/notify invite", "/notify sub" };
|
|
|
|
for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, boolean_choices[i],
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
2013-06-24 19:49:29 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/notify", notify_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2013-06-24 19:49:29 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2013-06-24 19:49:29 -04:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_titlebar_autocomplete(char *input, int *size)
|
2012-02-09 18:15:53 -05:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
char *result = NULL;
|
|
|
|
result = autocomplete_param_with_func(input, size, "/titlebar version",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/titlebar", titlebar_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
|
|
|
}
|
2012-08-14 18:22:12 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_autoaway_autocomplete(char *input, int *size)
|
|
|
|
{
|
|
|
|
char *result = NULL;
|
2012-08-14 18:22:12 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/autoaway mode", autoaway_mode_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_func(input, size, "/autoaway check",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/autoaway", autoaway_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-08-14 18:22:12 -04:00
|
|
|
}
|
2012-02-09 18:15:53 -05:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2012-02-09 18:15:53 -05:00
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_autoconnect_autocomplete(char *input, int *size)
|
2012-10-22 19:18:28 -04:00
|
|
|
{
|
2013-12-15 11:10:32 -05:00
|
|
|
char *result = NULL;
|
|
|
|
|
|
|
|
result = autocomplete_param_with_func(input, size, "/autoconnect set", accounts_find_enabled);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2013-04-20 18:39:17 -04:00
|
|
|
}
|
2012-10-22 19:18:28 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/autoconnect", autoconnect_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-11-29 18:14:56 -05:00
|
|
|
}
|
2012-07-19 18:43:50 -04:00
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
return NULL;
|
2012-07-19 18:43:50 -04:00
|
|
|
}
|
|
|
|
|
2014-01-13 13:56:04 -05:00
|
|
|
static char *
|
|
|
|
_otr_autocomplete(char *input, int *size)
|
|
|
|
{
|
|
|
|
char *result = NULL;
|
|
|
|
|
2014-01-13 14:00:34 -05:00
|
|
|
result = autocomplete_param_with_func(input, size, "/otr start", roster_find_contact);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2014-01-13 15:17:45 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/otr log", otr_log_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2014-01-13 13:56:04 -05:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/otr", otr_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2013-12-15 11:10:32 -05:00
|
|
|
static char *
|
|
|
|
_theme_autocomplete(char *input, int *size)
|
2012-12-08 19:46:14 -05:00
|
|
|
{
|
2013-06-02 14:56:35 -04:00
|
|
|
char *result = NULL;
|
2012-12-08 19:53:26 -05:00
|
|
|
if ((strncmp(input, "/theme set ", 11) == 0) && (*size > 11)) {
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac == NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
theme_load_ac = autocomplete_new();
|
2012-12-08 19:46:14 -05:00
|
|
|
GSList *themes = theme_list();
|
|
|
|
while (themes != NULL) {
|
2013-08-25 20:29:50 -04:00
|
|
|
autocomplete_add(theme_load_ac, themes->data);
|
2012-12-08 19:46:14 -05:00
|
|
|
themes = g_slist_next(themes);
|
|
|
|
}
|
|
|
|
g_slist_free(themes);
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(theme_load_ac, "default");
|
2013-06-02 14:56:35 -04:00
|
|
|
}
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/theme set", theme_load_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
2012-12-08 19:46:14 -05:00
|
|
|
}
|
2013-06-02 14:56:35 -04:00
|
|
|
result = autocomplete_param_with_ac(input, size, "/theme", theme_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
2012-12-08 19:46:14 -05:00
|
|
|
}
|
|
|
|
|
2013-06-02 14:56:35 -04:00
|
|
|
static char *
|
2012-12-09 17:58:45 -05:00
|
|
|
_account_autocomplete(char *input, int *size)
|
|
|
|
{
|
2013-06-02 14:56:35 -04:00
|
|
|
char *result = NULL;
|
2013-12-10 17:11:48 -05:00
|
|
|
|
|
|
|
input[*size] = '\0';
|
|
|
|
gchar **args = parse_args(input, 3, 3);
|
|
|
|
|
|
|
|
if ((strncmp(input, "/account set", 12) == 0) && (args != NULL)) {
|
|
|
|
GString *beginning = g_string_new("/account set ");
|
|
|
|
g_string_append(beginning, args[1]);
|
|
|
|
result = autocomplete_param_with_ac(input, size, beginning->str, account_set_ac);
|
|
|
|
g_string_free(beginning, TRUE);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((strncmp(input, "/account clear", 14) == 0) && (args != NULL)) {
|
|
|
|
GString *beginning = g_string_new("/account clear ");
|
|
|
|
g_string_append(beginning, args[1]);
|
|
|
|
result = autocomplete_param_with_ac(input, size, beginning->str, account_clear_ac);
|
|
|
|
g_string_free(beginning, TRUE);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
g_strfreev(args);
|
|
|
|
|
2013-06-02 14:56:35 -04:00
|
|
|
int i = 0;
|
|
|
|
gchar *account_choice[] = { "/account set", "/account show", "/account enable",
|
2013-12-08 18:36:00 -05:00
|
|
|
"/account disable", "/account rename", "/account clear" };
|
2013-06-02 14:56:35 -04:00
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(account_choice); i++) {
|
|
|
|
result = autocomplete_param_with_func(input, size, account_choice[i],
|
|
|
|
accounts_find_all);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
result = autocomplete_param_with_ac(input, size, "/account", account_ac);
|
|
|
|
if (result != NULL) {
|
|
|
|
return result;
|
2012-12-09 17:58:45 -05:00
|
|
|
}
|
2013-06-02 14:56:35 -04:00
|
|
|
|
|
|
|
return NULL;
|
2012-12-09 17:58:45 -05:00
|
|
|
}
|
|
|
|
|