about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2022-02-26 10:37:51 +0100
committerGitHub <noreply@github.com>2022-02-26 10:37:51 +0100
commit990232394322b51dc450b46b447173d9c0b10144 (patch)
treeeb2e106e1b5933193789c5abff7c4a590582bb78
parente96728fc6641742d9011307f7287a09fd59f9c4b (diff)
parentb8711d56275166d806e5e3d5ed7436e6e3a8e16c (diff)
downloadprofani-tty-990232394322b51dc450b46b447173d9c0b10144.tar.gz
Merge pull request #1643 from profanity-im/feat/1638-editor-subject
Add `/subject editor` command
-rw-r--r--src/command/cmd_ac.c7
-rw-r--r--src/command/cmd_defs.c2
-rw-r--r--src/command/cmd_funcs.c17
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);