]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/lily.scm
* scm/editor.scm: New module.
[lilypond.git] / scm / lily.scm
index 30e9951d3f220a19375d743463a7db46b9412d69..31d482a17e55663059bfac1affa63042868d5cb3 100644 (file)
@@ -9,14 +9,14 @@
 (if (defined? 'set-debug-cell-accesses!)
     (set-debug-cell-accesses! #f))
 
-;;(set-debug-cell-accesses! 5000)
+;(set-debug-cell-accesses! 1000)
 
 (use-modules (ice-9 regex)
             (ice-9 safe)
              (ice-9 optargs)
             (oop goops)
-            (srfi srfi-1)  ; lists
-            (srfi srfi-13)) ; strings
+            (srfi srfi-1)  ;; lists
+            (srfi srfi-13)) ;; strings
 
 
 ;; my display
       (debug-enable 'backtrace)
       (read-enable 'positions)))
 
-(define-public (line-column-location file line col)
-  "Print an input location, including column number ."
-  (string-append (number->string line) ":"
-                (number->string col) " " file))
-
-(define-public (line-location  file line col)
-  "Print an input location, without column number ."
-  (string-append (number->string line) " " file))
-
-(define-public point-and-click #f)
+;; initialize defaults. 
+(ly:set-option 'command-line-settings
+              '((resolution . 90)
+                (preview-include-book-title . #t)
+                ))
 
 (define-public tex-backend?
   (member (ly:output-backend) '("texstr" "tex")))
@@ -226,7 +221,8 @@ The syntax is the same as `define*-public'."
            
            "paper.scm"
            "backend-library.scm"
-           ;; "x11-color.scm"
+           "x11-color.scm"
+
            ;; must be after everything has been defined
            "safe-lily.scm"))
 
@@ -299,31 +295,71 @@ The syntax is the same as `define*-public'."
           protects))
      outfile)))
 
+(define-public (tweak-grob-property grob sym val)
+  (set! (ly:grob-property grob sym) val))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 (define-public (lilypond-main files)
   "Entry point for LilyPond."
-  (let* ((failed '())
-        (handler (lambda (key failed-file)
-            (set! failed (append (list failed-file) failed)))))
-        ;;(handler (lambda (key . arg) (set! failed (append arg failed)))))
-    (for-each
-     (lambda (f)
-       (catch 'ly-file-failed
-             (lambda () (ly:parse-file f))
-             (lambda (x . args) (handler x f)))
-             ;;(lambda (x) (handler x f)))
-       (if #f
-          (dump-gc-protects)))
-     files)
-    
+
+  (if (null? files)
+      (no-files-handler))
+
+  (let ((failed (lilypond-all files)))
     (if (pair? failed)
-       (ly:error (_ "failed files: ~S") (string-join failed))
+       (begin
+         (ly:error (_ "failed files: ~S") (string-join failed))
+         (exit 1))
        (begin
          ;; HACK: be sure to exit with single newline
          (ly:message "")
          (exit 0)))))
 
-(define-public (tweak-grob-property grob sym val)
-  (set! (ly:grob-property grob sym) val))
+(define (no-files-handler)
+  (ly:usage)
+  (exit 2))
+
+(define-public (lilypond-all files)
+  (let* ((failed '())
+        (handler (lambda (key failed-file)
+                   (set! failed (append (list failed-file) failed)))))
+    ;;(handler (lambda (key . arg) (set! failed (append arg failed)))))
+    (for-each (lambda (x) (lilypond-file handler x)) files)))
+
+(define (lilypond-file handler file-name)
+  (catch 'ly-file-failed
+        (lambda () (ly:parse-file file-name))
+        (lambda (x . args) (handler x file-name)))
+  ;;(lambda (x) (handler x f)))
+  (if #f
+      (dump-gc-protects)))
+
+(use-modules (scm editor))
+
+(define-public (gui-main files)
+  (if (null? files) (gui-no-files-handler))
+  (let* ((base (basename (car files) ".ly"))
+        (log-name (string-append base ".log"))
+        (log-file (open-file log-name "w")))
+    (display "# -*-compilation-*-" log-file)
+    (newline log-file)
+    (ly:message (_ "Redirecting output to ~a...") log-name)
+    (ly:port-move (fileno (current-error-port)) log-file)
+    (if (null? (lilypond-all files))
+       (exit 0)
+       (begin
+         (system (get-editor-command log-name 0 0))
+         (exit 1)))))
+
+(define (gui-no-files-handler)
+  (let* ((input (string-append
+                (string-regexp-substitute
+                 "share/lilypond/" "share/doc/lilypond-"
+                 (getenv "LILYPONDPREFIX"))
+                "-1/input"))
+        (ly (string-append input "/" "Welcome to LilyPond.ly"))
+        (cmd (get-editor-command ly 0 0)))
+    (system cmd)))
+
+;; FIXME
+;; (define lilypond-main gui-main)