about summary refs log tree commit diff
path: root/emacs/.emacs.d
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-09-04T20·06+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-09-04T20·06+0100
commitb89d1f0a1f2952241671ccd89913d34fe57da6d7 (patch)
tree6e734cf64e6bef84e6746e130b51d8f0feec0494 /emacs/.emacs.d
parent4763c7ca45f94e82f450b601ac077bc9972302e8 (diff)
Call make-process instead of call-process in scrot.el
While attempting to debug why pressing `C-s-s` from an X-window screenshots my
entire screen, I switched from `call-process` to `make-process`, which is
async.

I still haven't debugged the original issue, but I think this is an improvement
regardless.
Diffstat (limited to 'emacs/.emacs.d')
-rw-r--r--emacs/.emacs.d/wpc/scrot.el22
1 files changed, 7 insertions, 15 deletions
diff --git a/emacs/.emacs.d/wpc/scrot.el b/emacs/.emacs.d/wpc/scrot.el
index 3444238158a4..e7231b44fd95 100644
--- a/emacs/.emacs.d/wpc/scrot.el
+++ b/emacs/.emacs.d/wpc/scrot.el
@@ -34,33 +34,25 @@
   "The format string for the output screenshot file.
 See scrot's man page for more information.")
 
-(defun scrot-copy-image (path)
+(defun scrot--copy-image (path)
   "Use xclip to copy the image at PATH to the clipboard.
 This currently only works for PNG files because that's what I'm outputting"
   (call-process "xclip" nil nil nil
                 "-selection" "clipboard" "-t" "image/png" path)
   (message (string-format "[scrot.el] Image copied to clipboard!")))
 
-(defmacro scrot-call (&rest args)
-  "Call scrot with ARGS."
-  `(call-process ,scrot-path-to-executable nil nil nil ,@args))
-
-(defun scrot-fullscreen ()
-  "Screenshot the entire screen."
-  (interactive)
-  (let ((screenshot-path (f-join scrot-screenshot-directory
-                                 (ts-format scrot-output-format (ts-now)))))
-    (scrot-call screenshot-path)
-    (scrot-copy-image screenshot-path)))
-
 (defun scrot-select ()
   "Click-and-drag to screenshot a region.
 The output path is copied to the user's clipboard."
   (interactive)
   (let ((screenshot-path (f-join scrot-screenshot-directory
                                  (ts-format scrot-output-format (ts-now)))))
-    (scrot-call "--select" screenshot-path)
-    (scrot-copy-image screenshot-path)))
+    (make-process
+     :name "scrot-select"
+     :command `(,scrot-path-to-executable "--select" ,screenshot-path)
+     :sentinel (lambda (proc _err)
+                 (when (= 0 (process-exit-status proc))
+                   (scrot--copy-image screenshot-path))))))
 
 (provide 'scrot)
 ;;; scrot.el ends here