iFix selectable position for paging - 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 cddd2a01c2c8d8141a7ab4dbb4ddf32d7516f232 /ckeen/repos/holymoly/commit/cddd2a01c2c8d8141a7ab4dbb4ddf32d7516f232.gph vernunftzentrum.de 70 1parent 5f6abb19963fae3735af7db225352db2a2239f05 /ckeen/repos/holymoly/commit/5f6abb19963fae3735af7db225352db2a2239f05.gph vernunftzentrum.de 70 hAuthor: Christian Kellermann URL:mailto:ckeen@pestilenz.org vernunftzentrum.de 70 iDate: Mon, 10 Sep 2018 14:01:44 +0200 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iFix selectable position for paging Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i holymoly.scm | 53 +++++++++++++++---------------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i1 file changed, 26 insertions(+), 27 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@@ -66,13 +66,12 @@ Err vernunftzentrum.de 70 i (define main-win (make-parameter #f)) Err vernunftzentrum.de 70 i (define status-win (make-parameter #f)) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-(define (pager lines #!key win use-cursor selectables (renderer identity)) Err vernunftzentrum.de 70 i+(define (pager lines #!key win use-cursor (selectables '()) (renderer identity)) Err vernunftzentrum.de 70 i (when (and use-cursor (or (not selectables) (null? selectables))) Err vernunftzentrum.de 70 i (error "Usage of use-cursor without handing in selectables")) Err vernunftzentrum.de 70 i (unless win Err vernunftzentrum.de 70 i (error "Need window parameter")) Err vernunftzentrum.de 70 i- (let ((pos 0) Err vernunftzentrum.de 70 i- (nlines (length lines)) Err vernunftzentrum.de 70 i+ (let ((nlines (length lines)) Err vernunftzentrum.de 70 i (cursor 0)) Err vernunftzentrum.de 70 i (when use-cursor Err vernunftzentrum.de 70 i (set! cursor (list->cursor selectables))) Err vernunftzentrum.de 70 i@@ -80,7 +79,7 @@ Err vernunftzentrum.de 70 i (lambda (k) Err vernunftzentrum.de 70 i (let loop ((newp 0)) Err vernunftzentrum.de 70 i (let* ((rows cols (getmaxyx win)) Err vernunftzentrum.de 70 i- (dlines (take (drop lines pos) (min (- nlines pos) rows)))) Err vernunftzentrum.de 70 i+ (dlines (take (drop lines newp) (min (- nlines newp) rows)))) Err vernunftzentrum.de 70 i (wclear win) Err vernunftzentrum.de 70 i (let draw ((l dlines) Err vernunftzentrum.de 70 i (i 0)) Err vernunftzentrum.de 70 i@@ -88,8 +87,8 @@ Err vernunftzentrum.de 70 i (mvwprintw win i 0 "~a" (if (>= (string-length (renderer (car l))) cols) Err vernunftzentrum.de 70 i (string-take (renderer (car l)) (sub1 cols)) Err vernunftzentrum.de 70 i (renderer (car l)))) Err vernunftzentrum.de 70 i- (when (and use-cursor (= (+ pos i) (current-cursor cursor))) Err vernunftzentrum.de 70 i- (let ((e (list-ref lines (+ pos i)))) Err vernunftzentrum.de 70 i+ (when (and use-cursor (= (+ newp i) (current-cursor cursor))) Err vernunftzentrum.de 70 i+ (let ((e (list-ref lines (+ newp i)))) Err vernunftzentrum.de 70 i (new-status "~a" (entry->string e))) Err vernunftzentrum.de 70 i (mvwchgat win i 0 -1 A_STANDOUT 0 #f)) Err vernunftzentrum.de 70 i (draw (cdr l) (add1 i)))) Err vernunftzentrum.de 70 i@@ -97,31 +96,31 @@ Err vernunftzentrum.de 70 i (loop (case (char->integer (getch)) Err vernunftzentrum.de 70 i ((16 #x103) ; arrow up Err vernunftzentrum.de 70 i (cond Err vernunftzentrum.de 70 i- (use-cursor (prev-cursor! cursor) pos) Err vernunftzentrum.de 70 i- (else (if (zero? pos) 0 (set! pos (sub1 pos)))))) Err vernunftzentrum.de 70 i+ (use-cursor (prev-cursor! cursor) newp) Err vernunftzentrum.de 70 i+ (else (if (zero? newp) 0 (sub1 newp))))) Err vernunftzentrum.de 70 i ((14 #x102) ; arrow down Err vernunftzentrum.de 70 i (cond Err vernunftzentrum.de 70 i- (use-cursor (next-cursor! cursor) pos) Err vernunftzentrum.de 70 i- (else (if (= pos nlines) pos (set! pos (add1 pos)))))) Err vernunftzentrum.de 70 i- ((#x106) (when use-cursor (set! cursor (list->cursor selectables))) (set! pos 0)) ; HOME Err vernunftzentrum.de 70 i- ((#x168) (set! pos (max pos (- nlines pos rows)))) ; end Err vernunftzentrum.de 70 i+ (use-cursor (next-cursor! cursor) newp) Err vernunftzentrum.de 70 i+ (else (if (= newp nlines) newp (add1 newp))))) Err vernunftzentrum.de 70 i+ ((#x106) (when use-cursor (set! cursor (list->cursor selectables))) 0) ; HOME Err vernunftzentrum.de 70 i+ ((#x168) (max newp (- nlines newp rows))) ; end Err vernunftzentrum.de 70 i ((260) (k 'back)) Err vernunftzentrum.de 70 i- ((32) Err vernunftzentrum.de 70 i- (set! pos (if (> (+ pos rows) nlines) pos (+ pos (sub1 rows)))) Err vernunftzentrum.de 70 i- (when use-cursor Err vernunftzentrum.de 70 i- (let adjust-cursor! () Err vernunftzentrum.de 70 i- (cond ((> pos (current-cursor cursor)) Err vernunftzentrum.de 70 i- (next-cursor! cursor) Err vernunftzentrum.de 70 i- (adjust-cursor!)) Err vernunftzentrum.de 70 i- ((< (+ pos (length dlines)) (current-cursor cursor)) Err vernunftzentrum.de 70 i- (prev-cursor! cursor) Err vernunftzentrum.de 70 i- (adjust-cursor!))))) Err vernunftzentrum.de 70 i- pos) ; space Err vernunftzentrum.de 70 i- ((10 261) (when use-cursor (k (list-ref lines (current-cursor cursor)))) pos) Err vernunftzentrum.de 70 i- ((263) (set! pos (if (< (- pos rows) 0) 0 (- pos (sub1 rows))))) ; backspace Err vernunftzentrum.de 70 i+ ((32) (let* ((np (if (> (+ newp rows) nlines) newp (+ newp (sub1 rows)))) Err vernunftzentrum.de 70 i+ (nsteps left (partition (lambda (x) (< x np)) selectables))) Err vernunftzentrum.de 70 i+ (when use-cursor Err vernunftzentrum.de 70 i+ (set! cursor (list->cursor selectables)) Err vernunftzentrum.de 70 i+ (repeat (length nsteps) (next-cursor! cursor))) Err vernunftzentrum.de 70 i+ np)) ; space Err vernunftzentrum.de 70 i+ ((10 261) (when use-cursor (k (list-ref lines (current-cursor cursor)))) newp) Err vernunftzentrum.de 70 i+ ((263) (let* ((np (if (< (- newp rows) 0) 0 (- newp (sub1 rows)))) Err vernunftzentrum.de 70 i+ (nsteps left (partition (lambda (x) (< x np)) selectables))) Err vernunftzentrum.de 70 i+ (when use-cursor Err vernunftzentrum.de 70 i+ (set! cursor (list->cursor selectables)) Err vernunftzentrum.de 70 i+ (repeat (length nsteps) (next-cursor! cursor))) Err vernunftzentrum.de 70 i+ np)) ; backspace Err vernunftzentrum.de 70 i ((113) (k 'quit)) ; q Err vernunftzentrum.de 70 i- ((#x47 #x67) (k (uristring->entry (get-user-input "New uri:" (entry->string (current-page))))) pos) ; G Err vernunftzentrum.de 70 i- (else pos))))))))) Err vernunftzentrum.de 70 i+ ((#x47 #x67) (k (uristring->entry (get-user-input "New uri:" (entry->string (current-page))))) newp) ; G Err vernunftzentrum.de 70 i+ (else newp))))))))) Err vernunftzentrum.de 70 i 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 .