Autor Thema: Dateinamen automatisch ausgeben  (Gelesen 2072 mal)

amateur

  • Member
Dateinamen automatisch ausgeben
« am: Freitag, 3. Oktober 2014, 14:29 »
Hallo,
ich möchte den Dateinamen automatisch mit ausdrucken, damit ich bei mehreren Versionen noch weiss, welche dem Druck entsprechen.
Ich habe versucht, dieses Snippet anzupassen:
http://lsr.di.unimi.it/LSR/Search?q=file&s=0&m=10
aber da muss ich endlos lang ausprobieren, damit der Dateiname vollständig dargestellt wird.
Ich bin auch kein "Scheme"-Programmierer.
Gibt es eine einfachere Lösung?
Danke

Lilipond Version 1.18.2 W7

Ich habe gerade gesehen, dass es offensichtlich an den Leerzeichen im Dateinamen liegt. Wenn diese weggelassen werden, wird der gesamte Pfad ausgedruckt.
« Letzte Änderung: Freitag, 3. Oktober 2014, 14:34 von amateur »

Arnold

  • Member
Re: Dateinamen automatisch ausgeben
« Antwort #1 am: Montag, 6. Oktober 2014, 10:25 »
Hallo,

aus »Inkompatibilitätserfahrungen« vermeide ich sowieso Leerzeichen und nicht-7-Bit-ASCII-Zeichen im Dateinamen.
Ich stelle standardmäßig noch das letzte Unterverzeichnis zum Dateinamen in der Fußzeile dar, zusammen mit Lilypond-Version und Übersetzungsdatum.
Das Ganze sieht etwa so aus:
% Standards for paper definition
FootLeft = #(string-append "Music engraving by LILYPOND, Version " (lilypond-version))
FootRight = #(string-append "compiled at " (strftime "%Y-%m-%d %H:%M:%S" (localtime (current-time))))
FootCenter = #(let*
  ((cmdl (object->string (command-line)))
   (laloc (+ (string-rindex cmdl #\space) 2))
   (cmdlen (- (string-length cmdl) 2))
   (filen (substring cmdl laloc cmdlen))
   (workdir (getcwd))
   (basename (let ((ppos (string-rindex filen #\. )))
     (if (number? ppos) (substring filen 0 ppos) filen)))
   (lastdir (let*
     ((dpos (string-rindex workdir (string->char-set "\\/")))
      (laenge (string-length workdir)))
     (if (< (+ dpos 1) laenge) (string-append (substring workdir (+ dpos 1)) "/") "/"))))
  (string-append lastdir basename))

\paper {
  oddFooterMarkup = \markup \fill-line {
    \abs-fontsize #6.5 { \FootLeft }
    \abs-fontsize #9.0 { \bold { \FootCenter } }
    \abs-fontsize #6.5 { \FootRight }
  }
}
% EOF
Da meine Übersetzung immer im Arbeitsverzeichnis durchgeführt wird, bestimme ich workdir mittels (getcwd).
In vier Zeilen Code extrahiere ich den Namen des letzten Unterverzeichnisses in die Variable lastdir, und hänge gleich mit (string-append ...) einen Schrägstrich hintendran.
Mein FootCenter wird am Schluß durch (string-append lastdir basename) gebildet.

Ich hoffe, diese Beschreibung hilft dir weiter.

Arnold

DieTuba

  • Member
Re: Dateinamen automatisch ausgeben
« Antwort #2 am: Sonntag, 26. April 2015, 22:56 »
Hallo, Arnold,
ich bin aktuell auf der Suche nach einer Möglichkeit, den Dateinamen der aktuellen ly-Datei in der Fußzeile zu verwenden. Dabei bin ich auf diesen Beitrag gestoßen und versuche nun, Deine Funktion so umzuschreiben, daß nur der Dateiname ohne irgendwelche Verzeichnisangaben ausgegeben wird. Leider ohne Erfolg, meine Programmierkenntnissse halten sich in sehr engen Grenzen! Kannst Du mir einen Tipp geben, wie das doch funktionieren kann.

Danke für Deine Hilfe!

DieTuba

Ach so, ich verwende Version 2.18.2 unter Windows.

harm6

  • Member
Re: Dateinamen automatisch ausgeben
« Antwort #3 am: Montag, 27. April 2015, 01:14 »
Hallo,

Arnolds code beinhaltet zahlreiche Setzungen, ist somit auch etwas komplexer.

Den einfachen Dateinamen kriegt man auch via
(ly:parser-output-name parser)

z.B.:
\version "2.18.0"

\paper {
  oddFooterMarkup = \markup \fill-line { #(ly:parser-output-name parser) }
}

{ R1 }

HTH,
  Harm

DieTuba

  • Member
Re: Dateinamen automatisch ausgeben
« Antwort #4 am: Montag, 4. Mai 2015, 18:53 »
Herzlichen Dank, Harm,
das hilft mir schon weiter.

DieTuba