2014-01-10 4 views
5

Вопрос выше, и мой поиск Google не был успешным. Думаю, мне нужно получить редактор по умолчанию, а затем использовать system("editor file.txt");? Как я могу получить редактор по умолчанию?C++ (Unix): открыть текстовый файл с редактором по умолчанию

Редактировать: Я не знаю, почему, но stackoverflow не любит мой «Эй», а затем нет.

+1

Возможный дубликат [Открыть файл в редакторе по умолчанию из bash] (http://stackoverflow.com/questions/13627767/open-file-in-default-editor-from-bash). –

+0

@ FrédéricHamidi Извините, но я не могу схватить. Это не C++, и кто-то может дать мне альтернативу system(). – Vider7CC

+0

Достаточно честный. Я только пытался указать вам на 'xdg-open'. –

ответ

7

Официальное решение отсутствует. Вот моя рекомендация для открытия текстового редактора:

Если расширение файла является .txt и xdg-open имеющиеся на $PATH и переменную $DISPLAY не пусто, то использовать xdg-open. В противном случае используйте /usr/bin/sensible-editor, если он существует. В противном случае используйте getenv("EDITOR"), getenv("VISUAL") или getenv("SELECTED_EDITOR"). Если ни один из них не установлен, попробуйте nano, nano-tiny, а затем vi.

+0

Хорошо спасибо. Сейчас я на Windows. Я попробую это позже. – Vider7CC

+1

Стоит добавить: 'xdg-open' не является« официальной частью C++ », но является частью« наиболее широко? ». последовали стандарт настольного компьютера Linux: https://freedesktop.org/wiki/ –

3

Существует пример, чтобы получить среду редактор по умолчанию, из visudo (Он использует редактор по умолчанию, чтобы открыть файл sudoers) Источник

/* 
    * Check EDITOR and VISUAL environment variables to see which editor 
    * the user wants to use (we may not end up using it though). 
    * If the path is not fully-qualified, make it so and check that 
    * the specified executable actually exists. 
    */ 
    if ((UserEditor = getenv("EDITOR")) == NULL || *UserEditor == '\0') 
    UserEditor = getenv("VISUAL"); 
    if (UserEditor && *UserEditor == '\0') 
    UserEditor = NULL; 
    else if (UserEditor) { 
    if (find_path(UserEditor, &Editor, getenv("PATH")) == FOUND) { 
     UserEditor = Editor; 
    } else { 
     if (def_flag(I_ENV_EDITOR)) { 
     /* If we are honoring $EDITOR this is a fatal error. */ 
     (void) fprintf(stderr, 
      "%s: specified editor (%s) doesn't exist!\n", 
      Argv[0], UserEditor); 
     Exit(-1); 
     } else { 
     /* Otherwise, just ignore $EDITOR. */ 
     UserEditor = NULL; 
     } 
    } 
    } 

Вы можете проверить http://www.opensource.apple.com/source/sudo/sudo-9/sudo/visudo.c для полного кода.

Смежные вопросы