• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Automatisch \include aus Ordner

Begonnen von iugin, Dienstag, 4. Oktober 2016, 09:46

Vorheriges Thema - Nächstes Thema

iugin

Hallo miteinander

ich bin sicher, die Lösung ist schon irgendwie im Forum, ich finde sie aber nicht :-)
Ich möchte eine Funktion, welche alle ly-Dateien in einem Ordner liest, und in Dokument einfügt.
Ok, ist sicher nicht klar so...
Also: ich habe ein Ordner, nennen wir es Ordner. Drin sind 3 Files: Music.ly, Song.ly, Trallala.ly.
Ich möchte ein Befehl haben wie z.B.:
\version "2.18.2"
\loadFiles "Ordner"

und Lilypond sieht das:
\version "2.18.2"
\include "Ordner/Music.ly"
\include "Ordner/Song.ly"
\include "Ordner/Trallala.ly

In Google habe ich etwas gesucht wie "Scheme list files directory" oder so, aber bin nicht wirklich findig geworden... :(

Einen lieben Gruss und danke

Eugenio

Manuela

#1
Lösung habe ich keine, aber zwei Links, die vll. weiterhelfen

Including a file only once
conditional include

Hier habe ich das gefunden

Here is an example showing how to display all the entries in a directory:

(define dir (opendir "/usr/lib"))
(do ((entry (readdir dir) (readdir dir)))
    ((eof-object? entry))
  (display entry)(newline))
(closedir dir)

fugenkomponist

Auf Manuelas letzter Idee aufbauend:

loadFiles =
#(define-void-function (dir-name) (string?)
   (let ((dir (opendir dir-name)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (string-suffix? "ly" entry)
           (ly:parser-include-string
            (string-append
             "\\include \"" dir-name "/" entry "\""))))
     (closedir dir)))

Das bindet alles ein, was auf "ly" endet, also .ly- und .ily-Dateien, aber auch Verzeichnisse mit solchen Namen (die sollten also lieber nicht existieren).

iugin

Hallo miteinander

danke für die Antworte :-)
Die Lösung von Fugenkomponist gibt mir folgenden Fehler:
ZitatAnalysieren.../usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/usr/local/lilypond/usr/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f (dir-name)>
Wurde mit dem Return-Code 1 beendet.
Ist die Scheme-Funktion vielleicht für eine andere Version als Lilypond 2.18.2 gedacht?

Lieber Gruss

Eugenio

harm6

Yep, für 2.18.2 verwende:

#(define-void-function (parser location dir-name) (string?)
...


Gruß,
  Harm

fugenkomponist

Oh, sorry, gleich zwei Fehler meinerseits (1. du hast ne Version angegeben und ich hab sie nicht beachtet, 2. ich hab meine Version nicht angegeben).

Es wär wirklich schön, wenn die 2.20 bald käme.

iugin

Hallo miteinander

es läuft immer noch nicht:
ZitatAnalysieren.../Dokumente/Lilypond/Li_Einsingen/Einsingen.ly:15:12: In procedure ly:parser-include-string in expression (ly:parser-include-string (string-append "\\include \"" dir-name ...)):
/Dokumente/Lilypond/Li_Einsingen/Einsingen.ly:15:12: Wrong number of arguments to #<primitive-procedure ly:parser-include-string>
Wurde mit dem Return-Code 1 beendet.

:)

Lieber Gruss und danke

Eugenio

fugenkomponist

Sorry, ly:parser-include-string braucht dann natürlich auch diesen parser als Argument, da hab ich nicht dran gedacht:\version "2.18.2"

loadFiles =
#(define-void-function (parser location dir-name) (string?)
   (let ((dir (opendir dir-name)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (string-suffix? "ly" entry)
           (ly:parser-include-string
            parser
            (string-append
             "\\include \"" dir-name "/" entry "\""))))
     (closedir dir)))
Das sollte jetzt gehen, ist mit 2.18.2 getestet ;)

iugin

Es läuft super, danke vielmals!

Lieber Gruss

Eugenio