add bookmark support +  test - clic - Clic is an command line interactive client for gopher written in Common LISP
 (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 68af95e45c280ecb7eaa1e846948042fb4f8b49d
 (DIR) parent f9ee8314bb65f728a3a6569942f7786dd9410e79
 (HTM) Author: Solene Rapenne <solene@perso.pw>
       Date:   Mon,  6 Nov 2017 22:18:10 +0000
       
       add bookmark support +  test
       
       Diffstat:
         M Makefile                            |       2 +-
         M clic.lisp                           |      58 +++++++++++++++++++++++++++++--
         M test.lisp                           |       8 ++++++++
       
       3 files changed, 65 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -27,7 +27,7 @@ uninstall:
                @rm -f "${DESTDIR}${BINDIR}/${BIN}"
        
        clean:
       -        rm -f "${BIN}" clic.o clic.eclh clic.cxx
       +        rm -f "${BIN}" clic.o clic.eclh clic.cxx bookmark-test
        
        test: clean all
                @sh run-test.sh ${LISP}
 (DIR) diff --git a/clic.lisp b/clic.lisp
       @@ -6,12 +6,17 @@
          (require 'sockets))
        
        (defstruct location host port type uri)
       +(defparameter *history* '())
       +(defparameter *bookmarks* nil)
        (defparameter *links* (make-hash-table))
        (defparameter *colors* (make-hash-table))
        (defparameter *allowed-selectors* (list "0" "1" "2" "3" "4" "5" "6" "i"
                                                "h" "7" "8" "9" "+" "T" "g" "I"))
       -(defparameter *history* '())
       -(defparameter *offline* nil)
       +
       +;; customizable
       +(defparameter *offline* nil) ;; keep files visited on disk
       +(defparameter *bookmark-file* "bookmark.lisp") ;; name/location of the bookmark file
       +;; end customizable
        
        ;; ANSI colors
        (defun add-color(name type hue)
       @@ -205,11 +210,47 @@
            (pop *history*)
            (visit (pop *history*))))
        
       +(defun load-bookmark()
       +  "Restore the bookmark from file"
       +  (when (probe-file *bookmark-file*)
       +    (with-open-file (x *bookmark-file* :direction :input)
       +    (setf *bookmarks* (read x)))))
       +
       +(defun save-bookmark()
       +  "Dump the bookmark to file"
       +  (with-open-file (x *bookmark-file*
       +                     :direction :output
       +                     :if-does-not-exist :create
       +                     :if-exists :supersede)
       +    (print *bookmarks* x)))
       +
       +(defun add-bookmark()
       +  "Add a new bookmark"
       +  (push (car *history*) *bookmarks*)
       +  (save-bookmark))
       +
       +(defun show-bookmarks()
       +  "display the bookmarks like a page"
       +  (setf *links* (make-hash-table))
       +  (loop for bookmark in *bookmarks*
       +     counting bookmark into line-number
       +     while bookmark do
       +       (progn
       +         (setf (gethash line-number *links*)  bookmark)
       +         (print-with-color (concatenate 'string
       +                                        (location-host bookmark)
       +                                        " "
       +                                        (location-type bookmark)
       +                                        (location-uri bookmark))
       +                           'file line-number))))
       +
        (defun help-shell()
          "show help for the shell"
          (format t "number : go to link n~%")
          (format t "p      : go to previous page~%")
          (format t "h      : display history~%")
       +  (format t "b      : display bookmarks and choose a link from it~%")
       +  (format t "a      : add a bookmark~%")
          (format t "help   : show this help~%")
          (format t "x or q : exit the shell, go back to REPL~%"))
        
       @@ -228,6 +269,14 @@
                 ((string= "HELP" user-input)
                  (help-shell))
        
       +         ;; bookmark current link
       +         ((string= "A" user-input)
       +          (add-bookmark))
       +
       +         ;; show bookmarks
       +         ((string= "B" user-input)
       +          (show-bookmarks))
       +
                 ;; go to previous page
                 ((string= "P" user-input)
                  (p))
       @@ -275,6 +324,9 @@
                                ;; glue remaining args between them
                                :uri (format nil "~{/~a~}" infos))))))
        
       +
       +       
       +
        (defun get-argv()
          #+sbcl
          (cadr *posix-argv*)
       @@ -299,3 +351,5 @@
        #+ecl
        (defconstant +uri-rules+
          '(("*DEFAULT*" 1 "" :stop)))
       +
       +(load-bookmark)
 (DIR) diff --git a/test.lisp b/test.lisp
       @@ -6,8 +6,12 @@
        (print (parse-url "perso.pw"))
        (print (parse-url "perso.pw:70"))
        
       +
       +(setf *bookmark-file* "bookmark-test")
       +(load-bookmark)
        (p)
        (g 2)
       +(add-bookmark)
        (getpage "bitreich.org" 70 "/")
        (g 11) ;; going to radio
        (g 35) ;; going back
       @@ -17,6 +21,10 @@
        (g 1)
        (p)
        (p)
       +(add-bookmark)
       +(show-bookmarks)
       +(g 1)
       +
        
        (print *history*)
        (format t "~%")