mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 13:00:26 +02:00
make guile's welcome more gnu-conventional; also warranty and copying info
* module/system/repl/command.scm: Add support for ,show with topics "warranty", "copying", and "version". (language): Don't re-print the welcome; print sometime more terse. * module/system/repl/common.scm (*version*, *warranty*, *copying*): New public globals. (repl-welcome): Display *version*.
This commit is contained in:
parent
1ea8aa7d8e
commit
dca9a4d685
2 changed files with 121 additions and 20 deletions
|
@ -44,7 +44,7 @@
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define *command-table*
|
(define *command-table*
|
||||||
'((help (help h) (apropos a) (describe d) (option o) (quit q))
|
'((help (help h) (show s) (apropos a) (describe d) (option o) (quit q))
|
||||||
(module (module m) (import i) (load l) (binding b))
|
(module (module m) (import i) (load l) (binding b))
|
||||||
(language (language L))
|
(language (language L))
|
||||||
(compile (compile c) (compile-file cc)
|
(compile (compile c) (compile-file cc)
|
||||||
|
@ -53,17 +53,12 @@
|
||||||
(debug (trace tr))
|
(debug (trace tr))
|
||||||
(system (gc) (statistics stat))))
|
(system (gc) (statistics stat))))
|
||||||
|
|
||||||
|
(define *show-table*
|
||||||
|
'((show (warranty w) (copying c) (version v))))
|
||||||
|
|
||||||
(define (group-name g) (car g))
|
(define (group-name g) (car g))
|
||||||
(define (group-commands g) (cdr g))
|
(define (group-commands g) (cdr g))
|
||||||
|
|
||||||
;; Hack, until core can be extended.
|
|
||||||
(define procedure-documentation
|
|
||||||
(let ((old-definition procedure-documentation))
|
|
||||||
(lambda (p)
|
|
||||||
(if (program? p)
|
|
||||||
(program-documentation p)
|
|
||||||
(old-definition p)))))
|
|
||||||
|
|
||||||
(define *command-module* (current-module))
|
(define *command-module* (current-module))
|
||||||
(define (command-name c) (car c))
|
(define (command-name c) (car c))
|
||||||
(define (command-abbrev c) (if (null? (cdr c)) #f (cadr c)))
|
(define (command-abbrev c) (if (null? (cdr c)) #f (cadr c)))
|
||||||
|
@ -84,19 +79,19 @@
|
||||||
(define (lookup-group name)
|
(define (lookup-group name)
|
||||||
(assq name *command-table*))
|
(assq name *command-table*))
|
||||||
|
|
||||||
(define (lookup-command key)
|
(define* (lookup-command key #:optional (table *command-table*))
|
||||||
(let loop ((groups *command-table*) (commands '()))
|
(let loop ((groups table) (commands '()))
|
||||||
(cond ((and (null? groups) (null? commands)) #f)
|
(cond ((and (null? groups) (null? commands)) #f)
|
||||||
((null? commands)
|
((null? commands)
|
||||||
(loop (cdr groups) (cdar groups)))
|
(loop (cdr groups) (cdar groups)))
|
||||||
((memq key (car commands)) (car commands))
|
((memq key (car commands)) (car commands))
|
||||||
(else (loop groups (cdr commands))))))
|
(else (loop groups (cdr commands))))))
|
||||||
|
|
||||||
(define (display-group group . opts)
|
(define* (display-group group #:optional (abbrev? #t))
|
||||||
(format #t "~:(~A~) Commands [abbrev]:~2%" (group-name group))
|
(format #t "~:(~A~) Commands [abbrev]:~2%" (group-name group))
|
||||||
(for-each (lambda (c)
|
(for-each (lambda (c)
|
||||||
(display-summary (command-usage c)
|
(display-summary (command-usage c)
|
||||||
(command-abbrev c)
|
(and abbrev? (command-abbrev c))
|
||||||
(command-summary c)))
|
(command-summary c)))
|
||||||
(group-commands group))
|
(group-commands group))
|
||||||
(newline))
|
(newline))
|
||||||
|
@ -203,6 +198,47 @@ are displayed."
|
||||||
(else
|
(else
|
||||||
(user-error "Bad arguments: ~A" args))))
|
(user-error "Bad arguments: ~A" args))))
|
||||||
|
|
||||||
|
(define-meta-command (show repl . args)
|
||||||
|
"show
|
||||||
|
show TOPIC
|
||||||
|
|
||||||
|
Gives information about Guile.
|
||||||
|
|
||||||
|
With one argument, tries to show a particular piece of information;
|
||||||
|
|
||||||
|
currently supported topics are `warranty' (or `w'), `copying' (or `c'),
|
||||||
|
and `version' (or `v').
|
||||||
|
|
||||||
|
Without any argument, a list of topics is displayed."
|
||||||
|
(pmatch args
|
||||||
|
(()
|
||||||
|
(display-group (car *show-table*) #f)
|
||||||
|
(newline))
|
||||||
|
((,topic) (guard (lookup-command topic *show-table*))
|
||||||
|
((command-procedure (lookup-command topic *show-table*)) repl))
|
||||||
|
((,command)
|
||||||
|
(user-error "Unknown topic: ~A" command))
|
||||||
|
(else
|
||||||
|
(user-error "Bad arguments: ~A" args))))
|
||||||
|
|
||||||
|
(define (warranty repl)
|
||||||
|
"show warranty
|
||||||
|
Details on the lack of warranty."
|
||||||
|
(display *warranty*)
|
||||||
|
(newline))
|
||||||
|
|
||||||
|
(define (copying repl)
|
||||||
|
"show copying
|
||||||
|
Show the LGPLv3."
|
||||||
|
(display *copying*)
|
||||||
|
(newline))
|
||||||
|
|
||||||
|
(define (version repl)
|
||||||
|
"show version
|
||||||
|
Version information."
|
||||||
|
(display *version*)
|
||||||
|
(newline))
|
||||||
|
|
||||||
(define guile:apropos apropos)
|
(define guile:apropos apropos)
|
||||||
(define-meta-command (apropos repl regexp)
|
(define-meta-command (apropos repl regexp)
|
||||||
"apropos REGEXP
|
"apropos REGEXP
|
||||||
|
@ -286,8 +322,11 @@ List current bindings."
|
||||||
(define-meta-command (language repl name)
|
(define-meta-command (language repl name)
|
||||||
"language LANGUAGE
|
"language LANGUAGE
|
||||||
Change languages."
|
Change languages."
|
||||||
(set! (repl-language repl) (lookup-language name))
|
(let ((lang (lookup-language name))
|
||||||
(repl-welcome repl))
|
(cur (repl-language repl)))
|
||||||
|
(format #t "Have fun with ~a! To switch back, type `,L ~a'.\n"
|
||||||
|
(language-title lang) (language-name cur))
|
||||||
|
(set! (repl-language repl) lang)))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
|
@ -28,7 +28,70 @@
|
||||||
repl-tm-stats repl-gc-stats
|
repl-tm-stats repl-gc-stats
|
||||||
repl-welcome repl-prompt repl-read repl-compile repl-eval
|
repl-welcome repl-prompt repl-read repl-compile repl-eval
|
||||||
repl-parse repl-print repl-option-ref repl-option-set!
|
repl-parse repl-print repl-option-ref repl-option-set!
|
||||||
puts ->string user-error))
|
puts ->string user-error
|
||||||
|
*warranty* *copying* *version*))
|
||||||
|
|
||||||
|
(define *version*
|
||||||
|
(format #f "GNU Guile ~A
|
||||||
|
Copyright (C) 1995-2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
|
||||||
|
This program is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `,show c' for details." (version)))
|
||||||
|
|
||||||
|
(define *copying*
|
||||||
|
"Guile is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of
|
||||||
|
the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
Guile is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this program. If not, see
|
||||||
|
<http://www.gnu.org/licenses/lgpl.html>.")
|
||||||
|
|
||||||
|
(define *warranty*
|
||||||
|
"Guile is distributed WITHOUT ANY WARRANTY. The following
|
||||||
|
sections from the GNU General Public License, version 3, should
|
||||||
|
make that clear.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
See <http://www.gnu.org/licenses/lgpl.html>, for more details.")
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -49,10 +112,9 @@
|
||||||
#:gc-stats (gc-stats)))
|
#:gc-stats (gc-stats)))
|
||||||
|
|
||||||
(define (repl-welcome repl)
|
(define (repl-welcome repl)
|
||||||
(let ((language (repl-language repl)))
|
(display *version*)
|
||||||
(format #t "~A interpreter ~A on Guile ~A\n"
|
(newline)
|
||||||
(language-title language) (language-version language) (version)))
|
(newline)
|
||||||
(display "Copyright (C) 2001-2008 Free Software Foundation, Inc.\n\n")
|
|
||||||
(display "Enter `,help' for help.\n"))
|
(display "Enter `,help' for help.\n"))
|
||||||
|
|
||||||
(define (repl-prompt repl)
|
(define (repl-prompt repl)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue