This question already has an answer here:

I have set up

$ echo $EDITOR
emacs -nw

I was wondering why it is not found here, and how I can solve the problem? Thanks.

$ sdiff -o sdiff.out f1 f2
1 2 3                                 | 2 3 4
%e1
sdiff: subsidiary program 'emacs -nw' not found

I don't know why an option in $EDITOR is a problem, and where it is required in sdiff source code? I guess it is here http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/sdiff.c#n459

prog = getenv ("EDITOR");
if (prog)
  editor_program = prog;

and here http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/sdiff.c#n1035

execvp (editor_program, (char **) argv);

or http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/sdiff.c#n1018 and http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/sdiff.c#n1024. I am not sure what the program is doing.

For comparison, the following works perfectly fine:

$ eval "$EDITOR"

marked as duplicate by Jeff Schaller, Thomas, Stephen Kitt, G-Man, Isaac Nov 18 at 21:53

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

It's apparent that sdiff attempted to execute a program named exactly emacs -nw, which didn't exist. Your intention was for sdiff to call emacs with an option -nw followed by the file(s).

The behavior is confirmed by looking at the sdiff source code, where sdiff populates the preferred editor --directly-- into argv[0], which puts the <space><dash>nw together with the emacs. You could also confirm that sdiff is generally working correctly by setting EDITOR=emacs and observing that it opens emacs.

If you need the option when opening emacs, then my suggestion would be to create a wrapper script:

$ cat emacs.sh
#!/bin/sh

vi "$@"

Just kidding, of course. You'd use:

$ cat emacs.sh
#!/bin/sh

emacs -nw "$@"

... and then set EDITOR=/path/to/that/emacs.sh

  • 1
    Did you hack my machine??? The former is exactly what emacs.sh has on it!!! 😂😂😂 – Filipe Brandenburger Nov 18 at 16:24
  • Small suggestion to use exec when invoking emacs from the script. – Filipe Brandenburger Nov 18 at 16:25
  • 1
    Indeed, using exec would be a microscopic improvement; one that I noticed only after finding the proposed duplicate. Thanks for the edit! – Jeff Schaller Nov 18 at 16:32

Not the answer you're looking for? Browse other questions tagged or ask your own question.