all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Philipp Stephani <p.stephani2@gmail.com>
To: emacs-devel@gnu.org, 28691@debbugs.gnu.org
Cc: Philipp Stephani <phst@google.com>
Subject: [PATCH] Add file name handler support for 'make-process' (Bug#28691)
Date: Mon, 17 Dec 2018 00:39:36 +0100	[thread overview]
Message-ID: <20181216233936.208568-1-phst@google.com> (raw)

* src/process.c (Fmake_process): Add new keyword argument
':file-handler'.
(syms_of_process) <make-process, :file-handler>: Define new symbols.

* test/src/process-tests.el (make-process/file-handler): New unit
test.
---
 etc/NEWS                  |  4 ++++
 src/process.c             | 15 +++++++++++++++
 test/src/process-tests.el | 22 ++++++++++++++++++++++
 3 files changed, 41 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index c88f6ef5ca..0a5f915b33 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1407,6 +1407,10 @@ un-obsoleting it.
 +++
 ** New function 'group-name' returns a group name corresponding to GID.
 
+** 'make-process' now takes a keyword argument ':file-handler'; if
+that is non-nil, it will search for a file name handler for
+'default-directory'.
+
 \f
 * Changes in Emacs 27.1 on Non-Free Operating Systems
 
diff --git a/src/process.c b/src/process.c
index 8e0b2349f9..852431f421 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1661,6 +1661,9 @@ to the standard error of subprocess.  Specifying this implies
 `:connection-type' is set to `pipe'.  If STDERR is nil, standard error
 is mixed with standard output and sent to BUFFER or FILTER.
 
+:file-handler FILE-HANDLER -- If FILE-HANDLER is non-nil, then search
+for a file name handler for `default-directory'.
+
 usage: (make-process &rest ARGS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
@@ -1674,6 +1677,15 @@ usage: (make-process &rest ARGS)  */)
   /* Save arguments for process-contact and clone-process.  */
   contact = Flist (nargs, args);
 
+  if (!NILP (Fplist_get (contact, QCfile_handler)))
+    {
+      Lisp_Object file_handler
+        = Ffind_file_name_handler (BVAR (current_buffer, directory),
+                                   Qmake_process);
+      if (!NILP (file_handler))
+        return CALLN (Fapply, file_handler, Qmake_process, contact);
+    }
+
   buffer = Fplist_get (contact, QCbuffer);
   if (!NILP (buffer))
     buffer = Fget_buffer_create (buffer);
@@ -8098,6 +8110,8 @@ init_process_emacs (int sockfd)
 void
 syms_of_process (void)
 {
+  DEFSYM (Qmake_process, "make-process");
+
 #ifdef subprocesses
 
   DEFSYM (Qprocessp, "processp");
@@ -8138,6 +8152,7 @@ syms_of_process (void)
   DEFSYM (Qreal, "real");
   DEFSYM (Qnetwork, "network");
   DEFSYM (Qserial, "serial");
+  DEFSYM (QCfile_handler, ":file-handler");
   DEFSYM (QCbuffer, ":buffer");
   DEFSYM (QChost, ":host");
   DEFSYM (QCservice, ":service");
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 551b34ff37..3e72e9210d 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -215,5 +215,27 @@ process-tests--mixable
                                       (string-to-list "stdout\n")
                                       (string-to-list "stderr\n"))))))
 
+(ert-deftest make-process/file-handler ()
+  "Check that the ‘:file-handler’ argument of ‘make-process’
+works as expected."
+  (let ((file-handler-calls 0))
+    (cl-flet ((file-handler
+               (&rest args)
+               (should (equal default-directory "test-handler:/dir/"))
+               (should (equal args '(make-process :name "name"
+                                                  :command ("/bin/true")
+                                                  :file-handler t)))
+               (cl-incf file-handler-calls)
+               'fake-process))
+      (let ((file-name-handler-alist
+             (cons (cons (rx bos "test-handler:") #'file-handler)
+                   file-name-handler-alist))
+            (default-directory "test-handler:/dir/"))
+        (should (eq (make-process :name "name"
+                                  :command '("/bin/true")
+                                  :file-handler t)
+                    'fake-process))
+        (should (= file-handler-calls 1))))))
+
 (provide 'process-tests)
 ;; process-tests.el ends here.
-- 
2.20.0.405.gbc1bbc6f85-goog




         reply	other threads:[~2018-12-16 23:39 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-03 17:13 bug#28691: 27.0.50; make-process has no file-name-handler Stefan Monnier
2017-10-03 17:50 ` Michael Albinus
2017-10-03 18:34   ` Eli Zaretskii
2018-12-16 23:39 ` Philipp Stephani [this message]
2018-12-17 17:34   ` bug#28691: [PATCH] Add file name handler support for 'make-process' (Bug#28691) Eli Zaretskii
2018-12-17 17:54     ` Stefan Monnier
2018-12-17 19:49       ` Michael Albinus
2018-12-17 19:57         ` Stefan Monnier
2018-12-17 20:01           ` Eli Zaretskii
2018-12-17 17:34   ` Eli Zaretskii
2018-12-16 23:39 ` Philipp Stephani
2018-12-17 12:38   ` Michael Albinus
2018-12-17 17:35     ` Eli Zaretskii
2018-12-17 17:35     ` Eli Zaretskii
2018-12-17 19:30       ` Michael Albinus
2018-12-17 19:30       ` Michael Albinus
2018-12-17 19:07     ` Philipp Stephani
2018-12-17 19:07     ` Philipp Stephani
2018-12-17 19:20       ` Philipp Stephani
2018-12-17 19:58         ` Eli Zaretskii
2018-12-17 20:47           ` Philipp Stephani
2018-12-22  9:07             ` Eli Zaretskii
2018-12-22  9:31               ` Michael Albinus
2018-12-22 21:08                 ` Philipp Stephani
2018-12-23  7:41                   ` Michael Albinus
2018-12-23 10:08                     ` Philipp Stephani
2018-12-23 10:26                       ` Michael Albinus
2018-12-23 15:45                         ` Eli Zaretskii
2018-12-23 16:36                           ` Michael Albinus
2018-12-23 16:50                             ` Eli Zaretskii
2018-12-22 22:26               ` Philipp Stephani
2018-12-17 19:33       ` Michael Albinus
2018-12-17 20:03       ` Drew Adams
2018-12-17 20:03       ` Drew Adams
     [not found] ` <mailman.5866.1545079749.1284.bug-gnu-emacs@gnu.org>
2018-12-18  1:57   ` Alan Mackenzie
2018-12-18  7:56     ` Michael Albinus
2018-12-22 21:05     ` Philipp Stephani

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=20181216233936.208568-1-phst@google.com \
    --to=p.stephani2@gmail.com \
    --cc=28691@debbugs.gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=phst@google.com \
    /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.