• Philipp Stephani's avatar
    Add a module function to open a file descriptor connected to a pipe. · d28b0047
    Philipp Stephani authored
    A common complaint about the module API is that modules can't
    communicate asynchronously with Emacs.  While it isn't possible to
    call arbitrary Emacs functions asynchronously, writing to a pipe
    should always be fine and is a pretty low-hanging fruit.
    
    This patch implements a function that adapts an existing pipe
    process.  That way, users can use familiar tools like process filters
    or 'accept-process-output'.
    
    * src/module-env-28.h: Add 'open_channel' module function.
    
    * src/emacs-module.c (module_open_channel): Provide definition for
    'open_channel'.
    (initialize_environment): Use it.
    
    * src/process.c (open_channel_for_module): New helper function.
    (syms_of_process): Define necessary symbol.
    
    * test/src/emacs-module-tests.el (module/async-pipe): New unit test.
    
    * test/data/emacs-module/mod-test.c (signal_system_error): New helper
    function.
    (signal_errno): Use it.
    (write_to_pipe): New function running in the background.
    (Fmod_test_async_pipe): New test module function.
    (emacs_module_init): Export it.
    
    * doc/lispref/internals.texi (Module Misc): Document new module
    function.
    
    * doc/lispref/processes.texi (Asynchronous Processes): New anchor
    for pipe processes.
    
    * etc/NEWS: Document 'open_channel' function.
    d28b0047