Add support to html link - clic - Clic is an command line interactive client fo… | |
git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit efe07395e09bc6d6495dd651671c5d48e4a502ee | |
parent a331d51d084fea91b64c85500a458999fbab23a6 | |
Author: Solene Rapenne <[email protected]> | |
Date: Thu, 28 Dec 2017 16:04:47 +0100 | |
Add support to html link | |
Diffstat: | |
M clic.lisp | 31 ++++++++++++++++++++++-------… | |
M make-binary.lisp | 1 + | |
2 files changed, 23 insertions(+), 9 deletions(-) | |
--- | |
diff --git a/clic.lisp b/clic.lisp | |
@@ -1,10 +1,12 @@ | |
;;;; let's hide the loading | |
(let ((*standard-output* (make-broadcast-stream))) | |
+ (require 'asdf) | |
#+sbcl | |
(require 'sb-bsd-sockets) | |
#+ecl | |
(require 'sockets)) | |
+ | |
;;;; C binding to get terminal informations | |
;;;; SBCL only | |
#+sbcl | |
@@ -38,7 +40,8 @@ | |
;;;; END C binding | |
;; structure to store links | |
-(defstruct location host port type uri) | |
+(defstruct location host port type uri | |
+ :predicate) | |
;;;; BEGIN GLOBAL VARIABLES | |
@@ -82,7 +85,7 @@ | |
(defun get-color(name) (gethash name *colors*)) | |
(add-color 'red 1 31) | |
-(add-color 'white 0 70) | |
+(add-color 'reset 0 70) | |
(add-color 'bg-black 0 40) | |
(add-color 'folder 4 34) | |
(add-color 'green 1 32) | |
@@ -101,9 +104,9 @@ | |
t | |
nil)) | |
-(defun print-with-color(text &optional (color 'white) (line-number nil)) | |
+(defun print-with-color(text &optional (color 'reset) (line-number nil)) | |
"Used to display a line with a color" | |
- (format t "~3A| ~a~a~a~%" (if line-number line-number "") (get-color color) … | |
+ (format t "~3A| ~a~a~a~%" (if line-number line-number "") (get-color color) … | |
(defmacro check(identifier &body code) | |
"Macro to define a new syntax to make 'when' easier for formatted-output fun… | |
@@ -209,9 +212,9 @@ | |
;; h http link | |
(check "h" | |
- (print-with-color (concatenate 'string | |
- text " " uri) | |
- 'http "url"))) | |
+ (setf (gethash line-number *links*) uri) | |
+ (print-with-color text 'http line-number))) | |
+ | |
;; unknown type | |
(print-with-color (format nil | |
"invalid type ~a : ~a" line-type text) | |
@@ -252,7 +255,17 @@ | |
"browse to the N-th link" | |
(let ((destination (gethash key *links*))) | |
(when destination | |
- (visit destination)))) | |
+ (print destination) | |
+ (cond | |
+ | |
+ ;; visit a gopher link | |
+ ((location-p destination) | |
+ (visit destination)) | |
+ | |
+ ;; visit http link | |
+ ((search "URL:" destination) | |
+ (uiop:run-program (list "xdg-open" | |
+ (subseq destination 4)))))))) | |
(defun p() | |
"browse to the previous link" | |
@@ -431,7 +444,7 @@ | |
(setf row 0) | |
(format t "~a press enter or a shell command ~a : " | |
(get-color 'bg-black) | |
- (get-color 'white)) | |
+ (get-color 'reset)) | |
(force-output) | |
(let ((first-input (read-char))) | |
(when (not (char= #\NewLine first-input)) | |
diff --git a/make-binary.lisp b/make-binary.lisp | |
@@ -1,6 +1,7 @@ | |
;; ecl produces a linked binary to ecl shared library | |
;; sbcl produces a static binary (~ 10Mb with compression / 70Mb without) | |
+(require 'asdf) | |
#+ecl | |
(require 'cmp) | |
#+ecl |