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
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"

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

vi "$@"

Just kidding, of course. You'd use:

$ cat emacs.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!!! 😂😂😂 – filbranden Nov 18 '18 at 16:24
  • Small suggestion to use exec when invoking emacs from the script. – filbranden Nov 18 '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 '18 at 16:32

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