Friday 27 December 2024
TIL: Elisp function `set-process-sentinel'
==========================================
While working on an Elisp program with Gijs [1], he used an Elisp
function called `set-process-sentinel', which I was unfamiliar with.
I was focused on other things, but made a mental note to dive into
the use of this function.
Doc string
----------
This is what the doc string of `set-process-sentinel' learns us:
(set-process-sentinel PROCESS SENTINEL)
Give PROCESS the sentinel SENTINEL; nil for default.
The sentinel is called as a function when the process changes
state. It gets two arguments: the process, and a string describing
the change.
Exploring with IELM
-------------------
To understand more about this function I fired up IELM, the Elisp
REPL. This is a lovely way to experiment with Elisp.
With some browsing around on the internet I came to the following:
(defun my-notifier (process event)
"Notify when this function is called.
Report the value of PROCESS and EVENT."
(message (format "%s had event: %s\n"
process
event)))
(defun sentinel-play ()
"Start a process, which runs `sleep' in the buffer `my-buffer'."
(interactive)
(start-process "my-process" "my-buffer" "sleep" "30")
(set-process-sentinel (get-process "my-process")
#'my-notifier))
The function `sentinel-play' starts an asynchronous process (sleep)
and the sets a sentinel. When the asynchronous process changes state,
the sentinel calls the function `my-notifier'.
In this case, the function `my-notifier' messages us after 30 seconds:
my-process had event: finished
Have fun with Elisp!
[1]:
gopher://hillenius.net/1
Last edited: $Date: 2024/12/27 11:16:47 $