On 9/15/2020 8:27 AM, Lars Ingebrigtsen wrote: > Glenn Morris writes: > >> - (concat (apply 'eshell-flatten-and-stringify args) "\n") >> + (concat (apply 'eshell-flatten-and-stringify args) >> + (unless output-newline "\n")) > > Hm... with or without the patch, and with eshell-plain-echo-behavior > set, I don't see any difference? > > I still get this in eshell: > > ~/src/emacs/trunk $ echo -n foo; echo bar > foo > bar I think this is due to `eshell-lisp-command' insisting that a newline is inserted after the output of *every* Lisp command (when executed interactively). It's easier to see what "-n" does by eval'ing: (eshell-command-result "echo hi") ;; and (eshell-command-result "echo -n hi") One solution to this bug would be to set `eshell-ensure-newline-p' to nil inside `eshell-echo'; then it will opt out of `eshell-lisp-command's trailing-newline insertion. I've attached a patch that does this, as well as (hopefully) resolving the unusual meaning of "-n" when echo outputs a Lisp-friendly result (i.e. when `eshell-plain-echo-behavior' is nil). Now, it warns the user to use "-N" instead if they want to add a trailing newline. Then, one day, the old meaning of "-n" can be removed. I'm not sure if this is the best way to emit a warning about this though; I wanted something that doesn't interfere with any Eshell scripts, but `display-warning' is a bit in-your-face. I also simplified the logic of `eshell/printnl'. Since the way it called `eshell-echo' always resulted in it printing the stringified form of each argument, it's simpler just to call `eshell-stringify' directly. Finally, I added a bit more detail about echo to the Eshell manual (taken partly from the commentary of eshell/em-basic.el), since I didn't quite understand its behavior initially.