X-Git-Url: https://git.jsancho.org/?p=guile-click.git;a=blobdiff_plain;f=click.scm;fp=click.scm;h=1f6c69a7c4f50ec63eedff6f3e074c68580b3954;hp=e8f8c09833acf6bb8abc67a22beb6d7141bd1731;hb=986fe49efb25343011f28262cd2b7afbf81dd78e;hpb=84da61950d4a4038f76fdb9f66e0bbbb71f75385 diff --git a/click.scm b/click.scm index e8f8c09..1f6c69a 100644 --- a/click.scm +++ b/click.scm @@ -18,14 +18,12 @@ (define-module (click) - #:use-module (ice-9 getopt-long) - #:use-module (srfi srfi-9) - #:use-module (srfi srfi-9 gnu) + #:use-module (srfi srfi-1) + #:use-module (click args) #:use-module (click command) #:use-module (click constant) #:use-module (click help) #:use-module (click util) - #:use-module (click value) #:export (command group)) @@ -44,11 +42,25 @@ (new-command (make-command name click-option-spec help procedure commands))) (let ((click-manager (lambda (args) - (let ((values - (getopt-long args (getopt-long-option-spec click-option-spec)))) - (if (option-ref values 'help #f) - (let ((program-name (car args))) - (display-help program-name new-command)) - (apply procedure (map cdr (get-values option-spec values)))))))) + (let ((values (parse-args args click-option-spec))) + ;; Call current command + (cond ((option-ref values 'help #f) + (let ((program-name (car args))) + (display-help program-name new-command))) + (else + (when procedure + (apply procedure (map cdr (get-values option-spec values)))) + ;; Call nested command (if exists) + (call-nested-command commands values))))))) + (set-command-click-manager! new-command click-manager) new-command))) + + +(define (call-nested-command commands values) + (let ((next-command-args (cdar values))) + (when (not (null? next-command-args)) + (let* ((next-command-name (car next-command-args)) + (next-command (find (lambda (command) ( + (display next-command-args)(newline) + (display next-command-name) (newline)))))