discussion and development of piem
 help / color / mirror / code / Atom feed
From: Kyle Meyer <kyle@kyleam.com>
To: piem@inbox.kyleam.com
Subject: [PATCH 04/10] lei: Add call-process wrapper for inserting lei output
Date: Sun, 24 Oct 2021 23:56:24 -0400	[thread overview]
Message-ID: <20211025035630.297598-5-kyle@kyleam.com> (raw)
In-Reply-To: <20211025035630.297598-1-kyle@kyleam.com>

This is a bit more readable, and it introduces a single spot where
error handling can be added.
---
 piem-lei.el | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/piem-lei.el b/piem-lei.el
index 904bf972..5f381173 100644
--- a/piem-lei.el
+++ b/piem-lei.el
@@ -37,6 +37,15 @@ (defcustom piem-lei-lei-executable "lei"
   "Which lei executable to use."
   :type 'string)
 
+\f
+;;;; Helpers
+
+(defun piem-lei-insert-output (args &optional buffer)
+  "Call lei with ARGS and insert standard output in BUFFER.
+If BUFFER is nil, the current buffer is used."
+  (apply #'call-process piem-lei-lei-executable nil
+         (list (or buffer t) nil) nil args))
+
 \f
 ;;;; Message display
 
@@ -124,8 +133,8 @@ (defun piem-lei-show (mid &optional display)
   (with-current-buffer (get-buffer-create "*lei-show*")
     (let ((inhibit-read-only t))
       (erase-buffer)
-      (call-process piem-lei-lei-executable nil '(t nil) nil
-                    "q" "--format=text" (concat "mid:" mid))
+      (piem-lei-insert-output
+       (list "q" "--format=text" (concat "mid:" mid)))
       (goto-char (point-min))
       (when (looking-at-p "# blob:")
         (delete-region (line-beginning-position)
@@ -214,8 +223,8 @@ (defun piem-lei-query (query)
   (with-current-buffer (get-buffer-create "*lei-query*")
     (let ((inhibit-read-only t))
       (erase-buffer)
-      (apply #'call-process piem-lei-lei-executable nil '(t nil) nil
-             "q" "--format=ldjson" query)
+      (piem-lei-insert-output
+       (list "q" "--format=ldjson" query))
       (goto-char (point-min))
       (while (not (eobp))
         (let ((data (piem-lei-query--read-json-item)))
@@ -487,8 +496,8 @@ (defun piem-lei-query--format-thread-marker (level)
 
 (defun piem-lei-query--slurp (args)
   (with-temp-buffer
-    (apply #'call-process piem-lei-lei-executable nil '(t nil) nil
-           "q" "--format=ldjson" args)
+    (piem-lei-insert-output
+     (append (list "q" "--format=ldjson") args))
     (goto-char (point-min))
     (let (items)
       (while (not (eobp))
@@ -574,8 +583,8 @@ (defun piem-lei-get-inbox ()
   "Return inbox name from a lei buffer."
   (when-let ((mid (piem-lei-get-mid)))
     (with-temp-buffer
-      (call-process piem-lei-lei-executable nil '(t nil) nil
-                    "q" "--format=mboxrd" (concat "mid:" mid))
+      (piem-lei-insert-output
+       (list "q" "--format=mboxrd" (concat "mid:" mid)))
       (goto-char (point-min))
       (piem-inbox-by-header-match))))
 
@@ -584,17 +593,16 @@ (defun piem-lei-known-mid-p (mid)
 The message ID should not include have surrounding brackets."
   (not (string-empty-p
         (with-output-to-string
-          (call-process piem-lei-lei-executable
-                        nil (list standard-output nil) nil
-                        "q" "--format=ldjson" (concat "mid:" mid))))))
+          (piem-lei-insert-output
+           (list "q" "--format=ldjson" (concat "mid:" mid))
+           standard-output)))))
 
 (defun piem-lei-mid-to-thread (mid)
   "Return a function that inserts an mbox for MID's thread."
   (when (piem-lei-known-mid-p mid)
     (lambda ()
-      (call-process piem-lei-lei-executable nil '(t nil) nil
-                    "q" "--format=mboxrd" "--threads"
-                    (concat "mid:" mid)))))
+      (piem-lei-insert-output
+       (list "q" "--format=mboxrd" "--threads" (concat "mid:" mid))))))
 
 ;;;###autoload
 (define-minor-mode piem-lei-mode
-- 
2.33.1


  parent reply	other threads:[~2021-10-25  3:56 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-25  3:56 [PATCH 00/10] lei-q transient Kyle Meyer
2021-10-25  3:56 ` [PATCH 01/10] piem-lei-query-show: Fix capitalization in error message Kyle Meyer
2021-10-25  3:56 ` [PATCH 02/10] piem-lei-known-mid-p: Use with-output-to-string Kyle Meyer
2021-10-25  3:56 ` [PATCH 03/10] lei: Introduce option to set "lei" executable Kyle Meyer
2021-10-25  3:56 ` Kyle Meyer [this message]
2021-10-25  3:56 ` [PATCH 05/10] piem-lei-insert-output: Signal an error if lei call fails Kyle Meyer
2021-10-25  3:56 ` [PATCH 06/10] lei: Add transient wrapper for piem-lei-query Kyle Meyer
2021-10-25  3:56 ` [PATCH 07/10] lei: Set piem-lei-buffer-query for mid-based query functions Kyle Meyer
2021-10-25  3:56 ` [PATCH 08/10] piem: Add function that returns public-inbox's configuration file Kyle Meyer
2021-10-25  3:56 ` [PATCH 09/10] lei q: Offer candidates for --include and --only Kyle Meyer
2021-10-25  3:56 ` [PATCH 10/10] lei: Rename piem-lei-show-mid to piem-lei-buffer-mid Kyle Meyer
2021-10-26  2:49   ` Kyle Meyer

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://git.kyleam.com/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211025035630.297598-5-kyle@kyleam.com \
    --to=kyle@kyleam.com \
    --cc=piem@inbox.kyleam.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 public inbox

	https://git.kyleam.com/piem/

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).