Hi,

I've made a little patch (attached) to src/edwin/editor.scm that, when
combined with the shell script and Scheme code below, lets me open
Edwin directly on a file from the terminal like so:

  $ edwin file.txt
  ... (new Edwin opens with file.txt loaded)

I'm not submitting this patch for inclusion as it is, it's not very
nice; instead I have questions:

* Is there a way to open Edwin directly on a file without doing this?

* If there currently isn't an official way to do this, I'd appreciate
  any comments on how to do this in a less roundabout way so that it
  could be submitted for the ``official'' Edwin.

* This starts a new Scheme/Edwin every time, which is OK but sort of
  uncool. Is there a way to send a message to a currently running
  Edwin to open the file in a new frame or buffer?

Here's the shell script:

  #!/bin/bash
  
  EDIT_FILE=$1
  CODE_DIR=$HOME/Code/mathoms
  SCHEME_FILE=$CODE_DIR/edit-file.scm
  
  /Users/rloveland/bin/scheme --args $EDIT_FILE --load $SCHEME_FILE
  
And the `edit-file.scm' loaded by Scheme above is:

  (load-option 'FORMAT)
  
  (define (build-plausible-filename candidate)
    (let ((longname (string-append (->namestring (pwd)) candidate)))
      (cond 
       ((file-exists? longname) longname)
       ((file-exists? candidate) candidate)
       (else #f))))
  
  (define (edit-file)
    (let* ((args (command-line))
           (maybe-file (car args)) ; (list-tail args (- (length args) 1))))
           (file (build-plausible-filename maybe-file)))
      (format #t "~%;Editing ~A~%" file)
      (edit file)))
  
  (edit-file)

Thanks!
Rich
diff --git a/src/edwin/editor.scm b/src/edwin/editor.scm
index 5d23827..933e22d 100644
--- a/src/edwin/editor.scm
+++ b/src/edwin/editor.scm
@@ -28,13 +28,13 @@ USA.
 
 (declare (usual-integrations))
 
-(define (edit . args)
+(define (edit file . args)
   (call-with-current-continuation
    (lambda (continuation)
      (cond (within-editor?
            (error "edwin: Editor already running"))
           ((not edwin-editor)
-           (apply create-editor args))
+           (apply create-editor file args))
           ((not (null? args))
            (error "edwin: Arguments ignored when re-entering editor" args))
           (edwin-continuation
@@ -112,13 +112,16 @@ USA.
 (define create-editor-args
   '())
 
-(define (create-editor . args)
+(define (create-editor file . args)
   (let ((args
         (if (null? args)
             create-editor-args
             (begin
               (set! create-editor-args args)
-              args))))
+              args)))
+        (filename (if (file-exists? file)
+                      file
+                      #f)))
     (reset-editor)
     (event-distributor/invoke! editor-initializations)
     (set! edwin-editor
@@ -137,9 +140,11 @@ USA.
     (set! edwin-initialization
          (lambda ()
            (set! edwin-initialization #f)
-           (standard-editor-initialization)))
+           (if filename
+                (standard-editor-initialization filename)
+                (standard-editor-initialization))
     (set! edwin-continuation #f)
-    unspecific))
+    unspecific))))
 
 (define editor-initializations
   (make-event-distributor))
@@ -165,7 +170,7 @@ USA.
 
   (find-preferred preferences))
 
-(define (standard-editor-initialization)
+(define (standard-editor-initialization #!optional filename)
   (with-editor-interrupts-disabled
    (lambda ()
      (if (and (not init-file-loaded?)
@@ -176,7 +181,10 @@ USA.
                 (load-edwin-file filename '(EDWIN) #t)))
           (set! init-file-loaded? #t)
           unspecific))))
-  (let ((buffer (find-buffer initial-buffer-name)))
+  (let ((buffer (find-buffer initial-buffer-name))
+        (filename (if (not (default-object? filename))
+                      ((ref-command find-file) filename)
+                      #f)))
     (if (and buffer
             (not inhibit-initial-inferior-repl?))
        (start-inferior-repl!
_______________________________________________
MIT-Scheme-devel mailing list
MIT-Scheme-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/mit-scheme-devel

Reply via email to