Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Skripta Textredigerare

Tråden skapades och har fått 19 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2003-06-22 18:54

Går det inte att skripta Textredigerare? Jag har försökt öppna dokument i Texredigerare med ett skript, men det tycks inte gå. Jag får använda Appleworks, och då går det utmärkt.:confused:

Är detta ett känt fenomen, eller har jag ett unikt problem?

Vänligen, Ylan

Om du undrar om det går att scripta en viss applikation så kan du (i Mac OS X), dra och släppa applikations-ikonen på ikonen för Script Editor (eller ett alias av den senare). Då öppnar du ordlistan för det programmet och då ser du om det går att scripta den (du får ett fel-meddelande annars). Du kan också välja "Öppna ordlistan" inifrån Script Editor.

Script Editor är en script-bar applikation och nedanstående är ett litet exempel.

tell application "Finder"
	set targetfolder to choose folder "Var vill du spara?"
	set filename to the text returned of (display dialog "Namn på filen:" default answer "")
	set targetfile to (targetfolder as text) & filename as text
	if exists (file targetfile) then
		set targetfile to targetfile as alias
	else
		set targetfile to (make new file at targetfolder with properties {name:filename})
	end if
end tell


tell application "TextEdit"
	activate
	close documents
	open targetfile
	set text of document 1 to "Första meningen i detta nya dokument."
	close document 1 saving in targetfile saving ask -- saving ask/yes/no
end tell

Lycka till!

/Ola

  • Medlem
  • Stockholm
  • 2003-06-22 19:30

Tack Ola!

Problemet är att följande skript:

set dokumentVar to "os x:users:ylan:desktop:test.rtf"

tell application "TextEdit"

activate
open file dokumentVar

end tell

ger felmeddelandet: "TextEdit got an error: file "os x:users:ylan:desktop:test.rtf" doesn't understand the open message"

Om jag i skriptet ovan byter ut "TextEdit" mot "Appleworks 6" går det alldeles utmärkt.

Och saken är den att TextEdit har kommadot open i sin ordlista!:rolleyes: Som du visar i ditt exempelskript.

Vänligen, Ylan

Detta fungerar:

set dokumentVar to "Macintosh HD:users: ola:desktop:test.txt" as alias

tell application "TextEdit"

activate
open dokumentVar
end tell

/Ola

  • Medlem
  • Stockholm
  • 2003-06-22 20:48

Tja, vad skall man säga? Det är magik och inte logik som styr datorer.

Det fungerar inte, och då har jag sparat dokumentet precis med TextEdit.

Det konstiga är ju att skriptet fungerar hos dig Ola. Det fungerar om jag öppnar med ett annat program, och jag kan öppna filen genom att dubbelklicka.

Jag får väl köra med ett annat program helt enkelt, och hoppas att den som är sur på mig någonstans i min dator, blir glad igen.;)

Vänligen, Ylan

Vad var då skillnaden?

Jo, Applescript och de flesta applikationer som stöder det är väldigt petiga med datatyper. Applescript kanske är lite mindre känsligt än andra scriptspråk och programmeringsspråk men du måste ändå alltid tänka på data-typ när du skriver Applescript.

Om du gör så här:

set dokumentVar to "os x:users:ylan:desktop:test.rtf"

Så blir dokumentVar av typen text.

Om du gör

set dokumentVar to "os x:users:ylan:desktop:test.rtf" as alias

Så blir dokumentVar av typen alias.

Om du sedan kollar i TextEdit ordlistan på kommandot Open så står det:

open: Open an object.
open a list of alias -- list of objects

Där står alltså att kommandot förväntar sig matas med en lista av typen alias. En lista är också en datatyp i Applescript, men varje objekt i en lista kan ha en egen typ, så du kan blanda alias, text, nummer i samma list. I det här fallet så kan du alltså skapa en lista med tex tio alias och sedan be TextEdit att öppna alla dessa på en gång.

Notera också att jag tagit bort ordet file ur ditt open-kommando, för även om filer och mappar faktiskt finns som objekt som Finder förstår sig på, så förstår inte TextEdit filer och mappar, dessa saker finns inte med i TextEdits ordlista. Hade du dock riktat ditt script till Finder hade kanske

tell application "Finder"
open file "bla bla bla" as alias
end tell

kunnat fungera.

Tillägg: Har lagt till fetstil här och där och rättat till språket.

/Ola

Senast redigerat 2003-06-22 21:11
  • Medlem
  • Stockholm
  • 2003-06-22 20:59

Jag tackar och bugar, ja, vore jag smidigare bugade jag mig ända ner till golvet. Intressant att Appleworks inte reagerar på samma sätt, men man lär sig något nytt var dag.

Vänligen, Ylan:D

Kan tillägga att skapa en lista av filer och få TextEdit att öppna alla på en gång ser ut så här:

set dokumentVar to {"Macintosh HD:users:ola:desktop:test.txt" as alias, ¬
	"Macintosh HD:users:ola:desktop:test 2.txt" as alias, ¬
	"Macintosh HD:users:ola:desktop:test 3.txt" as alias}

tell application "TextEdit"
	activate
	open dokumentVar
end tell

När jag kollar i AppleWorks ordlista så ser jag att ordet file finns med i den, så det är väl därför. Olika utvecklare skriver sitt stöd för Appelscript på olika sätt vilket kan vara väldigt frustrerande när man försöker med samma kommandon (öppna en fil är en sådan fälla...) i olika program. Det verkar vara något man får leva med helt enkelt.

Lycka till med Scriptandet i fortsättningen och säg till om du stöter på patrull.

/Ola

  • Medlem
  • Stockholm
  • 2003-06-22 21:21

ledsen, men det fungerar inte.Men jag får ett nytt felmeddelande: File os x:users:ylan:desktop:test.txt wasn't found

Detta gäller för både TextEdit och Appleworks 6 (när jag använder "as alias")

Tror jag tar litet paus för ikväll.

Tack Ola!!

Vänligen, Ylan

  • Medlem
  • Stockholm
  • 2003-06-22 21:24

Men detta fungerar utmärkt:

tell application "AppleWorks 6"
	
	set dokumentVar to "os x:users:ylan:desktop:test.txt"
	
	
	open file dokumentVar
	
	set listVar to every word of document 1
	
	set antalOrd to length of listVar
	
end tell

OS X kan ibland dölja filtyper, så ett dokument kan få namnet Test.txt.rtf tex.

Genom att köra detta script får du fram alla grejer på Desktop:

tell application "Finder"
get items of desktop
end tell

eller

tell application "Finder"
get items of desktop as text
end tell

Beroende på vad du tycker är mest lättläst. Sedan kan du kopiera från resultatfönstret och klistra in i ditt script, då vet du att det är rätt stavat.

Du kan behöva öppna resultatfönstret (Kommando + L) för att se resultatet.

Gissar att det är något sådant, filen finns helt enkelt inte där.

/Ola

Har du tagit bort ordet file, från det TELL-statement du riktar till TextEdit?

Klistra in ditt script som inte fungerar i ett inlägg.

/Ola

  • Medlem
  • Stockholm
  • 2003-06-22 21:37

Här är det:

set dokumentVar to "os x:users:ylan:desktop:test.txt" as alias

tell application "TextEdit"
	
	activate
	open dokumentVar
	
end tell
  • Medlem
  • Stockholm
  • 2003-06-22 21:39

Det här fanns enligt Finder:

document file "test.txt" of desktop of application "Finder"

Ylan

Scriptet ovan fungerar fint för mig, när jag byter sökvägen till vad som gäller för mig.

set dokumentVar to "Macintosh HD:users:ola:desktop:test.txt" as alias

tell application "TextEdit"

activate
open dokumentVar

end tell

/Ola

Jo förresten, OS X är känsligt för stor och liten bokstav i sökvägar och i filnamn. Det är inte det kanske?

/Ola

  • Medlem
  • Stockholm
  • 2003-06-22 21:52

Men varför blir det i så fall inte problem med Appleworks?

  • Medlem
  • Stockholm
  • 2003-06-22 21:55

Där var det! Jag bugar och bockar. Min disk heter OS X inte os x. Nu fungerar det! Tack så mycket Ola, man blir lurad när det fungerar olika för olika apps!

Vänligen, Ylan:D

  • Medlem
  • Stockholm
  • 2003-06-22 22:11

Skillnaden är, förstår jag nu, att Appleworks inte behöver ha variabeln som alias. När man har det som alias måste man hålla rätt på stor och liten bokstav, något Applescript inte är noggrant med annars!

Tack än en gång, nu blev jag sugen att fortsätta igen

Vänligen, Ylan

Om jag skall spekulera så gissar jag att ordet file som Appleworks vill ha gör att man kan "mata" open-kommandot med två olika data-typer, antingen alias eller text (varav den senare omvandlas "på försök" av funktionen open till ett alias, innan den ger upp, om den inte har).

Trevligt att det fungerade.

/Ola

1
Bevaka tråden