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


;;; Translate text.
;;; via https://github.com/soimort/translate-shell
(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")

Generated by Jacek Złydach using scpaste at Sun Nov 11 17:24:43 2018. CET. (original)