Re: BUG #11986: psql uses pager inside Emacs shell buffer (not a terminal)

From: Christopher Browne <cbbrowne(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Bruce Momjian <bruce(at)momjian(dot)us>, eda(at)waniasset(dot)com, PostgreSQL Mailing Lists <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #11986: psql uses pager inside Emacs shell buffer (not a terminal)
Date: 2014-12-03 03:01:04
Message-ID: CAFNqd5Xf=Q1ojj9NyQ17to5E-10L6XABGjsZN7rZGVa1QTrSMg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 2 December 2014 at 21:24, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
> Bruce Momjian <bruce(at)momjian(dot)us> writes:
> > On Mon, Nov 17, 2014 at 09:34:34AM +0000, eda(at)waniasset(dot)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?"

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Ed Avis 2014-12-03 03:48:45 Re: BUG #11986: psql uses pager inside Emacs shell buffer (not a terminal)
Previous Message Tom Lane 2014-12-03 02:24:53 Re: BUG #11986: psql uses pager inside Emacs shell buffer (not a terminal)