about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/cmd_funcs.c28
-rw-r--r--src/config/preferences.c5
-rw-r--r--src/config/preferences.h1
3 files changed, 25 insertions, 9 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index c85b6c78..7aeb15f0 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -9346,19 +9346,29 @@ cmd_editor(ProfWin* window, const char* const command, gchar** args)
                G_FILE_CREATE_PRIVATE, NULL,
                &creation_error);
     if ( creation_error ) {
-        cons_show("Editor: Error during file creation");
+        cons_show_error("Editor: Error during file creation");
         return TRUE;
     }
     g_object_unref(fos);
 
+    char* editor = prefs_get_string(PREF_COMPOSE_EDITOR);
+    if (!g_file_test(editor, G_FILE_TEST_EXISTS)) {
+        cons_show_error("Editor: editor %s not exists", editor);
+        return TRUE;
+    }
+
     // Fork / exec
     pid_t pid = fork();
     if( pid == 0 ) {
-        int x = execl("/usr/bin/sensible-editor", "/usr/bin/sensible-editor", g_file_get_path(file), (char *) NULL);
+        int x = execl(editor, editor, g_file_get_path(file), (char *) NULL);
         if ( x == -1 ) {
-            cons_show_error("Failed to exec sensible-editor");
+            cons_show_error("Failed to exec %s", editor);
         }
+        exit (EXIT_FAILURE);
     } else {
+        if ( pid == -1 ) {
+            return TRUE;
+        }
         int status = 0;
         waitpid(pid, &status, 0);
         int fd_input_file = open(g_file_get_path(file), O_RDONLY);
@@ -9366,12 +9376,12 @@ cmd_editor(ProfWin* window, const char* const command, gchar** args)
         char buf[COUNT];
         ssize_t size_read = read(fd_input_file, buf, COUNT);
         if(size_read > 0 && size_read <= COUNT ) {
-          buf[size_read-1] = '\0';
-          GString* text = g_string_new(buf);
-          ProfWin* win = wins_get_current();
-          win_println(win, THEME_DEFAULT, "!", "EDITOR PREVIEW: %s", text->str);
-          rl_insert_text(text->str);
-          g_string_free(text, TRUE);
+            buf[size_read-1] = '\0';
+            GString* text = g_string_new(buf);
+            ProfWin* win = wins_get_current();
+            win_println(win, THEME_DEFAULT, "!", "EDITOR PREVIEW: %s", text->str);
+            rl_insert_text(text->str);
+            g_string_free(text, TRUE);
         }
         close(fd_input_file);
         ui_redraw();
diff --git a/src/config/preferences.c b/src/config/preferences.c
index f09cb746..a11a5d42 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -1868,6 +1868,7 @@ _get_group(preference_t pref)
     case PREF_TITLEBAR_MUC_TITLE_JID:
     case PREF_TITLEBAR_MUC_TITLE_NAME:
     case PREF_SLASH_GUARD:
+    case PREF_COMPOSE_EDITOR:
         return PREF_GROUP_UI;
     case PREF_STATES:
     case PREF_OUTTYPE:
@@ -2189,6 +2190,8 @@ _get_key(preference_t pref)
         return "url.open.cmd";
     case PREF_URL_SAVE_CMD:
         return "url.save.cmd";
+    case PREF_COMPOSE_EDITOR:
+        return "compose.editor";
     default:
         return NULL;
     }
@@ -2326,6 +2329,8 @@ _get_default_string(preference_t pref)
         return "xdg-open";
     case PREF_URL_OPEN_CMD:
         return "xdg-open %u";
+    case PREF_COMPOSE_EDITOR:
+        return "/usr/bin/vim";
     case PREF_URL_SAVE_CMD:
         return NULL; // Default to built-in method.
     default:
diff --git a/src/config/preferences.h b/src/config/preferences.h
index 49c2c438..4e254917 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -173,6 +173,7 @@ typedef enum {
     PREF_MAM,
     PREF_URL_OPEN_CMD,
     PREF_URL_SAVE_CMD,
+    PREF_COMPOSE_EDITOR,
 } preference_t;
 
 typedef struct prof_alias_t