Dienst zum Anlegen einer neuen Textdatei im aktuellen Ordner

Apfelsaft_trüb

Ingrid Marie
Registriert
25.03.09
Beiträge
269
Hallo skriptende Gemeinde,

Ich habe mir einen Dienst angelegt, der mir in einem Ordner meiner Wahl eine neue Textdatei anlegen, und diese -nach dem anlegen- direkt öffnen soll.

Soweit, sogut.

Nun bin ich also im Finder (Fokus z.B. auf dem Desktop Ordner) und wähle den frisch angelegten Dienst "Neue Textdatei anlegen" und es wird mir eine neue Textdatei angelegt.

Nur, das diese Textdatei schon einen Inhalt hat, und zwar den des Pfades, den ich im Workflow in einer Variable übergebe.

Soweit ich die Info/Beschreibung zur Aktion "Wert der Variablen festlegen" verstehe, ist das auch ein korrektes und gewolltes Verhalten,
nur, finde ich nirgens eine Möglichkeit, eine Variable zu füllen, ohne das mir ihr Wert auch wieder ausgegeben wird.

Gibt es evtl. noch einen anderen Lösungsansatz um mir in einem Ordner meiner Wahl eine Textdatei -ohne Inhalt, also leer- anlegen zu lassen?


Hier mein momentaner Dienst:
Bildschirmfoto 2014-08-20 um 17.21.48.png
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
Meiner sieht so aus:

screen-shot-2014-08-20-at-19-56-35-png.111245


Hier das Skript zum Kopieren (das Öffnen habe ich noch ergänzt):

Code:
tell application "Finder"
   
    try
        set current_folder to (folder of the front window) as alias
    on error
        set current_folder to path to desktop folder as alias
    end try
   
    set filename to POSIX path of current_folder & "New File.txt"
    do shell script "touch \"" & filename & "\""
    do shell script "open \"" & filename & "\""
   
end tell
 

Anhänge

  • Screen Shot 2014-08-20 at 19.56.35.png
    Screen Shot 2014-08-20 at 19.56.35.png
    80,5 KB · Aufrufe: 448
  • Like
Reaktionen: Apfelsaft_trüb

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

die Aktion "Neue Textdatei" empfängt als Input (die Eingabe) den Output (das Ergebnis) der vorangehenden Aktion. Diese Eingabe wird dadurch angezeigt, dass die beiden Aktionen verbunden sind.
Abhilfe: "Eingabe dieser Aktion ignorieren" anklicken.

Gruß
 

Apfelsaft_trüb

Ingrid Marie
Registriert
25.03.09
Beiträge
269
Abhilfe: "Eingabe dieser Aktion ignorieren" anklicken.
Das hatte ich ausprobiert, nur funktionierte dann die Übergabe der Variable "wohin" natürlich nicht mehr und die brauche ich doch, um die Textdatei auch an Ort und Stelle anlegen zu lassen und nicht nur in einen bestimmten Ordner.
 

Apfelsaft_trüb

Ingrid Marie
Registriert
25.03.09
Beiträge
269
Hier das Skript zum Kopieren
Hey danke, das funktioniert prächtig!

Es ist zwar komplett konträr zu meinen eigentlichen Ansatz, ohne Programmierung auszukommen, aber... nütz ja nix!
Hauptsache, et löft! Danke.

Kannst Du mir evtl. noch zeigen, wie ich es schaffe, anstatt der Standardapplikation (hier: TextEdit), einen anderen Texteditor aus dem Skript heraus aufzurufen?


Desweiteren fällt mir auf, das, wenn ich -ganz oben in den Diensteinstellungen- "Dienst empfängt 'keine Eingabe'" einstelle (bei Dir "Service receives 'no input'"), dann kann ich den Dienst nicht via Rechtsklick auf einem Ordner ausführen lassen, da er garnicht angezeigt wird.

Wenn das bei Dir funktioniert, wie rufst Du den Dienst denn auf?
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Das hatte ich ausprobiert, nur funktionierte dann die Übergabe der Variable "wohin" natürlich nicht mehr und die brauche ich doch, um die Textdatei auch an Ort und Stelle anlegen zu lassen und nicht nur in einen bestimmten Ordner.

Nein, die Variable wird auch gespeichert, wenn sie nicht an die nächste Aktion übergeben wird. Der Hinweis von sedna war daher korrekt: Eingabe bei der Aktion "Neue Textdatei" ignorieren, dann sollte das Problem behoben sein.

@Guy.brush Beim Finder gibt es insertion location, das gibt auch einen Pfad zurück, wenn kein Finder-Fenster geöffnet ist:

Code:
on run {input, parameters}
   tell application "Finder"
       try
           set newFile to (POSIX path of (insertion location as string)) & "Neue Datei.txt" as string
       end try
       do shell script "touch " & quoted form of newFile
   end tell
end run
 
  • Like
Reaktionen: Guy.brush

Apfelsaft_trüb

Ingrid Marie
Registriert
25.03.09
Beiträge
269
Eingabe bei der Aktion "Neue Textdatei" ignorieren, dann sollte das Problem behoben sein.
Das ist sehr spannend, denn wenn ich das einstelle, geschieht überhaupt nichts, wenn ich auf einem Ordner den Dienst auswähle.

Es wird keine Datei erstellt. Weder im fokussierten Ordner, noch auf dem Desktop (Der Ort, der als Standard in der Variablendeklaration steht):
Bildschirmfoto 2014-08-21 um 15.59.43.png

So sieht es derzeit aus:
Bildschirmfoto 2014-08-21 um 15.56.14.png
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
Kannst Du mir evtl. noch zeigen, wie ich es schaffe, anstatt der Standardapplikation (hier: TextEdit), einen anderen Texteditor aus dem Skript heraus aufzurufen?
Desweiteren fällt mir auf, das, wenn ich -ganz oben in den Diensteinstellungen- "Dienst empfängt 'keine Eingabe'" einstelle (bei Dir "Service receives 'no input'"), dann kann ich den Dienst nicht via Rechtsklick auf einem Ordner ausführen lassen, da er garnicht angezeigt wird.
Wenn das bei Dir funktioniert, wie rufst Du den Dienst denn auf?

Ich rufe den Dienst über einen Shortcut auf, denn im Dienstemenü des Finders erscheint er ja. Einstellen kannst du das in den System Einstellungen → Tastatur → Tastaturbefehle → Dienste.

Ohne Input wird er nicht im Kontextmenü angezeigt, da hast du recht. Du kannst ihm ja einfach einen Input verpassen (z.B. Dateien & Ordner), dann musst du aber eben jedes mal eine Datei oder einen Ordner markieren. Macht aber meiner Ansicht nach keinen Sinn etwas zu markieren, das dann nicht gebraucht wird, deswegen mach ich das über den Shortcut...

Am sinnvollsten wäre es wohl noch, ihm Text als Input zu geben und den Text dann gleich in der Datei zu speichern. Dann musst du aber jedes mal wieder einen Text markieren...

um den Editor anzugeben, änderst du die entsprechende Zeile folgendermaßen ab:

Code:
do shell script "open -a \"TextMate\" \"" & filename & "\""

wobei TextMate der Name des Editors ist.
 
  • Like
Reaktionen: Apfelsaft_trüb

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Füge vor der Aktion "Neue Textdatei" noch die Aktion "Text eingeben" ein, die Eingabe muss dann nicht ignoriert werden.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

tja, da war ich mir zu sicher ...hätte ich gewusst, dass du "Eingabe ignorieren" schon probiert hattest, so hätte ich das nicht gepostet :cool:
Es handelt sich offenkundig um eine "Eigenart" der Aktion "Neue Textdatei"
Steht sie alleine bzw. am Anfang eines Workflows, so funktioniert sie ... als Teil eines Workflows braucht sie zwingend eine Eingabe. Danke an Pill für den Hinweis!
 

Apfelsaft_trüb

Ingrid Marie
Registriert
25.03.09
Beiträge
269
Ja, danke an den Hinweis und Eure -unerbittliche- Hilfe :)

Aber das hilft nur bedingt.

Schliesslich ist mein Anliegen ja, in einem Ordner meiner Wahl, eine Textdatei anzulegen, mittels Rechtsklick und Dienste-Aufruf.

So, wie es nun (hoffentlich korrekt nach Pills Tipp) eingestellt ist, wird immer nur eine Textdatei auf dem Desktop angelegt.

Bildschirmfoto 2014-08-28 um 13.09.42.png
 

O-bake

Aargauer Weinapfel
Registriert
21.01.07
Beiträge
747
Ich nutze dieses Script hier (leider nicht selbst geschrieben) und habe es als Applikation abgespeichert und dann einfach als Icon in die Toolbar oben vom Finder gezogen. Finde ich praktischer als Rechtsklick und dann durch Menus hangeln, da es nur einen Klick erfordert.

Code:
try
    tell application "Finder"
        set il to POSIX path of (insertion location as text)
        set ans to text returned of (display dialog "Save new text file" default answer "empty.txt")
        if ans is "" then return
        do shell script "touch " & quoted form of (il & ans)
        set f to POSIX file (il & ans) as alias
        if il is POSIX path of (desktop as text) then
            set selection to f
        else
            select f
        end if
    end tell
end try

Die letzte if-Schleife ergibt für mich keinen so rechten Sinn. Vielleicht könnte das ja nochmal jemand kommentieren falls möglich.
Habe es zumindest erfolgreich im Einsatz und die Datei wird im jeweils geöffneten Ordner abgelegt. Die einzige Änderung, die ich mir noch wünsche ist, dass die Datei immer die Endung txt hat und ich im Eingabedialog nur den Namen vor dem Suffix eigeben kann.