(defun run-external-program (cmd args)
(with-open-stream (s (make-string-output-stream))
(external-program:run cmd args :output s)
(string-trim '(#\Newline #\Space) (get-output-stream-string s))))
(defun run-external-program* (cmd args input-stream)
(external-program:start cmd args :input input-stream))
(defun run-external-program-io (cmd args input)
(with-open-stream (is (make-string-input-stream input))
(with-open-stream (s (make-string-output-stream))
(external-program:run cmd args :output s :input is)
(string-trim '(#\Newline #\Space) (get-output-stream-string s)))))
(defun get-text-from-clipboard ()
(run-external-program "xclip" '("-o" "-sel" "clip")))
(defun put-text-to-clipboard (text)
(with-open-stream (input-stream (make-string-input-stream text))
(run-external-program* "xclip" '("-i" "-sel" "clip") input-stream)))
(defcommand translate-clipboard () ()
(let* ((input-text (get-text-from-clipboard))
(output (run-external-program-io "/home/temporal/software/trans" '("--brief") input-text)))
(put-text-to-clipboard output)
(message output)))
(define-key *top-map* (kbd "s-F2") "translate-clipboard")