From: sbaugh@catern.com
To: emacs-devel@gnu.org
Subject: Re: Teaching emacsclient to act as a pager, and more
Date: Fri, 09 Sep 2016 16:38:16 -0400 [thread overview]
Message-ID: <87r38s4xmv.fsf@earth.catern.com> (raw)
In-Reply-To: 837fakan8b.fsf@gnu.org
Eli Zaretskii <eliz@gnu.org> writes:
>> From: sbaugh@catern.com
>> Date: Fri, 09 Sep 2016 15:03:23 -0400
>>
>> > Looking at your patches, it seemed to me that you indeed need a pipe,
>> > no?
>>
>> Not as far as I know - what in my patches suggests that I need a pipe?
>
> A pipe is a set of 2 file descriptors between 2 programs, one of the
> descriptors is used for reading by one program and writing by the
> other, the other descriptor used similarly in the opposite direction.
> Isn't that what you set up?
>
> If not, then I must be missing something, so please describe the data
> flow between emacsclient, emacs server, and the external program.
There is not necessarily any external program. Even emacsclient can exit
just fine once the file descriptors are passed in and a process object
created from them.
Once a process object P is created, the data flow is as follows:
When emacs writes to P, emacs is directly writing to the file descriptor
that emacsclient had as its stdout. It is literally calling "write" on
the file descriptor that was/is emacsclient's stdout.
When emacs reads from P, emacs is directly reading from the file
descriptor that emacsclient had as its stdin. It is literally calling
"read" on the file descriptor that was/is emacsclient's stdin.
If I invoke emacsclient in my shell with "emacsclient <foo >bar", reads
from P will read from the file "bar", and writes to P will read from the
file "foo", with the data in both cases passing directly to emacs and
not first going through any other process.
>
>> I am just passing in the arbitrary file-descriptors that emacsclient has
>> as its stdin/stdout. They are directly moved into the main emacs
>> process, not tunneled over a pipe. Those file descriptors frequently
>> would be pipes, but could be regular files or anything else. And given
>> that I have these two arbitrary file descriptors, I need to manipulate
>> them somehow - and I do that by passing them into make-fd-process to
>> make a process object backed by those two arbitrary file descriptors.
>
> I'm trying to see if a higher-level abstraction can be used here,
> because passing file descriptors is too low-level and therefore less
> portable.
That is true, however I do want to eventually get an API for handling
file descriptors in Emacs, even if it is not portable. I believe it
would be useful for quite a lot. For example I would like to bring
eshell up to par with other Unix shells, and the ability to manipulate
file descriptors directly is pretty much required for that.
next prev parent reply other threads:[~2016-09-09 20:38 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-07 1:25 Teaching emacsclient to act as a pager, and more Spencer Baugh
2016-06-07 1:25 ` [PATCH 1/5] process: add features for direct use of FDs Spencer Baugh
2016-06-07 1:25 ` [PATCH 2/5] server.el: accept FDs from emacsclient Spencer Baugh
2016-06-07 1:25 ` [PATCH 3/5] emacsclient: support passing stdin/out/err to emacs Spencer Baugh
2016-06-07 1:25 ` [PATCH 4/5] server: add pager tapping and show-active Spencer Baugh
2016-06-07 1:25 ` [PATCH 5/5] emacsclient: add extra-quiet mode Spencer Baugh
2016-06-08 15:51 ` Teaching emacsclient to act as a pager, and more Tassilo Horn
2016-06-08 16:13 ` Anders Lindgren
2016-06-08 17:30 ` Tassilo Horn
2016-06-09 0:25 ` raman
2016-06-09 11:31 ` H. Dieter Wilhelm
2016-06-27 22:42 ` Ole JørgenBrønner
2016-07-24 18:22 ` sbaugh
2016-09-09 13:42 ` Noam Postavsky
2016-09-09 14:14 ` sbaugh
2016-09-09 14:59 ` Stefan Monnier
2016-09-09 15:58 ` sbaugh
2016-09-09 19:26 ` Stefan Monnier
2016-09-09 19:42 ` Eli Zaretskii
2016-09-09 21:13 ` sbaugh
2016-09-10 6:37 ` Using file descriptors in Emacs (was: Teaching emacsclient to act as a pager, and more) Eli Zaretskii
2016-09-10 20:15 ` Teaching emacsclient to act as a pager, and more sbaugh
2016-09-11 2:11 ` Leo Liu
2018-02-16 23:14 ` Kaushal Modi
2018-02-17 15:46 ` Göktuğ Kayaalp
2016-09-09 15:53 ` Eli Zaretskii
2016-09-09 17:16 ` sbaugh
2016-09-09 18:50 ` Eli Zaretskii
2016-09-09 19:03 ` sbaugh
2016-09-09 19:26 ` Eli Zaretskii
2016-09-09 20:38 ` sbaugh [this message]
2016-09-10 7:12 ` Using file descriptors in Emacs Eli Zaretskii
2016-09-10 14:28 ` sbaugh
2016-09-11 15:28 ` Eli Zaretskii
2016-09-11 16:00 ` sbaugh
2016-09-11 16:39 ` Eli Zaretskii
2016-09-11 16:57 ` sbaugh
2016-09-11 17:13 ` Eli Zaretskii
2016-09-12 15:40 ` Davis Herring
2016-09-09 13:27 ` Teaching emacsclient to act as a pager, and more sbaugh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r38s4xmv.fsf@earth.catern.com \
--to=sbaugh@catern.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.