~ chicken-core (chicken-5) f331b106bc3fa13d1342cdd66885b61849a7c167
commit f331b106bc3fa13d1342cdd66885b61849a7c167
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sun Jun 20 02:15:48 2010 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Jun 20 02:15:48 2010 +0200
added ,e command to csi toplevel (suggested by Oivind Binde)
diff --git a/csi.import.scm b/csi.import.scm
index 34de1609..0d41861e 100644
--- a/csi.import.scm
+++ b/csi.import.scm
@@ -26,4 +26,4 @@
(##sys#register-primitive-module
'csi
- '(toplevel-command set-describer!))
+ '(toplevel-command editor-command set-describer!))
diff --git a/csi.scm b/csi.scm
index 2ad91162..1a3dab84 100644
--- a/csi.scm
+++ b/csi.scm
@@ -54,7 +54,7 @@ EOF
##sys#windows-platform)
(hide parse-option-string bytevector-data member* canonicalize-args
describer-table dirseparator? circular-list? improper-pairs?
- findall command-table) )
+ findall command-table default-editor) )
;;; Parameters:
@@ -65,6 +65,15 @@ EOF
(set! ##sys#features (cons #:csi ##sys#features))
(set! ##sys#notices-enabled #t)
+(define editor-command (make-parameter #f))
+
+(define default-editor
+ (or (get-environment-variable "EDITOR")
+ (get-environment-variable "VISUAL")
+ (if (get-environment-variable "EMACS")
+ "emacsclient"
+ "vi"))) ; shudder
+
;;; Print all sorts of information:
@@ -317,6 +326,13 @@ EOF
(when ##sys#last-exception
(history-add (list ##sys#last-exception))
(describe ##sys#last-exception) ) )
+ ((e)
+ (let ((r (system
+ (string-append
+ (or (editor-command) default-editor)
+ " " (read-line)))))
+ (if (not (zero? r))
+ (printf "Editor returned with non-zero exit status ~a" r))))
((s)
(let* ((str (read-line))
(r (system str)) )
@@ -335,6 +351,7 @@ EOF
,l FILENAME ... Load one or more files
,ln FILENAME ... Load one or more files and print result of each top-level expression
,r Show system information
+ ,e FILENAME Run external editor
,s TEXT ... Execute shell-command
,exn Describe last exception
,t EXP Evaluate form and print elapsed time
Trap