Item in der Menü leitse platzieren (oder Alternativen)

P

pronto

Neues Mitglied
Thread Starter
Dabei seit
02.12.2009
Beiträge
11
Reaktionspunkte
0
Hi Community,

ich habe ein AppleScript welches die Powermanagement Einstellungen verändert. Leider habe ich aber keinen visuellen Hinweis, welche Einstellungen gerade aktiv sind. Das Skript wird als Automator Programm ausgeführt. Hier das Script:

Code:
set currentStatus to do shell script "pmset -a -g"
set toStar to offset of "*" in currentStatus
set currentProfile to characters (toStar - 2) through (toStar - 1) in currentStatus as string
if currentProfile is equal to "-1" then
	do shell script "pmset -c 2 -b 1 -u 1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 600"
	display dialog "Set to Default PM Settings" giving up after 3 buttons {"OK"} default button 1
else
	do shell script "pmset -a -1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 0"
	display dialog "Set to Presentation Mode PM Settings" giving up after 3 buttons {"OK"} default button 1
end if

Bestünde die Möglichkeit, dass wenn die else-Anweisung wahr ist, dass das Automator Programm Icon im Dock solange aktiv bleibt, bis ich das Programm erneut starte um die Powermanagement Einstellungen wieder auf Default zurückzustellen (steht in der if-Anweisung)? Als weitere Möglichkeit käme ein sich veränderndes Symbol in der Menüleiste in Frage (zB ON und OFF). Was halt am einfachsten geht, ich bin kein Programmierer, für das Skript da oben habe ich ca. eine Woche und zig Fragen gebraucht. Ich bräuchte halt nur einen visuellen Hinweis, auf welchen Settings es aktuell steht.

BTW: Kann man die zweite "do shell script" Anweisung so stehen lassen oder ist das schlechter Programmierstil? Wenn ich die beiden Befehle nur mit einem Semikolon getrennt habe, habe ich einen Fehler bekommen.

Bye Tom
 
...

Hallo pronto,

die Trennung mit Semikolon sollte eigentlich funktioniren (Leerzeichen nach dem Semikolon vergessen?) do shell script "cd ~/Documents; ls"

Schlechten Stil finde ich jetzt nicht unbedingt (ist übersichtlich). Bei jedem "do shell script" wird eine neue Shell geöffnet. Variablen die Du in der einen setzt hast Du in der anderen nicht zur Verfügung.
Each invocation of do shell script uses a new shell process, so state such as changes to variables and the working directory is not saved from one to the next.

Um schnell ein Menulet zu bekommen kannst Du Dir mal das ansehen.

Gruß Andi
 
Hallo Tom!

Erstmal vorweg:
Crossposting finde ich nicht so gut. Sprich, ich habe die Diskussion "drüben" mitbekommen und eigentlich sollte ich hier gar nicht antworten.
Und weiter würde ich dir das gleiche empfehlen, was du dort als Infos bekommen hast:
Lade dir Xcode und erstelle damit dein Programm. Damit kannst du dann auch --- Stichwort NSStatusItem -- ein Status-Menü mit wechselnder optischer Anzeige erstellen. Anleitungen findest du im Netz.

Allerdings sehe ich ein, dass ein erster Blick in Xcode einen Anfänger erschlägt.

Das hier erwähnte Tapir wäre eine mögliche Alternative.
Dazu müsstest du dein Skript erweitern:
Wenn Status X, dann lade Programm A (mit Tapir Status Menü 1) und beende Programm B
Wenn Status Y, dann lade Programm B (mit Tapir Status Menü 2) und beende Programm A

Das "drüben" erstellte und von dir gepostete Skript ist ein AppleScript. Man muss es nicht mit Automator ausführen. Besser man kompiliert es mit dem AppleScript-Editor und speichert es als Programm.

Statt Tapir kannst du auch mit eben dem AppleScript-Editor zwei einfache "leere" Programme ("A" und "B") erstellen, die nichts weiter tun müssen, als sich nicht automatisch zu beenden (im "Sichern" Dialog einzustellen). Im Paketinhalt der beiden Programme tauschst du das Icon aus und fügst eigene ein.

Nachfolgendes Beispielskript änderst du wie gewünscht und sicherst es als Programm. Dann würde ich noch Paketinhalt -> Contents/Info.plist öffnen und einstellen, dass es als Hintergrundanwendung läuft. Z.B. mit Textedit folgende Zeilen an der alphabetisch richtigen Stelle hinzufügen:
<key>LSUIElement</key>
<true/>



Code:
set currentStatus to do shell script "pmset -a -g"
set toStar to offset of "*" in currentStatus
set currentProfile to characters (toStar - 2) through (toStar - 1) in currentStatus as string
if currentProfile is equal to "-1" then
	do shell script "pmset -c 2 -b 1 -u 1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 600"
	--display dialog "Set to Default PM Settings" giving up after 3 buttons {"OK"} default button 1

try
tell app "A" to launch
tell app "B" to quit
end try

else
	do shell script "pmset -a -1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 0"
	--display dialog "Set to Presentation Mode PM Settings" giving up after 3 buttons {"OK"} default button 1

try
tell app "B" to launch
tell app "A" to quit
end try

end if
 
Zurück
Oben Unten