all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Process filters — line at a time?
@ 2024-08-28 22:53 Christopher Howard
  2024-08-29  5:00 ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Christopher Howard @ 2024-08-28 22:53 UTC (permalink / raw)
  To: Help Gnu Emacs Mailing List

Hi, I maintain a legacy system that communicates over a 9600 7E1 RS-232 connection. I want to use Emacs to automate some things that normally involving hours of sitting in front of the terminal and a lot of keystrokes. Currently 29.4 is installed on the computer attached to the serial port.

I've made a good start using serial-term and serial-process-configure to setup my terminal, with the idea of using process-send-string to send commands, and a process filter to analyze the output. However, I need to analyze the output a line a time, to know what commands to send, and my understanding is that process filters do not necessarily give you a whole line at a time. I was wondering if there was some Emacs abstraction or approach that might be helpful here, so that I could focusing on matching lines of data, without getting all caught up in the intricacies of buffering and character processing. Or maybe some way to configure the process so that the process filter always delivers a line at a time.

-- 
📛 Christopher Howard
🚀 gemini://gem.librehacker.com
🌐 http://gem.librehacker.com

בראשית ברא אלהים את השמים ואת הארץ



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Process filters — line at a time?
  2024-08-28 22:53 Process filters — line at a time? Christopher Howard
@ 2024-08-29  5:00 ` Eli Zaretskii
  2024-08-29 15:38   ` Christopher Howard
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2024-08-29  5:00 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Christopher Howard <christopher@librehacker.com>
> Date: Wed, 28 Aug 2024 14:53:07 -0800
> 
> Hi, I maintain a legacy system that communicates over a 9600 7E1 RS-232 connection. I want to use Emacs to automate some things that normally involving hours of sitting in front of the terminal and a lot of keystrokes. Currently 29.4 is installed on the computer attached to the serial port.
> 
> I've made a good start using serial-term and serial-process-configure to setup my terminal, with the idea of using process-send-string to send commands, and a process filter to analyze the output. However, I need to analyze the output a line a time, to know what commands to send, and my understanding is that process filters do not necessarily give you a whole line at a time. I was wondering if there was some Emacs abstraction or approach that might be helpful here, so that I could focusing on matching lines of data, without getting all caught up in the intricacies of buffering and character processing. Or maybe some way to configure the process so that the process filter always delivers a line at a time.

One idea is to use string-lines to split the process output into
individual lines.  You will need to write custom code to identify
incomplete lines, though.  You will find examples of the usage in
shell.el and in compile.el.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Process filters — line at a time?
  2024-08-29  5:00 ` Eli Zaretskii
@ 2024-08-29 15:38   ` Christopher Howard
  2024-08-29 15:47     ` Eli Zaretskii
  2024-08-29 19:20     ` Stefan Monnier via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 5+ messages in thread
From: Christopher Howard @ 2024-08-29 15:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: help-gnu-emacs

> One idea is to use string-lines to split the process output into
> individual lines.  You will need to write custom code to identify
> incomplete lines, though.  You will find examples of the usage in
> shell.el and in compile.el.

Thank you, string-lines sounds helpful. In the case that there an incomplete line at the end, is there some way to give that back to the process output stream, or would I need to buffer that myself?

-- 
Christopher Howard



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Process filters — line at a time?
  2024-08-29 15:38   ` Christopher Howard
@ 2024-08-29 15:47     ` Eli Zaretskii
  2024-08-29 19:20     ` Stefan Monnier via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2024-08-29 15:47 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Christopher Howard <christopher@librehacker.com>
> Cc: help-gnu-emacs@gnu.org
> Date: Thu, 29 Aug 2024 07:38:37 -0800
> 
> > One idea is to use string-lines to split the process output into
> > individual lines.  You will need to write custom code to identify
> > incomplete lines, though.  You will find examples of the usage in
> > shell.el and in compile.el.
> 
> Thank you, string-lines sounds helpful. In the case that there an incomplete line at the end, is there some way to give that back to the process output stream, or would I need to buffer that myself?

The latter, I believe.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Process filters — line at a time?
  2024-08-29 15:38   ` Christopher Howard
  2024-08-29 15:47     ` Eli Zaretskii
@ 2024-08-29 19:20     ` Stefan Monnier via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 5+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2024-08-29 19:20 UTC (permalink / raw)
  To: help-gnu-emacs

> Thank you, string-lines sounds helpful. In the case that there an incomplete
> line at the end, is there some way to give that back to the process output
> stream, or would I need to buffer that myself?

The usual way to do that is to keep the "unprocessed output" in
a process property (see `process-put` and `process-get`) or in a global
var, e.g.:

    (lambda (proc output)
      (setq output (concat (process-get proc 'foo--leftover) output))
      (let ((end (string-match ".*\\'" output)))
        (process-put proc 'foo--leftover (substring output end))
        (setq output (substring output 0 end)))
      ;; Now `output` contains only wholelines.
      ...)


- Stefan




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-08-29 19:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-28 22:53 Process filters — line at a time? Christopher Howard
2024-08-29  5:00 ` Eli Zaretskii
2024-08-29 15:38   ` Christopher Howard
2024-08-29 15:47     ` Eli Zaretskii
2024-08-29 19:20     ` Stefan Monnier via Users list for the GNU Emacs text editor

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.