From: Eli Zaretskii <eliz@gnu.org>
To: Peter <emacs@nexoid.at>
Cc: emacs-devel@gnu.org
Subject: Re: Reading from pipes directly with a process-filter
Date: Sat, 14 Jan 2023 08:56:46 +0200 [thread overview]
Message-ID: <83v8l98uz5.fsf@gnu.org> (raw)
In-Reply-To: <87wn5q6r3r.fsf@nexoid.at> (message from Peter on Fri, 13 Jan 2023 22:51:04 +0100)
> From: Peter <emacs@nexoid.at>
> Cc: emacs-devel@gnu.org
> Date: Fri, 13 Jan 2023 22:51:04 +0100
>
> >> I've been slowly sliding into using Emacs more and more like a Lisp OS,
> >> so one thing that has come up is directly reading data from pipes or
> >> special devices (like /dev/input/event...). I can do that fine by
> >> running `start-process' with `cat /dev/input/event..', however that
> >> seems a bit wasteful. Is there any way to *directly* open such a file
> >> and put a process-filter in front of it?
> >
> > Did you try to use make-pipe-process?
>
> No, but from my understanding, this will also not read the file
> directly, but run an extra process.
I don't think I understand what you are saying. make-pipe-process
doesn't create any OS-level process, it creates only an Emacs process
object, similarly to what make-network-process does.
> >> Semi-relatedly, is there any support for `fnctl' or `ioctl' in elisp, so
> >> that I could even *write* to those special devices?
> >
> > Doesn't a simple 'write' (a.k.a. write-region in Emacs) work? If not,
> > can you show a recipe that fails with all the details?
>
> For example https://www.kernel.org/doc/html/v4.12/input/uinput.html
> shows how to write events to uinput. The function emit does the writing
> (the encoding can easily be done with bindat in Emacs), however it isn't
> sufficient to just *write* events, but some metadata must be set via
> ioctl (yea, "everything is a file" ... except for so many things...).
>
> This is not a "normal" use-case for Emacs, however I've been playing
> around with running Emacs on the Pinephone, and this would help with the
> vibrator for notifications, for example.
>
> Of course this could also be done in C code from a module, but if Emacs
> already somehow has support for doing this "directly", that'd be even
> greater ;)
Sounds like a job for a dynamic module, not for something that has to
be in the Emacs core.
prev parent reply other threads:[~2023-01-14 6:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-13 19:01 Reading from pipes directly with a process-filter Peter
2023-01-13 19:43 ` Eli Zaretskii
2023-01-13 21:51 ` Peter
2023-01-14 6:56 ` Eli Zaretskii [this message]
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83v8l98uz5.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=emacs@nexoid.at \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).