Introduction
Introduction Statistics Contact Development Disclaimer Help
Add a history and a way to view it, we can go backward in the history too - cli…
git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit 92b47b4e58d94657cf0e238e2cff77f01f0af1e1
parent 52134391cf7ed0c1deaec32e0e8a7010b6c2a102
Author: Solene Rapenne <[email protected]>
Date: Sat, 4 Nov 2017 16:13:38 +0000
Add a history and a way to view it, we can go backward in the history too
Diffstat:
M README.md | 3 ++-
M clic.lisp | 45 +++++++++++++++++++++--------…
2 files changed, 33 insertions(+), 15 deletions(-)
---
diff --git a/README.md b/README.md
@@ -43,7 +43,8 @@ links. You can exit shell mode with **x**.
## Shell mode
- "a number" : follow the link "number"
-- p : display the latest page with links you have seen
+- p : previous page
+- h : display history
- x : quit shell mode
## Non shell-mode ##
diff --git a/clic.lisp b/clic.lisp
@@ -5,7 +5,7 @@
#+ecl
(require 'sockets))
-(defstruct location host port uri type)
+(defstruct location host port type uri)
(defun color(num1 num2)
"generate string used to put ANSI color"
@@ -15,6 +15,7 @@
(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* '())
;; ANSI colors
(defun addcolor(name type hue) (setf (gethash name *colors*) (color type hue)))
@@ -127,14 +128,17 @@
(defun getpage(host port uri &optional (type "1"))
"connect and display"
- ;; we reset the links table
- ;; ONLY if we have a new folder
- (when (string= "1" type)
- (setf *links* (make-hash-table))
-
- ;; here we store the location for using "previous" command
- (setf (gethash 0 *links*)
- (make-location :host host :port port :uri uri :type type)))
+ (let ((here (make-location :host host :port port :uri uri :type type)))
+
+ ;; goes to the history !
+ (push here *history*)
+
+ ;; we reset the links table ONLY if we have a new folder
+ ;; and we store the location for "previous" command
+ (when (string= "1" type)
+ (setf *links* (make-hash-table))
+ (setf (gethash 0 *links*) here)))
+
;; we prepare informations about the connection
(let* ((address (sb-bsd-sockets:get-host-by-name host))
@@ -162,13 +166,24 @@
(format t "~a~%" line))))))
(format t "~aRequested gopher://~a:~a/~a~a~a~%" (getcolor 'cyan) host port t…
+(defun visit(destination)
+ "visit a location"
+ (getpage (location-host destination)
+ (location-port destination)
+ (location-uri destination)
+ (location-type destination)))
+
(defun g(key)
"browse to the N-th link"
(let ((destination (gethash key *links*)))
- (getpage (location-host destination)
- (location-port destination)
- (location-uri destination)
- (location-type destination))))
+ (when destination
+ (visit destination))))
+
+(defun p()
+ "browse to the previous link"
+ (when (<= 2 (length *history*))
+ (pop *history*)
+ (visit (pop *history*))))
(defun help()
"show help"
@@ -194,7 +209,9 @@
((string= "HELP" user-input)
(help-shell))
((string= "P" user-input)
- (g 0))
+ (p))
+ ((string= "H" user-input)
+ (format t "~{~a~%~}" *history*))
(t
(when user-input
(g (parse-integer user-input)))))
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.