1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Allow /msg with no message, to open a chat window with a contact

This commit is contained in:
James Booth 2012-11-30 00:19:03 +00:00
parent 478aa671fc
commit 846d3f848a
3 changed files with 55 additions and 15 deletions

View File

@ -220,18 +220,15 @@ static struct cmd_t main_commands[] =
NULL } } }, NULL } } },
{ "/msg", { "/msg",
_cmd_msg, parse_args_with_freetext, 2, 2, _cmd_msg, parse_args_with_freetext, 1, 2,
{ "/msg user@host mesg", "Send mesg to user.", { "/msg user@host [message]", "Start chat window with user.",
{ "/msg user@host mesg", { "/msg user@host [message]",
"-------------------", "------------------------",
"Send a message to the user specified.", "Open a chat window with user@host and send the message if one is supplied.",
"Use tab completion to autocomplete online contacts.", "Use tab completion to autocomplete conacts from the roster.",
"If there is no current chat with the recipient, a new chat window",
"will be opened, and highlighted in the status bar at the bottom.",
"pressing the corresponding F key will take you to that window.",
"This command can be called from any window, including chat with other users.",
"", "",
"Example : /msg boothj5@gmail.com Hey, here's a message!", "Example : /msg myfriend@server.com Hey, here's a message!",
"Example : /msg otherfriend@server.com",
NULL } } }, NULL } } },
{ "/info", { "/info",
@ -1402,9 +1399,15 @@ _cmd_msg(gchar **args, struct cmd_help_t help)
if (conn_status != JABBER_CONNECTED) { if (conn_status != JABBER_CONNECTED) {
cons_show("You are not currently connected."); cons_show("You are not currently connected.");
} else if (ui_windows_full()) { return TRUE;
}
if (ui_windows_full()) {
cons_bad_show("Windows all used, close a window and try again."); cons_bad_show("Windows all used, close a window and try again.");
} else { return TRUE;
}
if (msg != NULL) {
jabber_send(msg, usr); jabber_send(msg, usr);
win_show_outgoing_msg("me", usr, msg); win_show_outgoing_msg("me", usr, msg);
@ -1412,9 +1415,12 @@ _cmd_msg(gchar **args, struct cmd_help_t help)
const char *jid = jabber_get_jid(); const char *jid = jabber_get_jid();
chat_log_chat(jid, usr, msg, OUT, NULL); chat_log_chat(jid, usr, msg, OUT, NULL);
} }
}
return TRUE; return TRUE;
} else {
win_new_chat_win(usr);
return TRUE;
}
} }
static gboolean static gboolean

View File

@ -107,6 +107,7 @@ void win_show_gone(const char * const from);
void win_show_system_msg(const char * const from, const char *message); void win_show_system_msg(const char * const from, const char *message);
void win_show_outgoing_msg(const char * const from, const char * const to, void win_show_outgoing_msg(const char * const from, const char * const to,
const char * const message); const char * const message);
void win_new_chat_win(const char * const to);
void win_join_chat(const char * const room, const char * const nick); void win_join_chat(const char * const room, const char * const nick);
void win_show_room_roster(const char * const room); void win_show_room_roster(const char * const room);

View File

@ -637,6 +637,39 @@ win_show_gone(const char * const from)
} }
} }
void
win_new_chat_win(const char * const to)
{
// if the contact is offline, show a message
PContact contact = contact_list_get_contact(to);
int win_index = _find_prof_win_index(to);
WINDOW *win = NULL;
// create new window
if (win_index == NUM_WINS) {
win_index = _new_prof_win(to, WIN_CHAT);
win = windows[win_index]->win;
if (prefs_get_chlog() && prefs_get_history()) {
_win_show_history(win, win_index, to);
}
if (contact != NULL) {
if (strcmp(p_contact_presence(contact), "offline") == 0) {
const char const *show = p_contact_presence(contact);
const char const *status = p_contact_status(contact);
_show_status_string(win, to, show, status, "--", "offline");
}
}
// use existing window
} else {
win = windows[win_index]->win;
}
ui_switch_win(win_index);
}
void void
win_show_outgoing_msg(const char * const from, const char * const to, win_show_outgoing_msg(const char * const from, const char * const to,
const char * const message) const char * const message)