2012-10-21 15:02:20 -04:00
/*
2012-02-20 15:07:38 -05:00
* command . c
*
2014-03-08 20:18:19 -05:00
* Copyright ( C ) 2012 - 2014 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/>.
*
2014-08-24 15:57:39 -04:00
* In addition , as a special exception , the copyright holders give permission to
* link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file , and
* distribute linked combinations including the two .
*
* You must obey the GNU General Public License in all respects for all of the
* code used other than OpenSSL . If you modify file ( s ) with this exception , you
* may extend this exception to your version of the file ( s ) , but you are not
* obligated to do so . If you do not wish to do so , delete this exception
* statement from your version . If you delete this exception statement from all
* source files in the program , then also delete it here .
*
2012-02-20 15:07:38 -05:00
*/
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>
2014-05-19 16:25:21 -04:00
# include "config.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"
2014-10-18 18:16:19 -04:00
# include "xmpp/form.h"
2012-08-25 20:50:50 -04:00
# include "log.h"
2013-02-02 15:55:58 -05:00
# include "muc.h"
2014-05-19 15:41:19 -04:00
# ifdef HAVE_LIBOTR
2014-02-12 17:19:21 -05:00
# include "otr/otr.h"
2014-05-19 15:41:19 -04:00
# endif
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:47:41 -05:00
# include "xmpp/xmpp.h"
2013-07-14 16:58:02 -04:00
# include "xmpp/bookmark.h"
2014-04-06 16:35:17 -04:00
# include "ui/ui.h"
2014-09-12 08:28:33 -04:00
# include "ui/windows.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 * _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 ) ;
2014-03-29 18:58:48 -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 ) ;
2014-01-18 18:05:35 -05:00
static char * _connect_autocomplete ( char * input , int * size ) ;
2014-01-20 19:28:56 -05:00
static char * _statuses_autocomplete ( char * input , int * size ) ;
2014-01-24 20:00:51 -05:00
static char * _alias_autocomplete ( char * input , int * size ) ;
2014-03-05 15:57:59 -05:00
static char * _join_autocomplete ( char * input , int * size ) ;
2014-04-13 15:41:11 -04:00
static char * _log_autocomplete ( char * input , int * size ) ;
2014-10-18 20:23:06 -04:00
static char * _form_autocomplete ( char * input , int * size ) ;
2014-10-18 20:09:53 -04:00
static char * _form_field_autocomplete ( char * input , int * size ) ;
2014-10-09 17:39:57 -04:00
static char * _occupants_autocomplete ( char * input , int * size ) ;
2014-10-10 08:35:50 -04:00
static char * _kick_autocomplete ( char * input , int * size ) ;
2014-10-11 17:43:54 -04:00
static char * _ban_autocomplete ( char * input , int * size ) ;
2014-10-11 19:43:58 -04:00
static char * _affiliation_autocomplete ( char * input , int * size ) ;
static char * _role_autocomplete ( char * input , int * size ) ;
2014-12-03 19:16:42 -05:00
static char * _resource_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. " ,
2014-03-15 20:53:46 -04:00
" Supply a command (without the leading slash) to see help for 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 " ,
" ------ " ,
2014-03-15 20:53:46 -04:00
" Show version and license information. " ,
2012-10-22 19:18:28 -04:00
NULL } } } ,
2012-10-21 15:02:20 -04:00
{ " /connect " ,
2014-11-27 13:28:16 -05:00
cmd_connect , parse_args , 0 , 5 , NULL ,
{ " /connect [account] [server value] [port value] " , " Login to a chat service. " ,
{ " /connect [account] [server value] [port value] " ,
2014-12-29 10:29:28 -05:00
" ---------------------------------------------- " ,
2012-12-22 18:48:45 -05:00
" Connect to an XMPP service using the specified account. " ,
2014-01-18 18:49:15 -05:00
" Use the server property to specify a server if required. " ,
2014-01-18 19:05:04 -05:00
" Change the default port (5222, or 5223 for SSL) with the port property. " ,
2014-01-18 18:49:15 -05:00
" An account is automatically created if one does not exist. " ,
2014-11-27 13:28:16 -05:00
" If no account is specified, then the default account is used. "
2014-01-18 18:49:15 -05:00
" See the /account command for more details. " ,
2012-08-14 19:31:24 -04:00
" " ,
2014-11-27 13:28:16 -05:00
" Example: /connect " ,
2012-10-21 15:02:20 -04:00
" Example: /connect myuser@gmail.com " ,
2014-01-18 18:49:15 -05:00
" Example: /connect myuser@mycompany.com server talk.google.com " ,
" Example: /connect bob@someplace port 5678 " ,
" Example: /connect me@chatty server chatty.com port 5443 " ,
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 ,
2014-11-23 19:54:51 -05:00
{ " /roster [online|show|hide|by|size|add|remove|nick|clearnick] [offline|resource] [percent] [group|presence|none] [jid] [nickname] " , " Manage your roster. " ,
{ " /roster [online|show|hide|by|size|add|remove|nick|clearnick] [offline|resource] [percent] [group|presence|none] [jid] [nickname] " ,
2014-11-15 18:47:27 -05:00
" ------------------------------------------------------------------------------------------------------------------------- " ,
2013-06-01 19:45:40 -04:00
" View, add to, and remove from your roster. " ,
" Passing no arguments lists all contacts in your roster. " ,
2014-11-23 19:54:51 -05:00
" online - Show all online contacts in your roster. " ,
2014-11-10 19:00:10 -05:00
" show - Show the roster panel in the console window. " ,
" hide - Hide the roster panel. " ,
" show offline - Show offline contacts in the roster panel. " ,
" hide offline - Hide offline contacts in the roster panel. " ,
" show resource - Show contact's connected resources in the roster panel. " ,
" hide resource - Hide contact's connected resources in the roster panel. " ,
2014-11-10 19:30:29 -05:00
" by group - Group contacts in the roster panel by roster group. " ,
" by presence - Group contacts in the roster panel by presence. " ,
" by none - No grouping in the roster panel. " ,
2014-11-15 18:47:27 -05:00
" size - Percentage of the screen taken up by the roster (1-99). " ,
2014-11-10 19:00:10 -05:00
" add - Add a new item, jid is required, nickname is optional. " ,
" remove - Removes a contact, jid is required. " ,
" nick - Changes a contacts nickname, both jid and nickname are required, " ,
" clearnick - Removes the current nickname, jid is required. " ,
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 " ,
2014-03-16 13:59:01 -04:00
" Example : /roster clearnick kai@server.com (clears nickname) " ,
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 ,
2014-10-24 14:23:37 -04:00
{ " /info [contact|nick] " , " Show basic information about a contact, room, or room member. " ,
2013-06-30 17:59:06 -04:00
{ " /info [contact|nick] " ,
" -------------------- " ,
2014-10-24 14:23:37 -04:00
" Show basic information about a contact, room, or room member. " ,
" If in the console, a contact must be specified. " ,
2013-01-17 17:46:50 -05:00
" If in a chat window the parameter is not required, the current recipient will be used. " ,
2014-10-24 14:23:37 -04:00
" If in a chat room, providing no arguments will display information about the room. " ,
" If in a chat room, supplying a nick will show information about the occupant. " ,
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 } } } ,
2014-12-02 15:50:21 -05:00
{ " /resource " ,
cmd_resource , parse_args , 1 , 2 , NULL ,
{ " /resource set|off [resource] " , " Set the contact's resource. " ,
{ " /resource set|off [resource] " ,
" ---------------------------- " ,
" Set the resource to use when chatting to a contact. " ,
" set resource - Set the resource. " ,
" off - Let the server choose which resource to route messages to. " ,
NULL } } } ,
2012-11-03 21:27:01 -04:00
{ " /join " ,
2014-03-05 12:13:42 -05:00
cmd_join , parse_args , 1 , 5 , NULL ,
2014-03-16 14:12:16 -04:00
{ " /join room[@server] [nick value] [password value] " , " Join a chat room. " ,
{ " /join room[@server] [nick value] [password value] " ,
" ------------------------------------------------- " ,
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. " ,
2014-03-16 14:12:16 -04:00
" Otherwise the account preference 'muc.nick' will be used which by default is the localpart of your JID (before the @). " ,
2013-09-12 18:30:35 -04:00
" 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 " ,
2014-03-05 12:13:42 -05:00
" Example : /join jdev@conference.jabber.org nick mynick " ,
2014-03-16 14:12:16 -04:00
" Example : /join private@conference.jabber.org nick mynick password mypassword " ,
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 } } } ,
2014-09-02 19:36:42 -04:00
{ " /room " ,
2014-10-11 20:32:15 -04:00
cmd_room , parse_args , 1 , 1 , NULL ,
{ " /room accept|destroy|config " , " Room configuration. " ,
{ " /room accept|destroy|config " ,
" --------------------------- " ,
2014-09-15 16:33:25 -04:00
" accept - Accept default room configuration. " ,
" destroy - Reject default room configuration. " ,
" config - Edit room configuration. " ,
NULL } } } ,
2014-10-09 08:16:36 -04:00
2014-10-10 08:35:50 -04:00
{ " /kick " ,
cmd_kick , parse_args_with_freetext , 1 , 2 , NULL ,
{ " /kick nick [reason] " , " Kick occupants from chat rooms. " ,
{ " /kick nick [reason] " ,
" ------------------- " ,
" nick - Nickname of the occupant to kick from the room. " ,
" reason - Optional reason for kicking the occupant. " ,
NULL } } } ,
2014-10-11 17:43:54 -04:00
{ " /ban " ,
2014-10-11 20:32:15 -04:00
cmd_ban , parse_args_with_freetext , 1 , 2 , NULL ,
2014-10-11 17:43:54 -04:00
{ " /ban jid [reason] " , " Ban users from chat rooms. " ,
{ " /ban jid [reason] " ,
" ----------------- " ,
" jid - Bare JID of the user to ban from the room. " ,
" reason - Optional reason for banning the user. " ,
NULL } } } ,
2014-10-11 18:13:48 -04:00
{ " /subject " ,
cmd_subject , parse_args_with_freetext , 0 , 2 , NULL ,
{ " /subject set|clear [subject] " , " Set or clear room subject. " ,
{ " /subject set|clear [subject] " ,
" ---------------------------- " ,
" set subject - Set the room subject. " ,
" clear - Clear the room subject. " ,
NULL } } } ,
2014-10-11 19:43:58 -04:00
{ " /affiliation " ,
2014-10-17 20:37:52 -04:00
cmd_affiliation , parse_args_with_freetext , 1 , 4 , NULL ,
{ " /affiliation set|list [affiliation] [jid] [reason] " , " Manage room affiliations. " ,
{ " /affiliation set|list [affiliation] [jid] [reason] " ,
" -------------------------------------------------- " ,
" set affiliation jid [reason]- Set the affiliation of user with jid, with an optional reason. " ,
" list [affiliation] - List all users with the specified affiliation, or all if none specified. " ,
2014-10-11 19:43:58 -04:00
" The affiliation may be one of owner, admin, member, outcast or none. " ,
NULL } } } ,
{ " /role " ,
2014-10-17 20:37:52 -04:00
cmd_role , parse_args_with_freetext , 1 , 4 , NULL ,
{ " /role set|list [role] [nick] [reason] " , " Manage room roles. " ,
{ " /role set|list [role] [nick] [reason] " ,
" ------------------------------------- " ,
" set role nick [reason] - Set the role of occupant with nick, with an optional reason. " ,
" list [role] - List all occupants with the specified role, or all if none specified. " ,
2014-10-11 19:43:58 -04:00
" The role may be one of moderator, participant, visitor or none. " ,
NULL } } } ,
2014-10-09 08:16:36 -04:00
{ " /occupants " ,
2014-12-22 17:13:42 -05:00
cmd_occupants , parse_args , 1 , 2 , cons_occupants_setting ,
2014-11-15 18:47:27 -05:00
{ " /occupants show|hide|default|size [show|hide] [percent] " , " Show or hide room occupants. " ,
{ " /occupants show|hide|default|size [show|hide] [percent] " ,
" ------------------------------------------------------- " ,
2014-10-09 17:39:57 -04:00
" show - Show the occupants panel in chat rooms. " ,
" hide - Hide the occupants panel in chat rooms. " ,
" default - Whether occupants are shown by default in new rooms, 'show' or 'hide' " ,
2014-11-15 18:47:27 -05:00
" size - Percentage of the screen taken by the occupants list in rooms (1-99). " ,
2014-10-09 08:16:36 -04:00
NULL } } } ,
2014-09-15 16:33:25 -04:00
{ " /form " ,
2014-10-18 20:23:06 -04:00
cmd_form , parse_args , 1 , 2 , NULL ,
2014-10-24 14:14:38 -04:00
{ " /form show|submit|cancel|help [tag] " , " Form handling. " ,
{ " /form show|submit|cancel|help [tag] " ,
" ----------------------------------- " ,
2014-09-15 17:51:53 -04:00
" show - Show the current form. " ,
2014-09-15 16:33:25 -04:00
" submit - Submit the current form. " ,
" cancel - Cancel changes to the current form. " ,
2014-09-16 15:52:38 -04:00
" help [tag] - Display help for form, or a specific field. " ,
2014-09-02 19:36:42 -04:00
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 } } } ,
2014-03-29 18:58:48 -04:00
2013-07-14 16:58:02 -04:00
{ " /bookmark " ,
2014-08-19 17:51:00 -04:00
cmd_bookmark , parse_args , 0 , 8 , NULL ,
{ " /bookmark [list|add|update|remove|join] [room@server] [nick value] [password value] [autojoin on|off] " , " Manage bookmarks. " ,
{ " /bookmark [list|add|update|remove|join] [room@server] [nick value] [password value] [autojoin on|off] " ,
2014-05-17 18:20:23 -04:00
" --------------------------------------------------------------------------------------------------- " ,
2013-07-14 16:58:02 -04:00
" Manage bookmarks. " ,
2014-05-09 19:50:43 -04:00
" list: List all bookmarks. " ,
" add: Add a bookmark for room@server with the following optional properties: " ,
" nick: Nickname used in the chat room " ,
" password: Password for private rooms, note this may be stored in plaintext on your server " ,
" autojoin: Whether to join the room automatically on login \" on \" or \" off \" . " ,
" update: Update any of the above properties associated with the bookmark. " ,
" remove: Remove the bookmark for room@server. " ,
" join: Join room@server using the properties associated with the bookmark. " ,
2014-08-19 17:51:00 -04:00
" When in a chat room, the /bookmark command with no arguments will bookmark the current room with the current settings, and set autojoin to \" on \" . " ,
2013-07-14 16:58:02 -04:00
NULL } } } ,
2014-03-29 18:58:48 -04:00
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 " ,
2014-04-24 16:50:59 -04:00
cmd_wins , parse_args , 0 , 3 , NULL ,
{ " /wins [tidy|prune|swap] [source] [target] " , " List or tidy active windows. " ,
2014-04-24 18:08:27 -04:00
{ " /wins [tidy|prune|swap] [source] [target] " ,
" ----------------------------------------- " ,
2013-05-16 19:33:00 -04:00
" Passing no argument will list all currently active windows and information about their usage. " ,
2014-04-24 16:50:59 -04:00
" tidy : Shuffle windows so there are no gaps. " ,
" prune : Close all windows with no unread messages, and then tidy as above. " ,
2014-04-24 18:08:27 -04:00
" swap source target : Swap windows, target may be an empty position. " ,
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
2012-10-21 15:02:20 -04:00
{ " /who " ,
2013-12-15 11:10:32 -05:00
cmd_who , parse_args , 0 , 2 , NULL ,
2014-11-05 18:17:14 -05:00
{ " /who [status|role|affiliation] [group] " , " Show contacts/room occupants with chosen status, role or affiliation " ,
{ " /who [status|role|affiliation] [group] " ,
" -------------------------------------- " ,
" Normal usage: " ,
" Status may be one of - online, offline, away, dnd, xa, chat, available, unavailable, or any where: " ,
" online : Contacts that are online, chat, away, xa, dnd " ,
" available : Contacts that are available for chat - online, chat. " ,
" unavailable : Contacts that are not available for chat - offline, away, xa, dnd. " ,
" any : Contacts with any status (same as calling with no argument). " ,
" " ,
" The group argument filters the list by that group. " ,
2012-11-11 19:21:49 -05:00
" " ,
2014-11-05 18:17:14 -05:00
" In a chat room, a role or affiliation may also be supplied instead of status. " ,
" Roles: moderator, participant, visitor " ,
" Affiliations: owner, admin, member " ,
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
2014-10-18 15:22:34 -04:00
{ " /privileges " ,
cmd_privileges , parse_args , 1 , 1 , & cons_privileges_setting ,
{ " /privileges on|off " , " Show occupant privileges in chat rooms. " ,
{ " /privileges on|off " ,
" --------------------------- " ,
2014-10-24 14:10:29 -04:00
" If enabled the room roster will be broken down my role, and role information will be showin in the room. " ,
2014-10-18 15:22:34 -04:00
NULL } } } ,
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 } } } ,
2014-11-07 17:38:34 -05:00
{ " /presence " ,
cmd_presence , parse_args , 1 , 1 , & cons_presence_setting ,
{ " /presence on|off " , " Show the contacts presence in the titlebar. " ,
{ " /presence on|off " ,
" ---------------- " ,
" Switch display of the contacts presence on or off. " ,
NULL } } } ,
2014-11-09 18:29:25 -05:00
{ " /wrap " ,
cmd_wrap , parse_args , 1 , 1 , & cons_wrap_setting ,
{ " /wrap on|off " , " Word wrapping. " ,
{ " /wrap on|off " ,
" ------------ " ,
" Enable or disable word wrapping. " ,
NULL } } } ,
2014-11-15 19:40:54 -05:00
{ " /time " ,
cmd_time , parse_args , 1 , 1 , & cons_time_setting ,
{ " /time minutes|seconds " , " Time display. " ,
{ " /time minutes|seconds " ,
" --------------------- " ,
" Configure time precision for the main window. " ,
NULL } } } ,
2014-12-21 13:15:29 -05:00
{ " /inpblock " ,
cmd_inpblock , parse_args , 1 , 1 , & cons_inpblock_setting ,
{ " /inpblock millis " , " Input blocking delay. " ,
{ " /inpblock millis " ,
" ---------------- " ,
" Time to wait in milliseconds before reading input from the terminal buffer, defaults to 20. " ,
" Valid values are 1-1000. " ,
" A higher value will result in less CPU usage, but a noticable delay for response to input. " ,
" A lower value will result in higher CPU usage, but faster response to input. " ,
NULL } } } ,
2012-08-11 20:39:51 -04:00
{ " /notify " ,
2014-05-24 11:46:05 -04:00
cmd_notify , parse_args , 2 , 3 , & cons_notify_setting ,
2014-05-24 15:46:03 -04:00
{ " /notify [type value]|[type setting value] " , " Control various desktop noficiations. " ,
{ " /notify [type value]|[type setting value] " ,
" ----------------------------------------- " ,
2012-10-27 17:05:08 -04:00
" Settings for various desktop notifications where type is one of: " ,
2014-05-24 11:46:05 -04:00
" message : Notificaitons for regular messages. " ,
" : on|off " ,
2014-05-24 15:46:03 -04:00
" message current : Whether messages in the current window trigger notifications. " ,
" : on|off " ,
2014-05-24 17:14:26 -04:00
" message text : Show message text in message notifications. " ,
" : on|off " ,
2014-05-24 11:46:05 -04:00
" room : Notificaitons for chat room messages. " ,
" : on|off|mention " ,
2014-05-24 15:46:03 -04:00
" room current : Whether chat room messages in the current window trigger notifications. " ,
" : on|off " ,
2014-05-24 17:14:26 -04:00
" room text : Show message test in chat room message notifications. " ,
" : on|off " ,
2014-05-24 11:46:05 -04:00
" 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 " ,
2014-05-24 16:13:33 -04:00
" typing current : Whether typing notifications are triggerd for the current window. " ,
" : on|off " ,
2014-05-24 11:46:05 -04:00
" invite : Notifications for chat room invites. " ,
" : on|off " ,
" sub : Notifications for subscription requests. " ,
" : on|off " ,
2013-04-27 18:46:49 -04:00
" " ,
2014-05-24 15:46:03 -04:00
" Example : /notify message on (enable message notifications) " ,
2014-05-24 17:14:26 -04:00
" Example : /notify message text on (show message text in notifications) " ,
2014-05-24 15:46:03 -04:00
" Example : /notify room mention (enable chat room notifications only on mention) " ,
" Example : /notify room current off (disable room message notifications when window visible) " ,
2014-05-24 17:14:26 -04:00
" Example : /notify room text off (do not show message text in chat room notifications) " ,
2014-05-24 15:46:03 -04:00
" Example : /notify remind 10 (remind every 10 seconds) " ,
" Example : /notify remind 0 (switch off reminders) " ,
" Example : /notify typing on (enable typing notifications) " ,
" 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 " ,
" ------------- " ,
2014-08-11 12:54:20 -04:00
" Make the terminal flash when incoming messages are received. " ,
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 " ,
2014-04-03 16:46:43 -04:00
cmd_titlebar , parse_args , 1 , 1 , & cons_titlebar_setting ,
{ " /titlebar on|off " , " Show information in the window title bar. " ,
{ " /titlebar on|off " ,
" ---------------- " ,
" Show information in the window title bar. " ,
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 } } } ,
2014-01-23 14:56:33 -05:00
{ " /alias " ,
2014-01-23 18:53:20 -05:00
cmd_alias , parse_args_with_freetext , 1 , 3 , NULL ,
2014-01-23 14:56:33 -05:00
{ " /alias add|remove|list [name value] " , " Add your own command aliases. " ,
{ " /alias add|remove|list [name value] " ,
" ----------------------------------- " ,
" Add, remove or show command aliases. " ,
2014-11-30 18:34:54 -05:00
" The alias will be available as a command, the leading '/' will be added if not supplied. " ,
2014-01-24 19:50:07 -05:00
" Example : /alias add friends /who online friends " ,
2014-11-30 18:34:54 -05:00
" Example : /alias add /q /quit " ,
2014-01-24 19:50:07 -05:00
" Example : /alias a /away \" I'm in a meeting. \" " ,
" Example : /alias remove q " ,
" Example : /alias list " ,
" The above aliases will be available as /friends and /a " ,
2014-01-23 14:56:33 -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 " ,
2014-04-30 18:59:40 -04:00
cmd_otr , parse_args , 1 , 3 , NULL ,
2014-05-07 16:28:36 -04:00
{ " /otr gen|myfp|theirfp|start|end|trust|untrust|log|warn|libver|policy|secret|question|answer " , " Off The Record encryption commands. " ,
{ " /otr gen|myfp|theirfp|start|end|trust|untrust|log|warn|libver|policy|secret|question|answer " ,
" ------------------------------------------------------------------------------------------- " ,
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-05-07 16:28:36 -04: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. " ,
2014-01-16 17:44:23 -05:00
" warn - Show when unencrypted messaging is being used in the title bar, options are 'on' and 'off' with 'on' being the default. " ,
2014-02-11 18:19:09 -05:00
" libver - Show which version of the libotr library is being used. " ,
2014-04-22 18:53:15 -04:00
" policy - manual, opportunistic or always. " ,
2014-05-07 16:28:36 -04:00
" secret [secret]- Verify a contacts identity using a shared secret. " ,
" question [question] [answer] - Verify a contacts identity using a question and expected anwser, if the question has spaces, surround with double quotes. " ,
2014-05-17 21:19:30 -04:00
" answer [answer] - Respond to a question answer verification request with your answer. " ,
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 " ,
2014-04-13 17:20:15 -04:00
cmd_log , parse_args , 1 , 2 , & cons_log_setting ,
2014-04-13 15:41:11 -04:00
{ " /log [property] [value] " , " Manage system logging settings. " ,
{ " /log [property] [value] " ,
" ----------------------- " ,
2014-04-13 17:20:15 -04:00
" where : Show the current log file location. " ,
2014-04-13 15:41:11 -04:00
" Property may be one of: " ,
2014-04-13 16:56:35 -04:00
" rotate : Rotate log, accepts 'on' or 'off', defaults to 'on'. " ,
" maxsize : With rotate enabled, specifies the max log size, defaults to 1048580 (1MB). " ,
" shared : Share logs between all instances, accepts 'on' or 'off', defaults to 'on'. " ,
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 } } } ,
2014-09-03 20:08:10 -04:00
{ " /ping " ,
cmd_ping , parse_args , 0 , 1 , NULL ,
{ " /ping [target] " , " Send ping IQ request. " ,
{ " /ping [rarget] " ,
" -------------- " ,
" Sends an IQ ping stanza to the specificed target. " ,
2014-09-03 20:09:28 -04:00
" If no target is supplied, your chat server will be used. " ,
2014-09-03 20:08:10 -04:00
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 " ,
" ----------------------- " ,
2014-09-05 12:32:26 -04:00
" 'setting' may be one of 'mode', 'time', 'message' or 'check', with the following values: " ,
2012-11-30 18:34:14 -05:00
" " ,
" 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 " ,
2014-11-20 18:31:20 -05:00
" Example: /autoaway check off " ,
2012-11-30 18:34:14 -05:00
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. " ,
2014-11-27 13:28:16 -05:00
" default [set|off] [account] : Set the default account. " ,
2013-12-08 18:36:00 -05:00
" add account : Create a new account. " ,
2014-11-23 16:37:10 -05:00
" remove account : Remove an account. " ,
2013-12-08 18:36:00 -05:00
" 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. " ,
2014-01-18 19:05:04 -05:00
" port : The port used for connecting if not the default (5222, or 5223 for SSL). " ,
2013-06-23 14:19:39 -04:00
" 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. " ,
2015-01-07 00:00:02 -05:00
" eval_password : Shell command evaluated to retrieve password for the account. Can be used to retrieve password from keyring. " ,
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. " ,
2014-05-11 10:26:45 -04:00
" otr : Override global OTR policy for this account: manual, opportunistic or always. " ,
2013-06-23 14:19:39 -04:00
" " ,
2014-10-27 16:37:51 -04:00
" The clear command works for password, port and server " ,
2013-12-08 18:36:00 -05:00
" " ,
2013-06-23 14:19:39 -04:00
" Example : /account add work " ,
2014-01-18 19:05:04 -05:00
" : /account set work jid me@chatty " ,
" : /account set work server talk.chat.com " ,
" : /account set work port 5111 " ,
2013-06-23 14:19:39 -04:00
" : /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 ,
2014-11-19 20:50:04 -05:00
{ " /theme list|set|colours [theme-name] " , " Change colour theme. " ,
{ " /theme list|set|colours [theme-name] " ,
" ------------------------------------ " ,
2013-06-23 14:19:39 -04:00
" Change the colour settings used. " ,
" " ,
2014-11-17 16:10:08 -05:00
" list : List all available themes. " ,
" set theme-name : Load the named theme. \" default \" will reset to the default colours. " ,
" colours : Show the colour values as rendered by the terminal. " ,
2013-06-23 14:19:39 -04:00
" " ,
" Example : /theme list " ,
" Example : /theme set mycooltheme " ,
NULL } } } ,
2013-01-20 20:26:09 -05:00
{ " /statuses " ,
2014-01-18 20:25:04 -05:00
cmd_statuses , parse_args , 2 , 2 , & cons_statuses_setting ,
{ " /statuses console|chat|muc setting " , " Set preferences for presence change messages. " ,
{ " /statuses console|chat|muc setting " ,
" ---------------------------------- " ,
" Configure how presence changes are displayed in various windows. " ,
2014-03-15 18:25:15 -04:00
" Settings: " ,
" all - Show all presence changes. " ,
" online - Show only online/offline changes. " ,
" none - Don't show any presence changes. " ,
" The default is 'all' for all windows. " ,
2013-06-24 19:49:29 -04:00
NULL } } } ,
2012-08-10 19:18:03 -04:00
2014-04-15 08:16:32 -04:00
{ " /xmlconsole " ,
cmd_xmlconsole , parse_args , 0 , 0 , NULL ,
{ " /xmlconsole " , " Open the XML console " ,
{ " /xmlconsole " ,
" ----------- " ,
" Open the XML console to view incoming and outgoing XMPP traffic. " ,
NULL } } } ,
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 ;
2014-10-04 17:43:22 -04:00
static Autocomplete who_room_ac ;
static Autocomplete who_roster_ac ;
2013-01-24 20:11:49 -05:00
static Autocomplete help_ac ;
static Autocomplete notify_ac ;
2014-05-24 11:46:05 -04:00
static Autocomplete notify_room_ac ;
2014-05-24 15:46:03 -04:00
static Autocomplete notify_message_ac ;
2014-05-24 16:13:33 -04:00
static Autocomplete notify_typing_ac ;
2013-01-24 20:11:49 -05:00
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 ;
2014-11-27 13:07:18 -05:00
static Autocomplete account_default_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 ;
2014-11-10 18:51:13 -05:00
static Autocomplete roster_option_ac ;
2014-11-10 19:30:29 -05:00
static Autocomplete roster_by_ac ;
2013-06-02 12:51:38 -04:00
static Autocomplete group_ac ;
2014-03-29 18:58:48 -04:00
static Autocomplete bookmark_ac ;
2014-05-10 19:17:10 -04:00
static Autocomplete bookmark_property_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 ;
2014-04-22 19:01:18 -04:00
static Autocomplete otr_policy_ac ;
2014-01-18 18:05:35 -05:00
static Autocomplete connect_property_ac ;
2014-01-20 19:28:56 -05:00
static Autocomplete statuses_ac ;
2014-03-15 18:25:15 -04:00
static Autocomplete statuses_setting_ac ;
2014-01-23 14:56:33 -05:00
static Autocomplete alias_ac ;
2014-01-24 20:00:51 -05:00
static Autocomplete aliases_ac ;
2014-03-05 15:57:59 -05:00
static Autocomplete join_property_ac ;
2014-09-02 19:36:42 -04:00
static Autocomplete room_ac ;
2014-10-11 19:43:58 -04:00
static Autocomplete affiliation_ac ;
static Autocomplete role_ac ;
static Autocomplete privilege_cmd_ac ;
2014-10-11 18:13:48 -04:00
static Autocomplete subject_ac ;
2014-09-15 16:33:25 -04:00
static Autocomplete form_ac ;
2014-10-18 20:01:31 -04:00
static Autocomplete form_field_multi_ac ;
2014-10-09 16:42:09 -04:00
static Autocomplete occupants_ac ;
2014-10-09 17:39:57 -04:00
static Autocomplete occupants_default_ac ;
2014-11-15 19:40:54 -05:00
static Autocomplete time_ac ;
2014-12-03 19:16:42 -05:00
static Autocomplete resource_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 ( ) ;
2014-01-24 20:00:51 -05:00
aliases_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 , " 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
2014-01-23 18:53:20 -05:00
// load aliases
GList * aliases = prefs_get_aliases ( ) ;
GList * curr = aliases ;
while ( curr ! = NULL ) {
ProfAlias * alias = curr - > data ;
GString * ac_alias = g_string_new ( " / " ) ;
g_string_append ( ac_alias , alias - > name ) ;
autocomplete_add ( commands_ac , ac_alias - > str ) ;
2014-01-24 20:00:51 -05:00
autocomplete_add ( aliases_ac , alias - > name ) ;
2014-01-23 18:53:20 -05:00
g_string_free ( ac_alias , TRUE ) ;
curr = g_list_next ( curr ) ;
}
2014-06-18 16:36:09 -04:00
prefs_free_aliases ( aliases ) ;
2014-01-23 18:53:20 -05: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 " ) ;
2014-05-11 08:32:59 -04:00
autocomplete_add ( prefs_ac , " otr " ) ;
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 " ) ;
2014-05-24 10:54:10 -04:00
autocomplete_add ( notify_ac , " room " ) ;
2013-08-25 20:29:50 -04:00
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
2014-05-24 15:46:03 -04:00
notify_message_ac = autocomplete_new ( ) ;
autocomplete_add ( notify_message_ac , " on " ) ;
autocomplete_add ( notify_message_ac , " off " ) ;
autocomplete_add ( notify_message_ac , " current " ) ;
2014-05-24 17:14:26 -04:00
autocomplete_add ( notify_message_ac , " text " ) ;
2014-05-24 15:46:03 -04:00
2014-05-24 11:46:05 -04:00
notify_room_ac = autocomplete_new ( ) ;
autocomplete_add ( notify_room_ac , " on " ) ;
autocomplete_add ( notify_room_ac , " off " ) ;
autocomplete_add ( notify_room_ac , " mention " ) ;
2014-05-24 15:46:03 -04:00
autocomplete_add ( notify_room_ac , " current " ) ;
2014-05-24 17:14:26 -04:00
autocomplete_add ( notify_room_ac , " text " ) ;
2014-05-24 11:46:05 -04:00
2014-05-24 16:13:33 -04:00
notify_typing_ac = autocomplete_new ( ) ;
autocomplete_add ( notify_typing_ac , " on " ) ;
autocomplete_add ( notify_typing_ac , " off " ) ;
autocomplete_add ( notify_typing_ac , " current " ) ;
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 " ) ;
2014-04-13 15:41:11 -04:00
autocomplete_add ( log_ac , " rotate " ) ;
2014-04-13 16:56:35 -04:00
autocomplete_add ( log_ac , " shared " ) ;
2014-04-13 17:20:15 -04:00
autocomplete_add ( log_ac , " where " ) ;
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 " ) ;
2014-11-17 16:10:08 -05:00
autocomplete_add ( theme_ac , " colours " ) ;
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 " ) ;
2014-11-23 16:37:10 -05:00
autocomplete_add ( account_ac , " remove " ) ;
2013-08-25 20:29:50 -04:00
autocomplete_add ( account_ac , " enable " ) ;
autocomplete_add ( account_ac , " disable " ) ;
2014-11-27 13:07:18 -05:00
autocomplete_add ( account_ac , " default " ) ;
2013-08-25 20:29:50 -04:00
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 " ) ;
2014-01-18 19:05:04 -05:00
autocomplete_add ( account_set_ac , " port " ) ;
2013-12-10 17:11:48 -05:00
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 " ) ;
2015-01-07 00:00:02 -05:00
autocomplete_add ( account_set_ac , " eval_password " ) ;
2013-12-10 17:11:48 -05:00
autocomplete_add ( account_set_ac , " muc " ) ;
autocomplete_add ( account_set_ac , " nick " ) ;
2014-05-11 08:48:41 -04:00
autocomplete_add ( account_set_ac , " otr " ) ;
2013-12-10 17:11:48 -05:00
account_clear_ac = autocomplete_new ( ) ;
autocomplete_add ( account_clear_ac , " password " ) ;
2015-01-07 00:00:02 -05:00
autocomplete_add ( account_clear_ac , " eval_password " ) ;
2014-10-23 18:07:27 -04:00
autocomplete_add ( account_clear_ac , " server " ) ;
2014-10-23 18:12:15 -04:00
autocomplete_add ( account_clear_ac , " port " ) ;
2014-05-11 10:32:38 -04:00
autocomplete_add ( account_clear_ac , " otr " ) ;
2013-12-10 17:11:48 -05:00
2014-11-27 13:07:18 -05:00
account_default_ac = autocomplete_new ( ) ;
autocomplete_add ( account_default_ac , " set " ) ;
autocomplete_add ( account_default_ac , " off " ) ;
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 " ) ;
2014-04-24 16:50:59 -04:00
autocomplete_add ( wins_ac , " swap " ) ;
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 " ) ;
2014-11-23 19:54:51 -05:00
autocomplete_add ( roster_ac , " online " ) ;
2013-08-25 20:29:50 -04:00
autocomplete_add ( roster_ac , " nick " ) ;
2014-03-16 13:53:41 -04:00
autocomplete_add ( roster_ac , " clearnick " ) ;
2013-08-25 20:29:50 -04:00
autocomplete_add ( roster_ac , " remove " ) ;
2014-11-10 18:23:02 -05:00
autocomplete_add ( roster_ac , " show " ) ;
autocomplete_add ( roster_ac , " hide " ) ;
2014-11-10 19:30:29 -05:00
autocomplete_add ( roster_ac , " by " ) ;
2014-11-15 18:47:27 -05:00
autocomplete_add ( roster_ac , " size " ) ;
2013-05-18 21:30:03 -04:00
2014-11-10 18:51:13 -05:00
roster_option_ac = autocomplete_new ( ) ;
autocomplete_add ( roster_option_ac , " offline " ) ;
2014-11-10 19:00:10 -05:00
autocomplete_add ( roster_option_ac , " resource " ) ;
2014-11-10 18:51:13 -05:00
2014-11-10 19:30:29 -05:00
roster_by_ac = autocomplete_new ( ) ;
autocomplete_add ( roster_by_ac , " group " ) ;
autocomplete_add ( roster_by_ac , " presence " ) ;
autocomplete_add ( roster_by_ac , " none " ) ;
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 ;
2014-10-04 17:43:22 -04:00
who_roster_ac = autocomplete_new ( ) ;
autocomplete_add ( who_roster_ac , " chat " ) ;
autocomplete_add ( who_roster_ac , " online " ) ;
autocomplete_add ( who_roster_ac , " away " ) ;
autocomplete_add ( who_roster_ac , " xa " ) ;
autocomplete_add ( who_roster_ac , " dnd " ) ;
autocomplete_add ( who_roster_ac , " offline " ) ;
autocomplete_add ( who_roster_ac , " available " ) ;
autocomplete_add ( who_roster_ac , " unavailable " ) ;
autocomplete_add ( who_roster_ac , " any " ) ;
who_room_ac = autocomplete_new ( ) ;
autocomplete_add ( who_room_ac , " chat " ) ;
autocomplete_add ( who_room_ac , " online " ) ;
autocomplete_add ( who_room_ac , " away " ) ;
autocomplete_add ( who_room_ac , " xa " ) ;
autocomplete_add ( who_room_ac , " dnd " ) ;
autocomplete_add ( who_room_ac , " available " ) ;
autocomplete_add ( who_room_ac , " unavailable " ) ;
autocomplete_add ( who_room_ac , " moderator " ) ;
autocomplete_add ( who_room_ac , " participant " ) ;
autocomplete_add ( who_room_ac , " visitor " ) ;
autocomplete_add ( who_room_ac , " owner " ) ;
autocomplete_add ( who_room_ac , " admin " ) ;
autocomplete_add ( who_room_ac , " member " ) ;
2014-03-29 18:58:48 -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 , " list " ) ;
2014-05-09 19:50:43 -04:00
autocomplete_add ( bookmark_ac , " add " ) ;
autocomplete_add ( bookmark_ac , " update " ) ;
2013-08-25 20:29:50 -04:00
autocomplete_add ( bookmark_ac , " remove " ) ;
2014-05-09 19:50:43 -04:00
autocomplete_add ( bookmark_ac , " join " ) ;
2014-03-29 18:58:48 -04:00
2014-05-10 19:17:10 -04:00
bookmark_property_ac = autocomplete_new ( ) ;
autocomplete_add ( bookmark_property_ac , " nick " ) ;
autocomplete_add ( bookmark_property_ac , " password " ) ;
autocomplete_add ( bookmark_property_ac , " autojoin " ) ;
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-04-26 17:08:53 -04:00
autocomplete_add ( otr_ac , " secret " ) ;
2014-01-13 15:17:45 -05:00
autocomplete_add ( otr_ac , " log " ) ;
2014-01-16 17:44:23 -05:00
autocomplete_add ( otr_ac , " warn " ) ;
2014-02-11 18:19:09 -05:00
autocomplete_add ( otr_ac , " libver " ) ;
2014-04-22 19:01:18 -04:00
autocomplete_add ( otr_ac , " policy " ) ;
2014-04-30 18:59:40 -04:00
autocomplete_add ( otr_ac , " question " ) ;
autocomplete_add ( otr_ac , " answer " ) ;
2014-01-13 15:17:45 -05:00
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
2014-04-22 19:01:18 -04:00
otr_policy_ac = autocomplete_new ( ) ;
autocomplete_add ( otr_policy_ac , " manual " ) ;
autocomplete_add ( otr_policy_ac , " opportunistic " ) ;
autocomplete_add ( otr_policy_ac , " always " ) ;
2014-01-18 18:05:35 -05:00
connect_property_ac = autocomplete_new ( ) ;
autocomplete_add ( connect_property_ac , " server " ) ;
autocomplete_add ( connect_property_ac , " port " ) ;
2014-03-05 15:57:59 -05:00
join_property_ac = autocomplete_new ( ) ;
autocomplete_add ( join_property_ac , " nick " ) ;
2014-03-16 14:12:16 -04:00
autocomplete_add ( join_property_ac , " password " ) ;
2014-03-05 15:57:59 -05:00
2014-01-20 19:28:56 -05:00
statuses_ac = autocomplete_new ( ) ;
autocomplete_add ( statuses_ac , " console " ) ;
autocomplete_add ( statuses_ac , " chat " ) ;
autocomplete_add ( statuses_ac , " muc " ) ;
2014-03-15 18:25:15 -04:00
statuses_setting_ac = autocomplete_new ( ) ;
autocomplete_add ( statuses_setting_ac , " all " ) ;
autocomplete_add ( statuses_setting_ac , " online " ) ;
autocomplete_add ( statuses_setting_ac , " none " ) ;
2014-01-20 19:28:56 -05:00
2014-01-23 14:56:33 -05:00
alias_ac = autocomplete_new ( ) ;
autocomplete_add ( alias_ac , " add " ) ;
autocomplete_add ( alias_ac , " remove " ) ;
autocomplete_add ( alias_ac , " list " ) ;
2014-09-02 19:36:42 -04:00
room_ac = autocomplete_new ( ) ;
2014-09-10 19:01:44 -04:00
autocomplete_add ( room_ac , " accept " ) ;
autocomplete_add ( room_ac , " destroy " ) ;
2014-09-02 19:36:42 -04:00
autocomplete_add ( room_ac , " config " ) ;
2014-10-11 19:43:58 -04:00
affiliation_ac = autocomplete_new ( ) ;
autocomplete_add ( affiliation_ac , " owner " ) ;
autocomplete_add ( affiliation_ac , " admin " ) ;
autocomplete_add ( affiliation_ac , " member " ) ;
autocomplete_add ( affiliation_ac , " none " ) ;
autocomplete_add ( affiliation_ac , " outcast " ) ;
role_ac = autocomplete_new ( ) ;
autocomplete_add ( role_ac , " moderator " ) ;
autocomplete_add ( role_ac , " participant " ) ;
autocomplete_add ( role_ac , " visitor " ) ;
autocomplete_add ( role_ac , " none " ) ;
privilege_cmd_ac = autocomplete_new ( ) ;
autocomplete_add ( privilege_cmd_ac , " list " ) ;
autocomplete_add ( privilege_cmd_ac , " set " ) ;
2014-10-04 18:58:54 -04:00
2014-10-11 18:13:48 -04:00
subject_ac = autocomplete_new ( ) ;
autocomplete_add ( subject_ac , " set " ) ;
autocomplete_add ( subject_ac , " clear " ) ;
2014-10-04 22:05:46 -04:00
2014-09-15 16:33:25 -04:00
form_ac = autocomplete_new ( ) ;
autocomplete_add ( form_ac , " submit " ) ;
autocomplete_add ( form_ac , " cancel " ) ;
2014-09-15 17:51:53 -04:00
autocomplete_add ( form_ac , " show " ) ;
2014-09-16 15:52:38 -04:00
autocomplete_add ( form_ac , " help " ) ;
2014-09-02 19:36:42 -04:00
2014-10-18 20:01:31 -04:00
form_field_multi_ac = autocomplete_new ( ) ;
autocomplete_add ( form_field_multi_ac , " add " ) ;
autocomplete_add ( form_field_multi_ac , " remove " ) ;
2014-10-09 16:42:09 -04:00
occupants_ac = autocomplete_new ( ) ;
autocomplete_add ( occupants_ac , " show " ) ;
autocomplete_add ( occupants_ac , " hide " ) ;
2014-10-09 17:39:57 -04:00
autocomplete_add ( occupants_ac , " default " ) ;
2014-11-15 18:47:27 -05:00
autocomplete_add ( occupants_ac , " size " ) ;
2014-10-09 17:39:57 -04:00
occupants_default_ac = autocomplete_new ( ) ;
autocomplete_add ( occupants_default_ac , " show " ) ;
autocomplete_add ( occupants_default_ac , " hide " ) ;
2014-10-09 16:42:09 -04:00
2014-11-15 19:40:54 -05:00
time_ac = autocomplete_new ( ) ;
autocomplete_add ( time_ac , " minutes " ) ;
autocomplete_add ( time_ac , " seconds " ) ;
2014-11-15 20:28:41 -05:00
autocomplete_add ( time_ac , " off " ) ;
2014-11-15 19:40:54 -05:00
2014-12-03 19:16:42 -05:00
time_ac = autocomplete_new ( ) ;
autocomplete_add ( time_ac , " minutes " ) ;
autocomplete_add ( time_ac , " seconds " ) ;
resource_ac = autocomplete_new ( ) ;
autocomplete_add ( resource_ac , " set " ) ;
autocomplete_add ( resource_ac , " off " ) ;
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 ) ;
2014-10-04 17:43:22 -04:00
autocomplete_free ( who_room_ac ) ;
autocomplete_free ( who_roster_ac ) ;
2013-01-24 20:11:49 -05:00
autocomplete_free ( help_ac ) ;
autocomplete_free ( notify_ac ) ;
2014-05-24 15:46:03 -04:00
autocomplete_free ( notify_message_ac ) ;
2014-05-24 11:46:05 -04:00
autocomplete_free ( notify_room_ac ) ;
2014-05-24 16:13:33 -04:00
autocomplete_free ( notify_typing_ac ) ;
2013-01-24 20:11:49 -05:00
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 ) ;
2014-09-25 19:48:48 -04:00
autocomplete_free ( theme_load_ac ) ;
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 ) ;
2014-11-27 13:07:18 -05:00
autocomplete_free ( account_default_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 ) ;
2014-11-10 18:51:13 -05:00
autocomplete_free ( roster_option_ac ) ;
2014-11-10 19:30:29 -05:00
autocomplete_free ( roster_by_ac ) ;
2013-06-02 12:51:38 -04:00
autocomplete_free ( group_ac ) ;
2014-03-29 18:58:48 -04:00
autocomplete_free ( bookmark_ac ) ;
2014-05-10 19:17:10 -04:00
autocomplete_free ( bookmark_property_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 ) ;
2014-04-22 19:01:18 -04:00
autocomplete_free ( otr_policy_ac ) ;
2014-01-18 18:05:35 -05:00
autocomplete_free ( connect_property_ac ) ;
2014-01-20 19:28:56 -05:00
autocomplete_free ( statuses_ac ) ;
2014-03-15 18:25:15 -04:00
autocomplete_free ( statuses_setting_ac ) ;
2014-01-23 14:56:33 -05:00
autocomplete_free ( alias_ac ) ;
2014-01-24 20:00:51 -05:00
autocomplete_free ( aliases_ac ) ;
2014-03-05 15:57:59 -05:00
autocomplete_free ( join_property_ac ) ;
2014-09-02 19:36:42 -04:00
autocomplete_free ( room_ac ) ;
2014-10-11 19:43:58 -04:00
autocomplete_free ( affiliation_ac ) ;
autocomplete_free ( role_ac ) ;
autocomplete_free ( privilege_cmd_ac ) ;
2014-10-11 18:13:48 -04:00
autocomplete_free ( subject_ac ) ;
2014-09-15 16:33:25 -04:00
autocomplete_free ( form_ac ) ;
2014-10-18 20:01:31 -04:00
autocomplete_free ( form_field_multi_ac ) ;
2014-10-09 16:42:09 -04:00
autocomplete_free ( occupants_ac ) ;
2014-10-09 17:39:57 -04:00
autocomplete_free ( occupants_default_ac ) ;
2014-11-15 19:40:54 -05:00
autocomplete_free ( time_ac ) ;
2014-12-03 19:16:42 -05:00
autocomplete_free ( resource_ac ) ;
2012-10-21 19:29:39 -04:00
}
2014-01-24 20:39:12 -05:00
gboolean
cmd_exists ( char * cmd )
{
if ( commands_ac = = NULL ) {
return FALSE ;
} else {
return autocomplete_contains ( commands_ac , cmd ) ;
}
}
2014-01-23 18:53:20 -05:00
void
cmd_autocomplete_add ( char * value )
{
if ( commands_ac ! = NULL ) {
autocomplete_add ( commands_ac , value ) ;
}
}
2014-10-18 18:16:19 -04:00
void
cmd_autocomplete_add_form_fields ( DataForm * form )
{
if ( form ) {
GSList * fields = autocomplete_create_list ( form - > tag_ac ) ;
GSList * curr_field = fields ;
while ( curr_field ) {
GString * field_str = g_string_new ( " / " ) ;
g_string_append ( field_str , curr_field - > data ) ;
cmd_autocomplete_add ( field_str - > str ) ;
g_string_free ( field_str , TRUE ) ;
curr_field = g_slist_next ( curr_field ) ;
}
g_slist_free_full ( fields , free ) ;
}
}
void
cmd_autocomplete_remove_form_fields ( DataForm * form )
{
if ( form ) {
GSList * fields = autocomplete_create_list ( form - > tag_ac ) ;
GSList * curr_field = fields ;
while ( curr_field ) {
GString * field_str = g_string_new ( " / " ) ;
g_string_append ( field_str , curr_field - > data ) ;
cmd_autocomplete_remove ( field_str - > str ) ;
g_string_free ( field_str , TRUE ) ;
curr_field = g_slist_next ( curr_field ) ;
}
g_slist_free_full ( fields , free ) ;
}
}
2014-01-23 18:53:20 -05:00
void
cmd_autocomplete_remove ( char * value )
{
if ( commands_ac ! = NULL ) {
autocomplete_remove ( commands_ac , value ) ;
}
}
2014-01-24 20:00:51 -05:00
void
cmd_alias_add ( char * value )
{
if ( aliases_ac ! = NULL ) {
autocomplete_add ( aliases_ac , value ) ;
}
}
void
cmd_alias_remove ( char * value )
{
if ( aliases_ac ! = NULL ) {
autocomplete_remove ( aliases_ac , value ) ;
}
}
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-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 , ' ' ) ) ) {
2014-04-25 19:36:36 -04:00
int i = 0 ;
char * found = NULL ;
char inp_cpy [ * size ] ;
2012-10-27 20:42:26 -04:00
for ( i = 0 ; i < * size ; i + + ) {
inp_cpy [ i ] = input [ i ] ;
}
inp_cpy [ i ] = ' \0 ' ;
2014-07-09 15:23:47 -04:00
found = autocomplete_complete ( commands_ac , inp_cpy , TRUE ) ;
2012-10-27 20:42:26 -04:00
if ( found ! = NULL ) {
2014-04-02 16:01:20 -04:00
char * auto_msg = strdup ( found ) ;
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , auto_msg , size ) ;
2012-10-27 20:42:26 -04:00
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 ( ) ;
2014-09-28 17:09:20 -04:00
muc_invites_reset_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 ) ;
2014-05-24 15:46:03 -04:00
autocomplete_reset ( notify_message_ac ) ;
2014-05-24 11:46:05 -04:00
autocomplete_reset ( notify_room_ac ) ;
2014-05-24 16:13:33 -04:00
autocomplete_reset ( notify_typing_ac ) ;
2013-01-24 20:11:49 -05:00
autocomplete_reset ( sub_ac ) ;
2013-01-10 19:48:58 -05:00
2014-10-04 17:43:22 -04:00
autocomplete_reset ( who_room_ac ) ;
autocomplete_reset ( who_roster_ac ) ;
2013-01-24 20:11:49 -05:00
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 ) ;
2014-11-27 13:07:18 -05:00
autocomplete_reset ( account_default_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 ) ;
2014-11-10 18:51:13 -05:00
autocomplete_reset ( roster_option_ac ) ;
2014-11-10 19:30:29 -05:00
autocomplete_reset ( roster_by_ac ) ;
2013-06-02 12:51:38 -04:00
autocomplete_reset ( group_ac ) ;
2014-03-29 18:58:48 -04:00
autocomplete_reset ( bookmark_ac ) ;
2014-05-10 19:17:10 -04:00
autocomplete_reset ( bookmark_property_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 ) ;
2014-04-22 19:01:18 -04:00
autocomplete_reset ( otr_policy_ac ) ;
2014-01-18 18:05:35 -05:00
autocomplete_reset ( connect_property_ac ) ;
2014-01-20 19:28:56 -05:00
autocomplete_reset ( statuses_ac ) ;
2014-03-15 18:25:15 -04:00
autocomplete_reset ( statuses_setting_ac ) ;
2014-01-23 14:56:33 -05:00
autocomplete_reset ( alias_ac ) ;
2014-01-24 20:00:51 -05:00
autocomplete_reset ( aliases_ac ) ;
2014-03-05 15:57:59 -05:00
autocomplete_reset ( join_property_ac ) ;
2014-09-02 19:36:42 -04:00
autocomplete_reset ( room_ac ) ;
2014-10-11 19:43:58 -04:00
autocomplete_reset ( affiliation_ac ) ;
autocomplete_reset ( role_ac ) ;
autocomplete_reset ( privilege_cmd_ac ) ;
2014-10-11 18:13:48 -04:00
autocomplete_reset ( subject_ac ) ;
2014-09-15 16:33:25 -04:00
autocomplete_reset ( form_ac ) ;
2014-10-18 20:01:31 -04:00
autocomplete_reset ( form_field_multi_ac ) ;
2014-10-09 16:42:09 -04:00
autocomplete_reset ( occupants_ac ) ;
2014-10-09 17:39:57 -04:00
autocomplete_reset ( occupants_default_ac ) ;
2014-11-15 19:40:54 -05:00
autocomplete_reset ( time_ac ) ;
2014-12-03 19:16:42 -05:00
autocomplete_reset ( resource_ac ) ;
2014-09-17 17:51:52 -04:00
2014-12-03 19:16:42 -05:00
if ( ui_current_win_type ( ) = = WIN_CHAT ) {
2014-12-18 18:57:19 -05:00
ProfChatWin * chatwin = wins_get_current_chat ( ) ;
PContact contact = roster_get_contact ( chatwin - > barejid ) ;
2014-12-03 19:16:42 -05:00
if ( contact ) {
p_contact_resource_ac_reset ( contact ) ;
}
}
2014-12-18 18:57:19 -05:00
if ( ui_current_win_type ( ) = = WIN_MUC ) {
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
muc_autocomplete_reset ( mucwin - > roomjid ) ;
muc_jid_autocomplete_reset ( mucwin - > roomjid ) ;
}
if ( ui_current_win_type ( ) = = WIN_MUC_CONFIG ) {
ProfMucConfWin * confwin = wins_get_current_muc_conf ( ) ;
if ( confwin - > form ) {
form_reset_autocompleters ( confwin - > form ) ;
}
}
2014-03-29 18:58:48 -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
{
2014-10-18 22:27:34 -04:00
if ( g_str_has_prefix ( command , " /field " ) & & ui_current_win_type ( ) = = WIN_MUC_CONFIG ) {
gboolean result = FALSE ;
gchar * * args = parse_args_with_freetext ( inp , 1 , 2 , & result ) ;
if ( ! result ) {
ui_current_print_formatted_line ( ' ! ' , 0 , " Invalid command, see /form help " ) ;
result = TRUE ;
} else {
gchar * * tokens = g_strsplit ( inp , " " , 2 ) ;
char * field = tokens [ 0 ] + 1 ;
result = cmd_form_field ( field , args ) ;
g_strfreev ( tokens ) ;
}
g_strfreev ( args ) ;
return result ;
}
2013-06-24 19:49:29 -04:00
Command * cmd = g_hash_table_lookup ( commands , command ) ;
2014-04-09 16:31:43 -04:00
gboolean result = FALSE ;
2012-10-21 15:02:20 -04:00
2012-08-14 19:42:38 -04:00
if ( cmd ! = NULL ) {
2014-04-09 16:31:43 -04:00
gchar * * args = cmd - > parser ( inp , cmd - > min_args , cmd - > max_args , & result ) ;
2014-04-09 16:38:42 -04:00
if ( result = = FALSE ) {
2014-04-09 17:05:31 -04:00
ui_invalid_command_usage ( cmd - > help . usage , cmd - > setting_func ) ;
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 {
2014-01-23 18:04:00 -05:00
gboolean ran_alias = FALSE ;
gboolean alias_result = cmd_execute_alias ( inp , & ran_alias ) ;
if ( ! ran_alias ) {
return cmd_execute_default ( inp ) ;
} else {
return alias_result ;
}
}
}
gboolean
cmd_execute_alias ( const char * const inp , gboolean * ran )
{
if ( inp [ 0 ] ! = ' / ' ) {
ran = FALSE ;
return TRUE ;
} else {
char * alias = strdup ( inp + 1 ) ;
char * value = prefs_get_alias ( alias ) ;
free ( alias ) ;
if ( value ! = NULL ) {
* ran = TRUE ;
return process_input ( value ) ;
} else {
* ran = FALSE ;
return TRUE ;
}
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
2014-08-06 17:46:36 -04:00
cmd_execute_default ( const char * inp )
2012-08-22 19:41:22 -04:00
{
2013-04-21 13:40:22 -04:00
jabber_conn_status_t status = jabber_get_connection_status ( ) ;
2014-08-06 17:46:36 -04:00
// handle escaped commands - treat as normal message
if ( g_str_has_prefix ( inp , " // " ) ) {
inp + + ;
2014-08-04 17:21:53 -04:00
// handle unknown commands
2014-08-06 17:46:36 -04:00
} else if ( ( inp [ 0 ] = = ' / ' ) & & ( ! g_str_has_prefix ( inp , " /me " ) ) ) {
2014-08-04 17:21:53 -04:00
cons_show ( " Unknown command: %s " , inp ) ;
cons_alert ( ) ;
return TRUE ;
}
2014-12-19 19:52:35 -05:00
win_type_t win_type = ui_current_win_type ( ) ;
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 {
2014-12-19 19:52:35 -05:00
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
message_send_groupchat ( mucwin - > roomjid , inp ) ;
2013-04-21 13:40:22 -04:00
}
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 {
2014-12-03 18:36:39 -05:00
ProfWin * current = wins_get_current ( ) ;
2014-12-15 20:39:47 -05:00
ProfChatWin * chatwin = ( ProfChatWin * ) current ;
2014-12-26 19:52:34 -05:00
assert ( chatwin - > memcheck = = PROFCHATWIN_MEMCHECK ) ;
2013-08-17 13:45:51 -04:00
# ifdef HAVE_LIBOTR
2014-12-19 19:52:35 -05:00
prof_otrpolicy_t policy = otr_get_policy ( chatwin - > barejid ) ;
if ( policy = = PROF_OTRPOLICY_ALWAYS & & ! otr_is_secure ( chatwin - > barejid ) ) {
2014-04-22 18:53:15 -04:00
cons_show_error ( " Failed to send message. Please check OTR policy " ) ;
return TRUE ;
}
2014-12-19 19:52:35 -05:00
if ( otr_is_secure ( chatwin - > barejid ) ) {
char * encrypted = otr_encrypt_message ( chatwin - > barejid , inp ) ;
2014-01-11 12:03:01 -05:00
if ( encrypted ! = NULL ) {
2014-12-28 17:40:59 -05:00
gboolean send_state = chat_session_on_message_send ( chatwin - > barejid ) ;
2014-12-28 21:22:01 -05:00
message_send_chat ( chatwin - > barejid , chatwin - > resource , encrypted , send_state ) ;
2014-01-11 12:03:01 -05:00
otr_free_message ( encrypted ) ;
if ( prefs_get_boolean ( PREF_CHLOG ) ) {
const char * jid = jabber_get_fulljid ( ) ;
Jid * jidp = jid_create ( jid ) ;
2014-06-17 19:32:36 -04:00
char * pref_otr_log = prefs_get_string ( PREF_OTR_LOG ) ;
if ( strcmp ( pref_otr_log , " on " ) = = 0 ) {
2014-12-19 19:52:35 -05:00
chat_log_chat ( jidp - > barejid , chatwin - > barejid , inp , PROF_OUT_LOG , NULL ) ;
2014-06-17 19:32:36 -04:00
} else if ( strcmp ( pref_otr_log , " redact " ) = = 0 ) {
2014-12-19 19:52:35 -05:00
chat_log_chat ( jidp - > barejid , chatwin - > barejid , " [redacted] " , PROF_OUT_LOG , NULL ) ;
2014-01-13 15:38:19 -05:00
}
2014-06-17 19:32:36 -04:00
prefs_free_string ( pref_otr_log ) ;
2014-01-11 12:03:01 -05:00
jid_destroy ( jidp ) ;
}
2014-12-19 19:52:35 -05:00
ui_outgoing_chat_msg ( " me " , chatwin - > barejid , inp ) ;
2014-01-11 12:03:01 -05:00
} else {
cons_show_error ( " Failed to send message. " ) ;
}
} else {
2014-12-28 17:40:59 -05:00
gboolean send_state = chat_session_on_message_send ( chatwin - > barejid ) ;
2014-12-26 19:52:34 -05:00
message_send_chat ( chatwin - > barejid , chatwin - > resource , inp , send_state ) ;
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 ) ;
2014-12-19 19:52:35 -05:00
chat_log_chat ( jidp - > barejid , chatwin - > barejid , inp , PROF_OUT_LOG , NULL ) ;
2014-01-09 19:08:49 -05:00
jid_destroy ( jidp ) ;
}
2014-12-19 19:52:35 -05:00
ui_outgoing_chat_msg ( " me " , chatwin - > barejid , inp ) ;
2014-01-09 19:08:49 -05:00
}
2013-08-17 13:45:51 -04:00
# else
2014-12-28 17:40:59 -05:00
gboolean send_state = chat_session_on_message_send ( chatwin - > barejid ) ;
2014-12-26 19:52:34 -05:00
message_send_chat ( chatwin - > barejid , chatwin - > resource , inp , send_state ) ;
2013-04-21 13:40:22 -04:00
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 ) ;
2014-12-19 19:52:35 -05:00
chat_log_chat ( jidp - > barejid , chatwin - > barejid , inp , PROF_OUT_LOG , NULL ) ;
2013-04-21 13:40:22 -04:00
jid_destroy ( jidp ) ;
}
2014-12-19 19:52:35 -05:00
ui_outgoing_chat_msg ( " me " , chatwin - > barejid , 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 {
2014-12-19 19:52:35 -05:00
ProfPrivateWin * privatewin = wins_get_current_private ( ) ;
message_send_private ( privatewin - > fulljid , inp ) ;
ui_outgoing_private_msg ( " me " , privatewin - > fulljid , inp ) ;
2013-04-21 13:40:22 -04:00
}
break ;
case WIN_CONSOLE :
2014-04-15 18:45:17 -04:00
case WIN_XML :
2014-04-12 10:20:31 -04:00
cons_show ( " Unknown command: %s " , inp ) ;
2013-04-21 13:40:22 -04:00
break ;
2013-05-04 21:31:04 -04:00
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 " ,
2014-04-03 16:46:43 -04:00
" /flash " , " /splash " , " /chlog " , " /grlog " , " /mouse " , " /history " , " /titlebar " ,
2014-11-09 18:29:25 -05:00
" /vercheck " , " /privileges " , " /presence " , " /wrap " } ;
2013-06-02 14:56:35 -04:00
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 ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
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 ) {
2014-12-18 18:57:19 -05:00
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
Autocomplete nick_ac = muc_roster_ac ( mucwin - > roomjid ) ;
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 ] ,
2014-07-09 15:32:28 -04:00
nick_ac , TRUE ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
g_free ( result ) ;
return ;
}
}
2013-01-10 19:48:58 -05:00
}
2013-06-02 14:56:35 -04:00
2014-05-17 21:19:30 -04:00
// otherwise autocomplete 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 ] ,
2014-11-22 16:13:33 -05:00
roster_contact_autocomplete ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
g_free ( result ) ;
return ;
}
}
2014-09-03 20:08:10 -04:00
gchar * resource_choices [ ] = { " /caps " , " /software " , " /ping " } ;
2013-06-02 14:56:35 -04:00
for ( i = 0 ; i < ARRAY_SIZE ( resource_choices ) ; i + + ) {
result = autocomplete_param_with_func ( input , size , resource_choices [ i ] ,
2014-11-22 16:13:33 -05:00
roster_fulljid_autocomplete ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
g_free ( result ) ;
return ;
}
}
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /invite " , roster_contact_autocomplete ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
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 ] ,
2014-09-28 17:09:20 -04:00
muc_invites_find ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
g_free ( result ) ;
return ;
}
}
2014-11-15 19:40:54 -05:00
gchar * cmds [ ] = { " /help " , " /prefs " , " /disco " , " /close " , " /wins " , " /subject " , " /room " , " /time " } ;
Autocomplete completers [ ] = { help_ac , prefs_ac , disco_ac , close_ac , wins_ac , subject_ac , room_ac , time_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 + + ) {
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , cmds [ i ] , completers [ i ] , TRUE ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 14:56:35 -04:00
g_free ( result ) ;
return ;
}
}
2014-05-14 16:54:38 -04:00
GHashTable * ac_funcs = g_hash_table_new ( g_str_hash , g_str_equal ) ;
g_hash_table_insert ( ac_funcs , " /who " , _who_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /sub " , _sub_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /notify " , _notify_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /autoaway " , _autoaway_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /theme " , _theme_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /log " , _log_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /account " , _account_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /roster " , _roster_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /group " , _group_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /bookmark " , _bookmark_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /autoconnect " , _autoconnect_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /otr " , _otr_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /connect " , _connect_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /statuses " , _statuses_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /alias " , _alias_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /join " , _join_autocomplete ) ;
2014-10-18 20:23:06 -04:00
g_hash_table_insert ( ac_funcs , " /form " , _form_autocomplete ) ;
2014-10-09 17:39:57 -04:00
g_hash_table_insert ( ac_funcs , " /occupants " , _occupants_autocomplete ) ;
2014-10-10 08:35:50 -04:00
g_hash_table_insert ( ac_funcs , " /kick " , _kick_autocomplete ) ;
2014-10-11 17:43:54 -04:00
g_hash_table_insert ( ac_funcs , " /ban " , _ban_autocomplete ) ;
2014-10-11 19:43:58 -04:00
g_hash_table_insert ( ac_funcs , " /affiliation " , _affiliation_autocomplete ) ;
g_hash_table_insert ( ac_funcs , " /role " , _role_autocomplete ) ;
2014-12-03 19:16:42 -05:00
g_hash_table_insert ( ac_funcs , " /resource " , _resource_autocomplete ) ;
2014-05-14 16:54:38 -04:00
char parsed [ * size + 1 ] ;
i = 0 ;
while ( i < * size ) {
if ( input [ i ] = = ' ' ) {
break ;
} else {
parsed [ i ] = input [ i ] ;
}
i + + ;
}
parsed [ i ] = ' \0 ' ;
char * ( * ac_func ) ( char * , int * ) = g_hash_table_lookup ( ac_funcs , parsed ) ;
if ( ac_func ! = NULL ) {
result = ac_func ( input , size ) ;
2013-06-02 15:11:42 -04:00
if ( result ! = NULL ) {
2014-04-07 16:50:28 -04:00
ui_replace_input ( input , result , size ) ;
2013-06-02 15:11:42 -04:00
g_free ( result ) ;
2014-05-17 17:49:24 -04:00
g_hash_table_destroy ( ac_funcs ) ;
2013-06-02 15:11:42 -04:00
return ;
}
2013-06-02 14:56:35 -04:00
}
2014-05-17 17:49:24 -04:00
g_hash_table_destroy ( ac_funcs ) ;
2013-06-02 14:56:35 -04:00
2014-10-18 19:26:02 -04:00
input [ * size ] = ' \0 ' ;
2014-10-18 20:09:53 -04:00
if ( g_str_has_prefix ( input , " /field " ) ) {
result = _form_field_autocomplete ( input , size ) ;
2014-10-18 19:26:02 -04:00
if ( result ! = NULL ) {
ui_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 ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /sub " , sub_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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
char * result = NULL ;
2014-10-04 17:43:22 -04:00
win_type_t win_type = ui_current_win_type ( ) ;
2012-12-09 19:23:55 -05:00
2014-10-04 17:43:22 -04:00
if ( win_type = = WIN_MUC ) {
result = autocomplete_param_with_ac ( input , size , " /who " , who_room_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-12-09 19:23:55 -05:00
}
2014-10-04 17:43:22 -04:00
} else {
int i = 0 ;
gchar * group_commands [ ] = { " /who any " , " /who online " , " /who offline " ,
" /who chat " , " /who away " , " /who xa " , " /who dnd " , " /who available " ,
" /who unavailable " } ;
2013-12-08 18:36:00 -05:00
2014-10-04 17:43:22 -04:00
for ( i = 0 ; i < ARRAY_SIZE ( group_commands ) ; i + + ) {
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , group_commands [ i ] , roster_group_autocomplete ) ;
2014-10-04 17:43:22 -04:00
if ( result ! = NULL ) {
return result ;
}
}
result = autocomplete_param_with_ac ( input , size , " /who " , who_roster_ac , TRUE ) ;
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 ;
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /roster nick " , roster_barejid_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /roster clearnick " , roster_barejid_autocomplete ) ;
2014-03-16 13:53:41 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /roster remove " , roster_barejid_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-11-10 18:51:13 -05:00
result = autocomplete_param_with_ac ( input , size , " /roster show " , roster_option_ac , TRUE ) ;
if ( result ! = NULL ) {
return result ;
}
result = autocomplete_param_with_ac ( input , size , " /roster hide " , roster_option_ac , TRUE ) ;
if ( result ! = NULL ) {
return result ;
}
2014-11-10 19:30:29 -05:00
result = autocomplete_param_with_ac ( input , size , " /roster by " , roster_by_ac , TRUE ) ;
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /roster " , roster_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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 ;
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /group show " , roster_group_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-11-27 16:20:00 -05:00
}
2012-11-17 21:40:49 -05:00
2014-11-22 16:13:33 -05:00
result = autocomplete_param_no_with_func ( input , size , " /group add " , 4 , roster_contact_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-11-27 19:36:51 -05:00
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_no_with_func ( input , size , " /group remove " , 4 , roster_contact_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-11-27 19:36:51 -05:00
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /group add " , roster_group_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-11-27 16:53:56 -05:00
}
2014-11-22 16:13:33 -05:00
result = autocomplete_param_with_func ( input , size , " /group remove " , roster_group_autocomplete ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
2012-10-28 14:51:13 -04:00
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /group " , group_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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
}
2014-03-29 18:58:48 -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
{
2014-05-10 19:17:10 -04:00
char * found = NULL ;
gboolean result ;
2014-05-14 15:49:25 -04:00
gchar * * args = parse_args ( input , 3 , 8 , & result ) ;
2014-05-14 16:01:54 -04:00
gboolean handle_options = result & & ( g_strv_length ( args ) > 2 ) ;
2014-05-10 19:17:10 -04:00
2014-05-14 16:01:54 -04:00
if ( handle_options & & ( ( strcmp ( args [ 0 ] , " add " ) = = 0 ) | | ( strcmp ( args [ 0 ] , " update " ) = = 0 ) ) ) {
GString * beginning = g_string_new ( " /bookmark " ) ;
2014-05-14 15:49:25 -04:00
gboolean autojoin = FALSE ;
int num_args = g_strv_length ( args ) ;
2014-05-10 19:17:10 -04:00
2014-05-14 16:01:54 -04:00
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
if ( num_args = = 4 & & g_strcmp0 ( args [ 2 ] , " autojoin " ) = = 0 ) {
2014-05-10 19:17:10 -04:00
g_string_append ( beginning , " " ) ;
2014-05-14 16:01:54 -04:00
g_string_append ( beginning , args [ 2 ] ) ;
autojoin = TRUE ;
2014-05-14 15:53:31 -04:00
}
2014-05-10 19:17:10 -04:00
2014-05-14 15:53:31 -04:00
if ( num_args > 4 ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 2 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 3 ] ) ;
if ( num_args = = 6 & & g_strcmp0 ( args [ 4 ] , " autojoin " ) = = 0 ) {
2014-05-10 19:17:10 -04:00
g_string_append ( beginning , " " ) ;
2014-05-14 15:53:31 -04:00
g_string_append ( beginning , args [ 4 ] ) ;
autojoin = TRUE ;
}
}
2014-05-10 19:17:10 -04:00
2014-05-14 15:53:31 -04:00
if ( num_args > 6 ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 4 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 5 ] ) ;
if ( num_args = = 8 & & g_strcmp0 ( args [ 6 ] , " autojoin " ) = = 0 ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 6 ] ) ;
autojoin = TRUE ;
2014-05-10 19:17:10 -04:00
}
2014-05-14 15:53:31 -04:00
}
2012-02-09 18:15:53 -05:00
2014-05-14 16:01:54 -04:00
if ( autojoin ) {
found = autocomplete_param_with_func ( input , size , beginning - > str , prefs_autocomplete_boolean_choice ) ;
} else {
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , bookmark_property_ac , TRUE ) ;
2014-05-14 16:01:54 -04:00
}
g_string_free ( beginning , TRUE ) ;
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-05-14 16:01:54 -04:00
return found ;
2014-05-10 19:17:10 -04:00
}
2013-05-16 19:33:00 -04:00
}
2012-11-13 19:39:34 -05:00
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-05-10 19:17:10 -04:00
found = autocomplete_param_with_func ( input , size , " /bookmark remove " , bookmark_find ) ;
if ( found ! = NULL ) {
return found ;
2013-12-15 11:10:32 -05:00
}
2014-05-10 19:17:10 -04:00
found = autocomplete_param_with_func ( input , size , " /bookmark join " , bookmark_find ) ;
if ( found ! = NULL ) {
return found ;
2014-05-09 19:50:43 -04:00
}
2014-05-10 19:17:10 -04:00
found = autocomplete_param_with_func ( input , size , " /bookmark update " , bookmark_find ) ;
if ( found ! = NULL ) {
return found ;
2013-08-29 16:41:10 -04:00
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , " /bookmark " , bookmark_ac , TRUE ) ;
2014-05-10 19:17:10 -04:00
return found ;
2013-06-24 19:49:29 -04:00
}
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
2014-05-24 15:46:03 -04:00
result = autocomplete_param_with_func ( input , size , " /notify room current " , prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
result = autocomplete_param_with_func ( input , size , " /notify message current " , prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-05-24 16:13:33 -04:00
result = autocomplete_param_with_func ( input , size , " /notify typing current " , prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-05-24 17:14:26 -04:00
result = autocomplete_param_with_func ( input , size , " /notify room text " , prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
result = autocomplete_param_with_func ( input , size , " /notify message text " , prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /notify room " , notify_room_ac , TRUE ) ;
2014-05-24 11:46:05 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /notify message " , notify_message_ac , TRUE ) ;
2014-05-24 15:46:03 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /notify typing " , notify_typing_ac , TRUE ) ;
2014-05-24 16:13:33 -04:00
if ( result ! = NULL ) {
return result ;
}
gchar * boolean_choices [ ] = { " /notify invite " , " /notify sub " } ;
2013-12-15 11:10:32 -05:00
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
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /notify " , notify_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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 *
_autoaway_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2012-08-14 18:22:12 -04:00
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /autoaway mode " , autoaway_mode_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
if ( result ! = NULL ) {
return result ;
}
result = autocomplete_param_with_func ( input , size , " /autoaway check " ,
prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /autoaway " , autoaway_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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
}
2014-04-13 15:41:11 -04:00
static char *
_log_autocomplete ( char * input , int * size )
{
char * result = NULL ;
result = autocomplete_param_with_func ( input , size , " /log rotate " ,
prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-04-13 16:56:35 -04:00
result = autocomplete_param_with_func ( input , size , " /log shared " ,
prefs_autocomplete_boolean_choice ) ;
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /log " , log_ac , TRUE ) ;
2014-04-13 15:41:11 -04:00
if ( result ! = NULL ) {
return result ;
}
return NULL ;
}
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
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /autoconnect " , autoconnect_ac , TRUE ) ;
2013-12-15 11:10:32 -05:00
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 )
{
2014-05-11 10:59:11 -04:00
char * found = NULL ;
2014-01-13 13:56:04 -05:00
2014-11-22 16:13:33 -05:00
found = autocomplete_param_with_func ( input , size , " /otr start " , roster_contact_autocomplete ) ;
2014-05-11 10:59:11 -04:00
if ( found ! = NULL ) {
return found ;
2014-01-13 14:00:34 -05:00
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , " /otr log " , otr_log_ac , TRUE ) ;
2014-05-11 10:59:11 -04:00
if ( found ! = NULL ) {
return found ;
2014-01-13 15:17:45 -05:00
}
2014-05-11 10:59:11 -04:00
// /otr policy always user@server.com
gboolean result ;
gchar * * args = parse_args ( input , 3 , 3 , & result ) ;
if ( result & & ( strcmp ( args [ 0 ] , " policy " ) = = 0 ) ) {
GString * beginning = g_string_new ( " /otr " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
2014-11-22 16:13:33 -05:00
found = autocomplete_param_with_func ( input , size , beginning - > str , roster_contact_autocomplete ) ;
2014-05-11 10:59:11 -04:00
g_string_free ( beginning , TRUE ) ;
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-05-11 10:59:11 -04:00
return found ;
}
2014-04-22 19:01:18 -04:00
}
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , " /otr policy " , otr_policy_ac , TRUE ) ;
2014-05-11 10:59:11 -04:00
if ( found ! = NULL ) {
return found ;
}
found = autocomplete_param_with_func ( input , size , " /otr warn " ,
2014-01-16 17:44:23 -05:00
prefs_autocomplete_boolean_choice ) ;
2014-05-11 10:59:11 -04:00
if ( found ! = NULL ) {
return found ;
2014-01-16 17:44:23 -05:00
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , " /otr " , otr_ac , TRUE ) ;
2014-05-11 10:59:11 -04:00
if ( found ! = NULL ) {
return found ;
2014-01-13 13:56:04 -05:00
}
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
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /theme set " , theme_load_ac , TRUE ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
return result ;
}
2012-12-08 19:46:14 -05:00
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /theme " , theme_ac , TRUE ) ;
2013-06-02 14:56:35 -04:00
if ( result ! = NULL ) {
return result ;
}
return NULL ;
2012-12-08 19:46:14 -05:00
}
2014-12-03 19:16:42 -05:00
static char *
_resource_autocomplete ( char * input , int * size )
{
char * found = NULL ;
ProfWin * current = wins_get_current ( ) ;
if ( current & & current - > type = = WIN_CHAT ) {
2014-12-18 18:57:19 -05:00
ProfChatWin * chatwin = wins_get_current_chat ( ) ;
PContact contact = roster_get_contact ( chatwin - > barejid ) ;
2014-12-03 19:16:42 -05:00
if ( contact ) {
Autocomplete ac = p_contact_resource_ac ( contact ) ;
found = autocomplete_param_with_ac ( input , size , " /resource set " , ac , FALSE ) ;
if ( found ! = NULL ) {
return found ;
}
}
}
found = autocomplete_param_with_ac ( input , size , " /resource " , resource_ac , FALSE ) ;
if ( found ! = NULL ) {
return found ;
}
return NULL ;
}
2014-10-18 20:23:06 -04:00
static char *
_form_autocomplete ( char * input , int * size )
{
2014-12-09 20:14:11 -05:00
ProfWin * current = wins_get_current ( ) ;
if ( current - > type ! = WIN_MUC_CONFIG ) {
return NULL ;
}
2014-10-18 20:23:06 -04:00
char * found = NULL ;
2014-12-15 20:39:47 -05:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) current ;
DataForm * form = confwin - > form ;
2014-10-18 20:23:06 -04:00
if ( form ) {
found = autocomplete_param_with_ac ( input , size , " /form help " , form - > tag_ac , TRUE ) ;
if ( found ! = NULL ) {
return found ;
}
}
found = autocomplete_param_with_ac ( input , size , " /form " , form_ac , TRUE ) ;
if ( found ! = NULL ) {
return found ;
}
return NULL ;
}
2014-09-02 19:36:42 -04:00
static char *
2014-10-18 20:09:53 -04:00
_form_field_autocomplete ( char * input , int * size )
2014-09-02 19:36:42 -04:00
{
2014-10-18 19:26:02 -04:00
ProfWin * current = wins_get_current ( ) ;
2014-12-09 20:14:11 -05:00
if ( current - > type ! = WIN_MUC_CONFIG ) {
return NULL ;
}
char * found = NULL ;
2014-10-18 20:01:31 -04:00
2014-12-15 20:39:47 -05:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) current ;
DataForm * form = confwin - > form ;
2014-10-18 20:09:53 -04:00
if ( form = = NULL ) {
return NULL ;
}
input [ * size ] = ' \0 ' ;
gchar * * split = g_strsplit ( input , " " , 0 ) ;
if ( g_strv_length ( split ) = = 3 ) {
char * field_tag = split [ 0 ] + 1 ;
if ( form_tag_exists ( form , field_tag ) ) {
form_field_type_t field_type = form_get_field_type ( form , field_tag ) ;
Autocomplete value_ac = form_get_value_ac ( form , field_tag ) ; ;
GString * beginning = g_string_new ( split [ 0 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , split [ 1 ] ) ;
if ( ( ( g_strcmp0 ( split [ 1 ] , " add " ) = = 0 ) | | ( g_strcmp0 ( split [ 1 ] , " remove " ) = = 0 ) )
& & field_type = = FIELD_LIST_MULTI ) {
found = autocomplete_param_with_ac ( input , size , beginning - > str , value_ac , TRUE ) ;
} else if ( ( g_strcmp0 ( split [ 1 ] , " remove " ) = = 0 ) & & field_type = = FIELD_TEXT_MULTI ) {
found = autocomplete_param_with_ac ( input , size , beginning - > str , value_ac , TRUE ) ;
} else if ( ( g_strcmp0 ( split [ 1 ] , " remove " ) = = 0 ) & & field_type = = FIELD_JID_MULTI ) {
found = autocomplete_param_with_ac ( input , size , beginning - > str , value_ac , TRUE ) ;
}
2014-10-31 21:48:36 -04:00
g_string_free ( beginning , TRUE ) ;
2014-10-18 20:09:53 -04:00
}
} else if ( g_strv_length ( split ) = = 2 ) {
char * field_tag = split [ 0 ] + 1 ;
if ( form_tag_exists ( form , field_tag ) ) {
form_field_type_t field_type = form_get_field_type ( form , field_tag ) ;
Autocomplete value_ac = form_get_value_ac ( form , field_tag ) ; ;
switch ( field_type )
{
case FIELD_BOOLEAN :
found = autocomplete_param_with_func ( input , size , split [ 0 ] , prefs_autocomplete_boolean_choice ) ;
break ;
case FIELD_LIST_SINGLE :
found = autocomplete_param_with_ac ( input , size , split [ 0 ] , value_ac , TRUE ) ;
break ;
case FIELD_LIST_MULTI :
case FIELD_JID_MULTI :
case FIELD_TEXT_MULTI :
found = autocomplete_param_with_ac ( input , size , split [ 0 ] , form_field_multi_ac , TRUE ) ;
break ;
default :
break ;
2014-10-18 19:26:02 -04:00
}
}
}
2014-10-18 20:09:53 -04:00
g_strfreev ( split ) ;
2014-10-18 19:26:02 -04:00
return found ;
2014-09-02 19:36:42 -04:00
}
2014-10-09 17:39:57 -04:00
static char *
_occupants_autocomplete ( char * input , int * size )
{
char * found = NULL ;
found = autocomplete_param_with_ac ( input , size , " /occupants default " , occupants_default_ac , TRUE ) ;
if ( found ! = NULL ) {
return found ;
}
found = autocomplete_param_with_ac ( input , size , " /occupants " , occupants_ac , TRUE ) ;
if ( found ! = NULL ) {
return found ;
}
return NULL ;
}
2014-10-10 08:35:50 -04:00
static char *
_kick_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2014-12-18 18:57:19 -05:00
if ( ui_current_win_type ( ) = = WIN_MUC ) {
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
Autocomplete nick_ac = muc_roster_ac ( mucwin - > roomjid ) ;
if ( nick_ac ! = NULL ) {
result = autocomplete_param_with_ac ( input , size , " /kick " , nick_ac , TRUE ) ;
if ( result ! = NULL ) {
return result ;
}
2014-10-10 08:35:50 -04:00
}
}
2014-12-18 18:57:19 -05:00
return result ;
2014-10-10 08:35:50 -04:00
}
2014-10-11 17:43:54 -04:00
static char *
_ban_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2014-12-18 18:57:19 -05:00
if ( ui_current_win_type ( ) = = WIN_MUC ) {
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
Autocomplete jid_ac = muc_roster_jid_ac ( mucwin - > roomjid ) ;
if ( jid_ac ! = NULL ) {
result = autocomplete_param_with_ac ( input , size , " /ban " , jid_ac , TRUE ) ;
if ( result ! = NULL ) {
return result ;
}
2014-10-11 17:43:54 -04:00
}
}
2014-12-18 18:57:19 -05:00
return result ;
2014-10-11 17:43:54 -04:00
}
2014-10-04 16:38:31 -04:00
static char *
2014-10-11 19:43:58 -04:00
_affiliation_autocomplete ( char * input , int * size )
2014-10-04 16:38:31 -04:00
{
char * result = NULL ;
2014-10-06 16:42:09 -04:00
2014-12-18 18:57:19 -05:00
if ( ui_current_win_type ( ) = = WIN_MUC ) {
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
gboolean parse_result ;
Autocomplete jid_ac = muc_roster_jid_ac ( mucwin - > roomjid ) ;
2014-10-06 16:42:09 -04:00
2014-12-18 18:57:19 -05:00
input [ * size ] = ' \0 ' ;
gchar * * args = parse_args ( input , 3 , 3 , & parse_result ) ;
2014-10-06 17:59:25 -04:00
2014-12-18 18:57:19 -05:00
if ( ( strncmp ( input , " /affiliation " , 12 ) = = 0 ) & & ( parse_result = = TRUE ) ) {
GString * beginning = g_string_new ( " /affiliation " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
result = autocomplete_param_with_ac ( input , size , beginning - > str , jid_ac , TRUE ) ;
g_string_free ( beginning , TRUE ) ;
if ( result ! = NULL ) {
g_strfreev ( args ) ;
return result ;
}
2014-10-06 17:59:25 -04:00
}
2014-12-18 18:57:19 -05:00
g_strfreev ( args ) ;
}
2014-11-03 15:57:22 -05:00
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /affiliation set " , affiliation_ac , TRUE ) ;
2014-10-04 18:58:54 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /affiliation list " , affiliation_ac , TRUE ) ;
2014-10-04 18:58:54 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /affiliation " , privilege_cmd_ac , TRUE ) ;
2014-10-04 18:58:54 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-12-18 18:57:19 -05:00
return result ;
2014-10-11 19:43:58 -04:00
}
static char *
_role_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2014-12-18 18:57:19 -05:00
if ( ui_current_win_type ( ) = = WIN_MUC ) {
ProfMucWin * mucwin = wins_get_current_muc ( ) ;
gboolean parse_result ;
Autocomplete nick_ac = muc_roster_ac ( mucwin - > roomjid ) ;
2014-10-11 19:43:58 -04:00
2014-12-18 18:57:19 -05:00
input [ * size ] = ' \0 ' ;
gchar * * args = parse_args ( input , 3 , 3 , & parse_result ) ;
2014-10-11 19:43:58 -04:00
2014-12-18 18:57:19 -05:00
if ( ( strncmp ( input , " /role " , 5 ) = = 0 ) & & ( parse_result = = TRUE ) ) {
GString * beginning = g_string_new ( " /role " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
result = autocomplete_param_with_ac ( input , size , beginning - > str , nick_ac , TRUE ) ;
g_string_free ( beginning , TRUE ) ;
if ( result ! = NULL ) {
g_strfreev ( args ) ;
return result ;
}
2014-10-11 19:43:58 -04:00
}
2014-10-04 18:58:54 -04:00
2014-12-18 18:57:19 -05:00
g_strfreev ( args ) ;
}
2014-11-03 15:57:22 -05:00
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /role set " , role_ac , TRUE ) ;
2014-10-04 18:58:54 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /role list " , role_ac , TRUE ) ;
2014-10-04 18:58:54 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-10-11 19:43:58 -04:00
result = autocomplete_param_with_ac ( input , size , " /role " , privilege_cmd_ac , TRUE ) ;
2014-10-04 16:38:31 -04:00
if ( result ! = NULL ) {
return result ;
}
2014-12-18 18:57:19 -05:00
return result ;
2014-10-04 16:38:31 -04:00
}
2014-01-20 19:28:56 -05:00
static char *
_statuses_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /statuses console " , statuses_setting_ac , TRUE ) ;
2014-01-20 19:28:56 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /statuses chat " , statuses_setting_ac , TRUE ) ;
2014-01-20 19:28:56 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /statuses muc " , statuses_setting_ac , TRUE ) ;
2014-01-20 19:28:56 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /statuses " , statuses_ac , TRUE ) ;
2014-01-20 19:28:56 -05:00
if ( result ! = NULL ) {
return result ;
}
return NULL ;
}
2014-01-24 20:00:51 -05:00
static char *
_alias_autocomplete ( char * input , int * size )
{
char * result = NULL ;
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /alias remove " , aliases_ac , TRUE ) ;
2014-01-24 20:00:51 -05:00
if ( result ! = NULL ) {
return result ;
}
2014-07-09 15:32:28 -04:00
result = autocomplete_param_with_ac ( input , size , " /alias " , alias_ac , TRUE ) ;
2014-01-24 20:00:51 -05:00
if ( result ! = NULL ) {
return result ;
}
return NULL ;
}
2014-01-18 18:05:35 -05:00
static char *
_connect_autocomplete ( char * input , int * size )
{
2014-04-09 16:31:43 -04:00
char * found = NULL ;
gboolean result = FALSE ;
2014-01-18 18:05:35 -05:00
2014-01-18 18:43:13 -05:00
input [ * size ] = ' \0 ' ;
2014-04-09 16:31:43 -04:00
gchar * * args = parse_args ( input , 2 , 4 , & result ) ;
2014-01-18 18:43:13 -05:00
2014-04-09 16:31:43 -04:00
if ( ( strncmp ( input , " /connect " , 8 ) = = 0 ) & & ( result = = TRUE ) ) {
2014-01-18 18:43:13 -05:00
GString * beginning = g_string_new ( " /connect " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
if ( args [ 1 ] ! = NULL & & args [ 2 ] ! = NULL ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 2 ] ) ;
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , connect_property_ac , TRUE ) ;
2014-01-18 18:43:13 -05:00
g_string_free ( beginning , TRUE ) ;
2014-04-09 16:31:43 -04:00
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-04-09 16:31:43 -04:00
return found ;
2014-01-18 18:43:13 -05:00
}
}
2014-01-18 18:05:35 -05:00
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-04-09 16:31:43 -04:00
found = autocomplete_param_with_func ( input , size , " /connect " , accounts_find_enabled ) ;
if ( found ! = NULL ) {
return found ;
2014-01-18 18:05:35 -05:00
}
return NULL ;
}
2014-03-05 15:57:59 -05:00
static char *
_join_autocomplete ( char * input , int * size )
{
2014-04-09 16:31:43 -04:00
char * found = NULL ;
gboolean result = FALSE ;
2014-03-05 15:57:59 -05:00
input [ * size ] = ' \0 ' ;
2014-04-12 20:20:36 -04:00
found = autocomplete_param_with_func ( input , size , " /join " , bookmark_find ) ;
if ( found ! = NULL ) {
return found ;
}
2014-04-09 16:31:43 -04:00
gchar * * args = parse_args ( input , 2 , 4 , & result ) ;
2014-03-05 15:57:59 -05:00
2014-04-09 16:31:43 -04:00
if ( ( strncmp ( input , " /join " , 5 ) = = 0 ) & & ( result = = TRUE ) ) {
2014-03-05 15:57:59 -05:00
GString * beginning = g_string_new ( " /join " ) ;
g_string_append ( beginning , args [ 0 ] ) ;
if ( args [ 1 ] ! = NULL & & args [ 2 ] ! = NULL ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 2 ] ) ;
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , join_property_ac , TRUE ) ;
2014-03-05 15:57:59 -05:00
g_string_free ( beginning , TRUE ) ;
2014-04-09 16:31:43 -04:00
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-04-09 16:31:43 -04:00
return found ;
2014-03-05 15:57:59 -05:00
}
}
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-03-05 15:57:59 -05:00
return NULL ;
}
2013-06-02 14:56:35 -04:00
static char *
2012-12-09 17:58:45 -05:00
_account_autocomplete ( char * input , int * size )
{
2014-04-09 16:31:43 -04:00
char * found = NULL ;
gboolean result = FALSE ;
2013-12-10 17:11:48 -05:00
input [ * size ] = ' \0 ' ;
2014-05-11 08:48:41 -04:00
gchar * * args = parse_args ( input , 3 , 4 , & result ) ;
2013-12-10 17:11:48 -05:00
2014-04-09 16:31:43 -04:00
if ( ( strncmp ( input , " /account set " , 12 ) = = 0 ) & & ( result = = TRUE ) ) {
2013-12-10 17:11:48 -05:00
GString * beginning = g_string_new ( " /account set " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
2014-05-11 08:48:41 -04:00
if ( ( g_strv_length ( args ) > 3 ) & & ( g_strcmp0 ( args [ 2 ] , " otr " ) ) = = 0 ) {
g_string_append ( beginning , " " ) ;
g_string_append ( beginning , args [ 2 ] ) ;
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , otr_policy_ac , TRUE ) ;
2014-05-11 08:48:41 -04:00
g_string_free ( beginning , TRUE ) ;
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-05-11 08:48:41 -04:00
return found ;
}
} else {
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , account_set_ac , TRUE ) ;
2014-05-11 08:48:41 -04:00
g_string_free ( beginning , TRUE ) ;
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-05-11 08:48:41 -04:00
return found ;
}
2013-12-10 17:11:48 -05:00
}
}
2014-04-09 16:31:43 -04:00
if ( ( strncmp ( input , " /account clear " , 14 ) = = 0 ) & & ( result = = TRUE ) ) {
2013-12-10 17:11:48 -05:00
GString * beginning = g_string_new ( " /account clear " ) ;
g_string_append ( beginning , args [ 1 ] ) ;
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , beginning - > str , account_clear_ac , TRUE ) ;
2013-12-10 17:11:48 -05:00
g_string_free ( beginning , TRUE ) ;
2014-04-09 16:31:43 -04:00
if ( found ! = NULL ) {
2014-11-03 15:57:22 -05:00
g_strfreev ( args ) ;
2014-04-09 16:31:43 -04:00
return found ;
2013-12-10 17:11:48 -05:00
}
}
g_strfreev ( args ) ;
2014-11-27 13:11:47 -05:00
found = autocomplete_param_with_ac ( input , size , " /account default " , account_default_ac , TRUE ) ;
if ( found ) {
return found ;
}
2013-06-02 14:56:35 -04:00
int i = 0 ;
gchar * account_choice [ ] = { " /account set " , " /account show " , " /account enable " ,
2014-11-27 13:07:18 -05:00
" /account disable " , " /account rename " , " /account clear " , " /account remove " ,
" /account default set " } ;
2013-06-02 14:56:35 -04:00
for ( i = 0 ; i < ARRAY_SIZE ( account_choice ) ; i + + ) {
2014-04-09 16:31:43 -04:00
found = autocomplete_param_with_func ( input , size , account_choice [ i ] ,
2013-06-02 14:56:35 -04:00
accounts_find_all ) ;
2014-04-09 16:31:43 -04:00
if ( found ! = NULL ) {
return found ;
2013-06-02 14:56:35 -04:00
}
}
2014-07-09 15:32:28 -04:00
found = autocomplete_param_with_ac ( input , size , " /account " , account_ac , TRUE ) ;
2014-04-09 16:31:43 -04:00
return found ;
2014-04-15 08:16:32 -04:00
}