LINUX.ORG.RU

Внешний редактор и Midnight Commander


0

1

Решение «подцепить leafpad как внешний редактор в midnight commander» нагуглилось достаточно легко: в /etc/bash.bashrc добавил строку «export EDITOR=/usr/bin/leafpad», в опциях mc отключил «внутренний редактор». При таком раскладе leafpad с нужным файлом запускается по F4, но запирает mc, который становится недоступен, пока не завершится запущенный из-под него процесс. Есть ли возможность победить это обстоятельство, чтобы mc открывал требуемый файл для редактирования, и забывал о нём, как это происходит в gui-софтинках типа Gnome Commander?

изменить константу command на нужное приложение «/usr/bin/leafpad». компилятор gcc. в EDITOR написать полный путь к собранному приложению.

#include <stdlib.h>
#include <string.h>

const char* command = "sleep 10; echo";
  
int main(int argc, char* argv[])
{
  if(fork()==0)
  {
    char* buf;
    int i,len,cur;

    cur = strlen(command);
    len = cur+1;

    for(i=1;i<argc;i++)
      len += strlen(argv[i])+1;
    buf = (char*)malloc(len);

    memcpy((void*)&buf[0], (void*)command, cur);
    for(i=1;i<argc;i++)
    {
      buf[cur++] = ' ';
      len = strlen(argv[i]);
      memcpy((void*)&buf[cur], (void*)argv[i], len);
      cur += len;
    }
    buf[cur] = 0;
    system(buf);
    free(buf);
  }
  return 0;
}

anonymous ()
Ответ на: комментарий от ATIpro

Попробую. Я вот чего сделал - создав исполняемый ~/myscripts/proba.sh со строчкой «leafpad &» добился, чтобы по F4, не поджимая mc, вылезал leafpad, но он вылезает пустой. То есть «&» надо вкрячивать после того, как подцепится аргумент, а как это сделать, я не представляю.

piyavking ★★★ ()
Ответ на: комментарий от piyavking

создай файл с содержимым указанным выше (http://www.linux.org.ru/forum/midnight/9105105?cid=9105240 (комментарий)), назови «main.c». затем выполни:

$ gcc main.c -o main.out
будет создан файл «main.out», его используй как твой «proba.sh».

второй вариант в твоем proba.sh напиши «leafpad $* &»

anonymous ()
Ответ на: комментарий от anonymous

вот новый код, пробелы должен понимать правильно.

#include <unistd.h>

const char* command = "leafpad";

int main(int argc, char* argv[])
{
  if(fork()==0)
    execvp(command, argv);
  return 0;
}

anonymous ()
Ответ на: комментарий от anonymous

Класс. Но вот ещё связанный вопрос: при открытии файла по щелчку в mc открытое приложение поджимает mc, неужели нужно во всех ассоциациях файлов прописывать скрипты такого вида? Нет ли глобального решения?

piyavking ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.