iPrompt for filename when saving, store bytes directly - holymoly - A tor enabled gopher client written in CHICKEN scheme Err vernunftzentrum.de 70 hgit clone git://vernunftzentrum.de/holymoly.git URL:git://vernunftzentrum.de/holymoly.git vernunftzentrum.de 70 1Log /ckeen/repos/holymoly/log.gph vernunftzentrum.de 70 1Files /ckeen/repos/holymoly/files.gph vernunftzentrum.de 70 1Refs /ckeen/repos/holymoly/refs.gph vernunftzentrum.de 70 1README /ckeen/repos/holymoly/file/README.gph vernunftzentrum.de 70 1LICENSE /ckeen/repos/holymoly/file/LICENSE.gph vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1commit 0a9c37e9adfba3f5c643b06f32a90c68ff104763 /ckeen/repos/holymoly/commit/0a9c37e9adfba3f5c643b06f32a90c68ff104763.gph vernunftzentrum.de 70 1parent e85ae8fc44a31816b3b4c1f56756e20cc205b399 /ckeen/repos/holymoly/commit/e85ae8fc44a31816b3b4c1f56756e20cc205b399.gph vernunftzentrum.de 70 hAuthor: Christian Kellermann URL:mailto:ckeen@pestilenz.org vernunftzentrum.de 70 iDate: Tue, 13 Mar 2018 22:52:00 +0100 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iPrompt for filename when saving, store bytes directly Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i holymoly.scm | 46 +++++++++++++++++-------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i1 file changed, 25 insertions(+), 21 deletions(-) Err vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1diff --git a/holymoly.scm b/holymoly.scm /ckeen/repos/holymoly/file/holymoly.scm.gph vernunftzentrum.de 70 i@@ -89,16 +89,15 @@ Err vernunftzentrum.de 70 i ((113) (k #f)) ; q Err vernunftzentrum.de 70 i (else pos))))))))) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-(define (get-user-input) Err vernunftzentrum.de 70 i+(define (get-user-input #!optional (prompt "Enter query:") (suggestion "")) Err vernunftzentrum.de 70 i (let* ((l c (getmaxyx (stdscr))) Err vernunftzentrum.de 70 i- (w (newwin 3 c (quotient l 2) 0)) Err vernunftzentrum.de 70 i- (query "Enter query:")) Err vernunftzentrum.de 70 i- (let input-loop ((r '())) Err vernunftzentrum.de 70 i+ (w (newwin 3 c (quotient l 2) 0))) Err vernunftzentrum.de 70 i+ (let input-loop ((r (reverse (string->list suggestion)))) Err vernunftzentrum.de 70 i (define (refresh r) Err vernunftzentrum.de 70 i (wclear w) Err vernunftzentrum.de 70 i (box w 0 0) Err vernunftzentrum.de 70 i (mvwprintw w 0 (- (quotient c 2) Err vernunftzentrum.de 70 i- (quotient (string-length query) 2)) query) Err vernunftzentrum.de 70 i+ (quotient (string-length prompt) 2)) prompt) Err vernunftzentrum.de 70 i (mvwprintw w 1 2 "~a" (list->string (reverse r))) Err vernunftzentrum.de 70 i (mvwchgat w 1 (+ 2 (length r)) 1 A_BLINK 0 #f) Err vernunftzentrum.de 70 i (wrefresh w)) Err vernunftzentrum.de 70 i@@ -146,20 +145,22 @@ Err vernunftzentrum.de 70 i (let-values (((i o _) (connect/socksv5 (car (proxy)) (cdr (proxy)) server port))) Err vernunftzentrum.de 70 i (new-status "connected.") Err vernunftzentrum.de 70 i (display (string-append resource (string #\linefeed #\return)) o) Err vernunftzentrum.de 70 i- (let ((response (read-until (if until-eof? #f ".") i))) Err vernunftzentrum.de 70 i+ (let ((response (if until-eof? Err vernunftzentrum.de 70 i+ (read-u8vector #f i) Err vernunftzentrum.de 70 i+ (read-until "." i)))) Err vernunftzentrum.de 70 i (close-input-port i) Err vernunftzentrum.de 70 i (close-output-port o) Err vernunftzentrum.de 70 i response)) Err vernunftzentrum.de 70 i (e (exn i/o net) Err vernunftzentrum.de 70 i- (endwin) Err vernunftzentrum.de 70 i- (new-status "Network error: ~a" ((condition-property-accessor 'exn 'message) e)) Err vernunftzentrum.de 70 i- (sleep 1) Err vernunftzentrum.de 70 i- (beep) Err vernunftzentrum.de 70 i- (select-entry (previous-page))) Err vernunftzentrum.de 70 i+ (endwin) Err vernunftzentrum.de 70 i+ (new-status "Network error: ~a" ((condition-property-accessor 'exn 'message) e)) Err vernunftzentrum.de 70 i+ (sleep 1) Err vernunftzentrum.de 70 i+ (beep) Err vernunftzentrum.de 70 i+ (select-entry (previous-page))) Err vernunftzentrum.de 70 i (e () Err vernunftzentrum.de 70 i- (endwin) Err vernunftzentrum.de 70 i- (pp (condition->list e)) Err vernunftzentrum.de 70 i- (abort e)))) Err vernunftzentrum.de 70 i+ (endwin) Err vernunftzentrum.de 70 i+ (pp (condition->list e)) Err vernunftzentrum.de 70 i+ (abort e)))) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i (define mapping-table Err vernunftzentrum.de 70 i@@ -236,18 +237,21 @@ Err vernunftzentrum.de 70 i (links (get-indices p (lambda (e) (not (equal? (entry-type e) 'info)))))) Err vernunftzentrum.de 70 i (pager p win: (main-win) renderer: render-entry use-cursor: (not (null? links)) selectables: links))) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-(define nop values) Err vernunftzentrum.de 70 i- Err vernunftzentrum.de 70 i (define type-handlers Err vernunftzentrum.de 70 i `((file . ,(lambda (c) (pager c win: (main-win)) (previous-page))) Err vernunftzentrum.de 70 i (directory . ,render-directory) Err vernunftzentrum.de 70 i (index-search . ,render-directory))) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i (define (save-selector entry content) Err vernunftzentrum.de 70 i- (let ((filename (string-append "/tmp/" (last (string-split (entry-selector entry) "/")) (if (equal? (entry-type entry) 'gif) ".gif" "")))) Err vernunftzentrum.de 70 i- (with-output-to-file filename Err vernunftzentrum.de 70 i- (lambda () (map display content))) Err vernunftzentrum.de 70 i- (system (string-append "xdg-open file://" filename)))) Err vernunftzentrum.de 70 i+ (let* ((filename (string-append "/tmp/" Err vernunftzentrum.de 70 i+ (last (string-split (entry-selector entry) "/")))) Err vernunftzentrum.de 70 i+ (path (get-user-input "Where to save the file:" filename))) Err vernunftzentrum.de 70 i+ (unless (string-null? path) Err vernunftzentrum.de 70 i+ (with-output-to-file path Err vernunftzentrum.de 70 i+ (lambda () (write-u8vector content))) Err vernunftzentrum.de 70 i+ (new-status "~a saved." path) Err vernunftzentrum.de 70 i+ (sleep 2)) Err vernunftzentrum.de 70 i+ (previous-page))) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i (define (select-entry e) Err vernunftzentrum.de 70 i (when (and (equal? (entry-type e) 'index-search) Err vernunftzentrum.de 70 i@@ -259,7 +263,7 @@ Err vernunftzentrum.de 70 i (entry-selector-set! e (string-append (car (string-split old-selector "?")) "?" (string-intersperse (string-split query) "+")))))) Err vernunftzentrum.de 70 i (unless (equal? e (current-page)) Err vernunftzentrum.de 70 i (push! e history)) Err vernunftzentrum.de 70 i- (let* ((res (request-resource (entry-host e) (entry-selector e) (entry-port e) (memq (entry-type e) '(dos-archive binary)))) Err vernunftzentrum.de 70 i+ (let* ((res (request-resource (entry-host e) (entry-selector e) (entry-port e) (memq (entry-type e) '(dos-archive binary gif)))) Err vernunftzentrum.de 70 i (handler (or Err vernunftzentrum.de 70 i (alist-ref (entry-type e) type-handlers) Err vernunftzentrum.de 70 i (lambda (c) (save-selector e c)))) Err vernunftzentrum.de 70 .