Download text files and call $EDITOR - clic - Clic is an command line interactive client for gopher written in Common LISP HTML git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 8082edf6c70c5873c19f92730e8e0db5bceb1dee DIR parent 8605ef1699e170afed26d4266f2bf3db53225e73 HTML Author: Solene Rapenne <solene@perso.pw> Date: Thu, 11 Jan 2018 20:53:01 +0000 Download text files and call $EDITOR Diffstat: M clic.lisp | 41 +++++++++++++++++-------------- 1 file changed, 23 insertions(+), 18 deletions(-) --- DIR diff --git a/clic.lisp b/clic.lisp @@ -479,24 +479,29 @@ (cond ;;;; output is a text file ? ;;;; call the $PAGER ! - ((string= "0" type) - ;;; generate a string from *buffer* array - (let ((text (string-right-trim ; remove last newline - (string #\Newline) - (format nil "~{~a~%~}" ; concatenate lines - (loop for line across *buffer* - collect line))))) - ;; create input stream used as stdin for $PAGER - (let ((input (make-string-input-stream text))) - (uiop:run-program (list (uiop:getenv "PAGER")) - :input input - :output :interactive)) - ;; display last menu - (pop *history*) - (when *previous-buffer* - (setf *buffer* (copy-array *previous-buffer*)) - (setf *links* (make-hash-table)) - (display-buffer "1")))) + ((string= "0" type) + ;;; generate a string from *buffer* array + (let* ((uri (location-uri (car *history*))) + (filename (subseq uri (1+ (position #\/ uri :from-end t)))) + (path (concatenate 'string "/tmp/" filename))) + (print filename) + (print path) + (with-open-file (output path + :direction :output + :if-does-not-exist :create + :if-exists :supersede) + (loop for line across *buffer* + do + (format output "~a~%" line))) + (uiop:run-program (list (or (uiop:getenv "EDITOR") "less") path) + :input :interactive + :output :interactive)) + ;; display last menu + (pop *history*) + (when *previous-buffer* + (setf *buffer* (copy-array *previous-buffer*)) + (setf *links* (make-hash-table)) + (display-buffer "1"))) ;; image ((or