On 2 December 2014 at 21:24, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> Bruce Momjian <bruce@momjian.us> writes:
> > On Mon, Nov 17, 2014 at 09:34:34AM +0000, eda@waniasset.com wrote:
> >> It would be friendler for psql to be aware of this and not use a pager
if
> >> running inside an Emacs shell buffer, or other dumb terminal: check if
$TERM
> >> is set to 'dumb'.
>
> > This is an interesting idea. What are the odds that a "dumb" terminal
> > is inside Emacs? Is there another environment variable set by Emacs
> > that we can check?
>
> A truly dumb terminal would be where you'd need a pager the most,
> so I'm not enamored of this specific test proposal. If there's some
> more-specific way to detect that stdout is an Emacs buffer, I'd be for it.
>
> A quick check here shows a couple of different possibilities in the
> environment seen in a shell buffer:
>
> EMACS=t
> INSIDE_EMACS=23.1.1,comint
>
> I am not real sure of the properties of either of these variables
> though, in particular not whether they are present in all versions
> of Emacs. (The value of the second one seems to be an Emacs version
> identifier, fwiw.) Another question is whether any effort gets made
> to unset them in processes that are descendants of an Emacs but are
> not connected to a shell-buffer pty.
>
> regards, tom lane
Entertainingly, I just noticed this as an issue with a script I was running
today; when I ran it inside a M-x shell buffer, a psql session stopped,
waiting for input, which was rather annoying.
I wound up setting --pset pager=off, as an extra option to psql. That's
a strategy one might use to work around this.
It sure would be nice if there was an environment variable that
received an "EMACS_BUFFER=t" value or such; that ought to be
a better indicator that psql could let Emacs handle buffering for it.
I do see much the same options as you, albeit with a different version
number.
https://www.gnu.org/software/emacs/manual/html_node/emacs/Interactive-Shell.html
Disappointingly, eshell (a shell implemented in Emacs Lisp) doesn't set
either of those
environment variables.
However, from the documentation, it appears that INSIDE_EMACS is intended
to
provide the sort of functionality that the original poster was after.
BTW, "comint" is intended to indicate "command interpreter inside a
buffer", so
that value is pretty apropos.
--
When confronted by a difficult problem, solve it by reducing it to the
question, "How would the Lone Ranger handle this?"