Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ (Unix): Open a text file with the default editor

The question is above and my Google search wasn't succesfull. I guess I need to get the default editor and then use system("editor file.txt");? How could I get the default editor?

Edit: I don't know why but stackoverflow doesn't like my "Hey,"... then not.

like image 270
Vider7CC Avatar asked Jan 10 '14 13:01

Vider7CC


People also ask

What is the default editor in Unix?

The Vi application is the default text editor on most Linux systems, so it's the primary interface you will use when you need to edit a configuration file.

How do I open a text editor in Linux?

It is not a built-in editor in Linux based system, but we can install it using the terminal. To install emacs editor open terminal (By CTRL+ALT+T) and execute the below command: sudo apt-get install emacs.


2 Answers

There is no official solution. Here is my recommendation for opening up a text editor:

If the filename extension is .txt, and xdg-open is avaliable on $PATH and the $DISPLAY variable is nonempty, then use xdg-open. Otherwise use /usr/bin/sensible-editor if it exists. Otherwise, use getenv("EDITOR"), getenv("VISUAL") or getenv("SELECTED_EDITOR"). If none of them are set, try nano, nano-tiny and then vi.

like image 133
pts Avatar answered Oct 08 '22 23:10

pts


There is an example to get default editor environment, from visudo (It use default editor to open sudoers file ) source

/*
     * 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;
        }
    }
    }

You can check http://www.opensource.apple.com/source/sudo/sudo-9/sudo/visudo.c for the complete code.

like image 27
Brightshine Avatar answered Oct 08 '22 22:10

Brightshine