Привет всем. Долго сидел на MC 4.7.0. Теперь вот перешел на 4.8.12 Вроде пользоваться уже можно. Предлагаю для обсуждения заплатку для команды редактора «Вставить вывод внешней команды». Сама команда очень удобна, в стиле самых первых UNIX-редакторов, но ей похоже никто не пользуется, ибо дефект до сих пор не исправлен. Дефект в том, что при выполнении команды типа sort над выделенным блоком MC просто подвисает, ибо sort ждёт данных со stdin. Патч исправляет это. После исправления становится лишней команда редактора «Сортировать».
diff -urN mc-4.8.11.old/src/editor/editcmd.c mc-4.8.11/src/editor/editcmd.c
--- mc-4.8.11.old/src/editor/editcmd.c 2014-02-19 08:26:55.000000000 +0400
+++ mc-4.8.11/src/editor/editcmd.c 2014-02-19 08:25:06.000000000 +0400
@@ -3141,6 +3141,10 @@
char *exp, *tmp, *tmp_edit_temp_file;
int e;
+ const char *stdin_str = "/dev/null";
+ off_t start_mark, end_mark;
+ int block_present_flag = 0;
+
exp =
input_dialog (_("Paste output of external command"),
_("Enter shell command(s):"), MC_HISTORY_EDIT_PASTE_EXTCMD, NULL,
@@ -3151,12 +3155,20 @@
if (!exp)
return 1;
+ if (eval_marks (edit, &start_mark, &end_mark)) {
+ stdin_str = mc_config_get_full_path (EDIT_BLOCK_FILE);
+ edit_save_block (edit, stdin_str, start_mark, end_mark);
+ block_present_flag = 1;
+ }
+
tmp_edit_temp_file = mc_config_get_full_path (EDIT_TEMP_FILE);
- tmp = g_strconcat (exp, " > ", tmp_edit_temp_file, (char *) NULL);
+ tmp = g_strconcat ( "< ", stdin_str, " ", exp, " > ", tmp_edit_temp_file, (char *) NULL);
g_free (tmp_edit_temp_file);
e = system (tmp);
g_free (tmp);
g_free (exp);
+ if (block_present_flag)
+ g_free(stdin_str);
if (e)
{
@@ -3165,6 +3177,10 @@
}
edit->force |= REDRAW_COMPLETELY;
+ if (block_present_flag) {
+ if (edit_block_delete_cmd (edit))
+ return 1;
+ }
{
vfs_path_t *tmp_vpath;