diff options
author | Michael Vetter <jubalh@iodoru.org> | 2022-02-23 11:50:42 +0100 |
---|---|---|
committer | Michael Vetter <jubalh@iodoru.org> | 2022-02-26 10:10:33 +0100 |
commit | b8711d56275166d806e5e3d5ed7436e6e3a8e16c (patch) | |
tree | 5ac18f78a513530d59c7c4720112e1c4abc83ab5 | |
parent | 0b8b851bd6258edbe7bd10661bc3b7e1f194399b (diff) | |
download | profani-tty-b8711d56275166d806e5e3d5ed7436e6e3a8e16c.tar.gz |
Add `/subject editor` command
Allow editing the MUC subject using external editor. Use `/subject editor`. Fix https://github.com/profanity-im/profanity/issues/1638
-rw-r--r-- | src/command/cmd_ac.c | 7 | ||||
-rw-r--r-- | src/command/cmd_defs.c | 2 | ||||
-rw-r--r-- | src/command/cmd_funcs.c | 17 |
3 files changed, 21 insertions, 5 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 81597a2d..57484736 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -780,6 +780,7 @@ cmd_ac_init(void) subject_ac = autocomplete_new(); autocomplete_add(subject_ac, "set"); autocomplete_add(subject_ac, "edit"); + autocomplete_add(subject_ac, "editor"); autocomplete_add(subject_ac, "prepend"); autocomplete_add(subject_ac, "append"); autocomplete_add(subject_ac, "clear"); @@ -3656,11 +3657,7 @@ _subject_autocomplete(ProfWin* window, const char* const input, gboolean previou char* result = NULL; if (window->type == WIN_MUC) { - if ((g_strcmp0(input, "/subject e") == 0) - || (g_strcmp0(input, "/subject ed") == 0) - || (g_strcmp0(input, "/subject edi") == 0) - || (g_strcmp0(input, "/subject edit") == 0) - || (g_strcmp0(input, "/subject edit ") == 0) + if ((g_strcmp0(input, "/subject edit ") == 0) || (g_strcmp0(input, "/subject edit \"") == 0)) { ProfMucWin* mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index 359f47d0..e56b3dc8 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -676,6 +676,7 @@ static struct cmd_t command_defs[] = { CMD_SYN( "/subject set <subject>", "/subject edit <subject>", + "/subject editor", "/subject prepend <text>", "/subject append <text>", "/subject clear") @@ -684,6 +685,7 @@ static struct cmd_t command_defs[] = { CMD_ARGS( { "set <subject>", "Set the room subject." }, { "edit <subject>", "Edit the current room subject, tab autocompletion will display the subject to edit." }, + { "editor", "Edit the current room subject in external editor." }, { "prepend <text>", "Prepend text to the current room subject, use double quotes if a trailing space is needed." }, { "append <text>", "Append text to the current room subject, use double quotes if a preceding space is needed." }, { "clear", "Clear the room subject." }) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 4b79b145..b18fd6a2 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -122,6 +122,7 @@ static void _who_roster(ProfWin* window, const char* const command, gchar** args static gboolean _cmd_execute(ProfWin* window, const char* const command, const char* const inp); static gboolean _cmd_execute_default(ProfWin* window, const char* inp); static gboolean _cmd_execute_alias(ProfWin* window, const char* const inp, gboolean* ran); +gboolean _get_message_from_editor(gchar* message, gchar** returned_message); /* * Take a line of input and process it, return TRUE if profanity is to @@ -4094,6 +4095,22 @@ cmd_subject(ProfWin* window, const char* const command, gchar** args) return TRUE; } + if (g_strcmp0(args[0], "editor") == 0) { + gchar* message = NULL; + char* subject = muc_subject(mucwin->roomjid); + + if (_get_message_from_editor(subject, &message)) { + return TRUE; + } + + if (message) { + message_send_groupchat_subject(mucwin->roomjid, message); + } else { + cons_bad_cmd_usage(command); + } + return TRUE; + } + if (g_strcmp0(args[0], "prepend") == 0) { if (args[1]) { char* old_subject = muc_subject(mucwin->roomjid); |