From 71db3a8b4ee0ec2a205b119f7b1152126857682a Mon Sep 17 00:00:00 2001 From: John Turner Date: Fri, 8 Mar 2024 13:50:07 -0500 Subject: [PATCH] basic implementation --- wgetpaste.el | 76 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/wgetpaste.el b/wgetpaste.el index 77faee9..cb91bab 100644 --- a/wgetpaste.el +++ b/wgetpaste.el @@ -18,10 +18,78 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . +(defgroup wgetpaste nil + "Wgetpaste interface for emacs") + +(defcustom wgetpaste-stdout-buffer "*wgetpaste stdout*" + "Wgetpaste stdout buffer") + +(defcustom wgetpaste-stderr-buffer "*wgetpaste stderr*" + "Wgetpaste stderr buffer") + +(defcustom wgetpaste-executable "wgetpaste" + "Wgetpaste executable") + +(defcustom wgetpaste-args nil + "Wgetpaste arguments") + +(defcustom wgetpaste-install-hooks t + "Install default wgetpaste hooks") + +(defcustom wgetpaste-before-upload-hook nil + "Hooks to run before uploading a paste") + +(defcustom wgetpaste-after-upload-hook nil + "Hooks to run after wgetpaste process exits successfully") + +(defcustom wgetpaste-upload-failure-hook nil + "Hooks to run after wgetpaste process exits unsuccessfully") + +(defun wgetpaste-buffer () + (run-hooks 'wgetpaste-before-upload-hook) + (let ((process (make-process + :name "wgetpaste" + :command `(,wgetpaste-executable ,@wgetpaste-args) + :connection-type 'pipe + :buffer (get-buffer-create wgetpaste-stdout-buffer) + :stderr (get-buffer-create wgetpaste-stderr-buffer) + :sentinel (lambda (process event) + (unless (process-live-p process) + (when (zerop (process-exit-status process)) + (run-hooks 'wgetpaste-after-upload-hook))))))) + (process-send-region process (point-min) (point-max)) + (process-send-eof process) + process)) + +(defun wgetpaste () + (interactive) + (let* ((region (if (region-active-p) + (cons (region-beginning) (region-end)) + (cons (point-min) (point-max)))) + (work-buffer (generate-new-buffer " *wgetpaste work buffer*" t))) + (copy-to-buffer work-buffer (car region) (cdr region)) + (with-current-buffer work-buffer + (wgetpaste-buffer)))) + +;; hooks + +(defun wgetpaste-clear-stdout-buffer () + (with-current-buffer wgetpaste-stdout-buffer + (erase-buffer))) + +(defun wgetpaste-save-url-to-clipboard () + (with-current-buffer wgetpaste-stdout-buffer + (let ((url (buffer-substring (point-min) (point-max)))) + (message "%s saved to kill ring" url) + (kill-ring-save (point-min) (point-max))))) + +(defun wgetpaste-failed () + (message "wgetpaste failed, see wgetpaste stderr buffer for error information")) + +(when wgetpaste-install-hooks + (add-hook 'wgetpaste-before-upload-hook 'wgetpaste-clear-stdout-buffer) + (add-hook 'wgetpaste-after-upload-hook 'wgetpaste-save-url-to-clipboard) + (add-hook 'wgetpaste-upload-failure-hook 'wgetpaste-failed)) (provide 'wgetpaste) ;;; wgetpaste.el ends here - -;; Local Variables: -;; read-symbol-shorthands: (("@" . "wgetpaste-")) -;; End: -- 2.39.5