Scripte und Arbeitsabläufe verbessern

Fragen zu Mac OS X, OS 9 oder früher, Software / Hardware

Moderatoren: Tim, d/flt prod., Mods

Benutzeravatar
Stephan S
Super Tweaker
Beiträge: 14623
Registriert: 20 Okt 2005 - 16:43
Logic Version: 10
Wohnort: Märkische Schweiz
Kontaktdaten:

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von Stephan S »

root_himself hat geschrieben: 13 Feb 2022 - 2:47 Ich wollte das nur nicht unnötig kompliziert machen.
Das schätze ich sehr (hallo
Ich mach' das gleich mal.

Edit: Chrome weigert sich eine andere Größe anzunehmen als die mit der es beendet wurde, egal ob ich es beim Namen nenne oder nicht, oder direkt Größen angebe:

Code: Alles auswählen

set appLeft to "Google Chrome"
set appRight to "Numbers"
set viewportWidth to "1280"
set viewportHeight to "1440"
Aber auch diese Ansätze sind wahrscheinlich vergebene Liebesmüh' da die Breite eher so eingestellt wird dass Chrome so viel wie möglich bekommt, und das ist von Hand im Split ja sehr schön zu machen.
root_himself
Lebende Forenlegende
Beiträge: 1567
Registriert: 06 Okt 2006 - 16:15
Logic Version: 0
Wohnort: /bin/sh

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von root_himself »

Mhh…nen ähnliches Problem hatte ich mit ja Sublime Text. Das wollte nicht mit ‚set the bounds‘, dafür aber über das System Event. Vielleicht heißt der Prozess von Google Chrome nicht nicht „Google Chrome“? Der wird ja mit ‚ tell application process appLeft’ gerufen, wenn das ‚set the bounds’ nicht geht. Ich guck heute Abend mal. Nu muss ich mal in‘s Licht :roll: :mrgreen:
$> man women
$> Segmentation fault (core dumped)
Benutzeravatar
Stephan S
Super Tweaker
Beiträge: 14623
Registriert: 20 Okt 2005 - 16:43
Logic Version: 10
Wohnort: Märkische Schweiz
Kontaktdaten:

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von Stephan S »

Also für activate, load und quit hört es auf den Namen- wobei mir grad auffällt das sonst immer application davor steht.
Benutzeravatar
Stephan S
Super Tweaker
Beiträge: 14623
Registriert: 20 Okt 2005 - 16:43
Logic Version: 10
Wohnort: Märkische Schweiz
Kontaktdaten:

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von Stephan S »

Das hier fungoniert bisher am besten- die erste Schleife, Chrome zu beenden und dann wieder zu starten stellt sicher dass bereits (lt. Crome Prefs) ein leerer Tab geöffnet ist, sonst läuft komischerweise der Rest nicht.

Code: Alles auswählen

tell application "Google Chrome" to quit

delay 1

activate application "Google Chrome"

tell application "Google Chrome"
	if not (exists window 1) then reopen
		set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
			set bmURLs to URL of bookmark items of myBMFolder
				repeat with aUrl in bmURLs
					open location aUrl
						end repeat
end tell

tell application "System Events" to tell process "Google Chrome"
	set value of attribute "AXFullScreen" of window 1 to true
	
end tell

delay 1

tell application "Finder"
	activate
		open document file "xyz.numbers" of folder "xyz" of folder "xyz" of disk "xyz"

end tell
Btw. sind die Tabs so einigermaßen erträglich gesetzt?
root_himself
Lebende Forenlegende
Beiträge: 1567
Registriert: 06 Okt 2006 - 16:15
Logic Version: 0
Wohnort: /bin/sh

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von root_himself »

https://www.logicuser.de/forum/viewtopic.php?p=647583#p647583 hat geschrieben: Edit: Chrome weigert sich eine andere Größe anzunehmen als die mit der es beendet wurde, egal ob ich es beim Namen nenne oder nicht, oder direkt Größen angebe:
mhhh...ich hatte gestern wohl nicht den hellsten Augenblick. Jedenfalls enthielt mein Beispiel mit dem 50/50 Split groben Unfug u.A. bei der Einteilung der Größen...vermutlich werden einige deiner Probleme damit zusammenhängen.

Darüber hinaus war 'viewportWidth' als Variablenname für die gesamte Desktopbreite von mir offenbar missverständlich gewählt..du hast dort deine halbe Breite (1280) eingetragen, obwohl ich 2560 erwartet hätte. Ich vermute, dass du vermutetest, dass viewportWidth die Breite der App Wiederspiegeln soll..ist aber nur ne Vermutung ;). Dann wäre klar, warum die Größenanpassungen so garnicht hingehauen haben: Apps haben Mindestgrößen. Bei Numbers liegt die bei mir bei 800 in der Breite. Da du - aus Sicht des Beispiels - 1280 als "Gesamtbreite" deines Displays definiert hattest, hätte Numbers bei 640 Pixel enden sollen. Das tut Numbers - zumindest im Fileopen Dialog - nicht...es will dort grundsätzlich 800px bei mir.

Ich hab mir Chrome installiert um mal zu gucken wie und ob der sich positionieren lässt. Da sich sowohl Numbers als auch Google Chrome über die selbe Weise über "System Events" positionieren lassen, hab ich mein Beispiel dahingehend geändert. Das macht die Sacher nochmal einfacher zu verstehen. Zudem hantiere ich der Klarheit wegen nicht mit mehr Variablen, sondern habe die Werte direkt an der passenden Stelle eingetragen. Meine Breite beträgt 1920, meine Höhe 1200.

Folgendes tut bei mir

Code: Alles auswählen

tell application "Google Chrome"
	activate
	reopen
	tell application "System Events"
		set position of window 1 of application process "Google Chrome" to {0, 0}
		set size of window 1 of application process "Google Chrome" to {1100, 1200}
	end tell
end tell
tell application "Numbers"
	activate
	reopen
	tell application "System Events"
		set position of window 1 of application process "Numbers" to {1100, 0}
		set size of window 1 of application process "Numbers" to {820, 1200}
	end tell
end tell
Die Werte in den geschweiften Klammern bei 'set position of window' sind X-Achse und Y-Achse (in Pixel) für die Positionierung auf deinem Desktop. 0 Punkt ist oben links. Die Werte in den geschweiften Klammern bei 'set size of window' sind Breite und Höhe (in Pixel), die das Fenster bekommen soll.

Ich fand keinen Weg, Mindestgrößen anzufragen. Das gestaltet sich sicher auch schwer, da es ja vom Window und seiner Funktion abhängt (eine Tabelle in Numbers könnte eine andere Mindestgröße haben als ein File Dialog...wie auch immer, ist ja nur akademisch, weil's eben kein Fullscreen Split macht.
Stephan S hat geschrieben: 13 Feb 2022 - 13:05 Das hier fungoniert bisher am besten- die erste Schleife, Chrome zu beenden und dann wieder zu starten stellt sicher dass bereits (lt. Crome Prefs) ein leerer Tab geöffnet ist, sonst läuft komischerweise der Rest nicht.

Code: Alles auswählen

tell application "Google Chrome" to quit

delay 1

activate application "Google Chrome"

tell application "Google Chrome"
	if not (exists window 1) then reopen
		set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
			set bmURLs to URL of bookmark items of myBMFolder
				repeat with aUrl in bmURLs
					open location aUrl
						end repeat
end tell

tell application "System Events" to tell process "Google Chrome"
	set value of attribute "AXFullScreen" of window 1 to true
	
end tell

delay 1

tell application "Finder"
	activate
		open document file "xyz.numbers" of folder "xyz" of folder "xyz" of disk "xyz"

end tell
Ein neues "leeres" Tab in deinem Chrome könntest du auch mit

Code: Alles auswählen

tell front window to make new tab with properties {URL:"about:blank"}
erzeugen. Das wäre vielleicht auch gut in deinem repeat um sicher zu stellen, dass wirklich Tabs und nicht neue Fenster erzeugt werden.

- Ist es wirklich nötig Chrome zu quitten?
- Ist es wirklich nötig, 'reopen' an die Bedingung zu knüpfen, dass noch kein Fenster da ist?
- Ich würde das activate und reopen bedingungslos in den tell application "Google Chrome" block ziehen. Das reopen erzeugt auf jeden Fall ein Fenster mit einem Tab (bei mir).
- Den tell application "System Events" mit deinem Fullscreen könntest du direkt in den tell application "Google Chrome" Block umeziehen. Das gehört ja zusammen.

Also insgesamt vielleicht so:

Code: Alles auswählen

tell application "Google Chrome"
	activate
	reopen
	set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
	set bmURLs to URL of bookmark items of myBMFolder
	repeat with aUrl in bmURLs
		tell front window to make new tab with properties {URL:aUrl}
	end repeat
	tell application "System Events"
		set value of attribute "AXFullScreen" of window 1 to true
	end tell
end tell

delay 1

tell application "Finder"
	activate
	open document file "xyz.numbers" of folder "xyz" of folder "xyz" of disk "xyz"
end tell
Wobei ich mich frage, warum der Finder das Dokument öffnen soll und du das nicht mit Numbers tust. Das hat ja auch einen File Open:

Code: Alles auswählen

tell application "Numbers"
	activate
	open "/xyz/xyz/xyz.numbers"
end tell
Dann könntest du sogar direkt mit unterschiedlichen Sheets in dem File agieren.
Stephan S hat geschrieben: 13 Feb 2022 - 13:05 Btw. sind die Tabs so einigermaßen erträglich gesetzt?
nicht ganz. Man versucht mit den Einrückungen zum einen eine Hierarchie abzubilden, zum anderen Blöcke zu erzeugen die einem Beginn und Ende eines "tell..end tell" oder "repeat...end repeat" in der vertikalen optisch klar hervorheben. Ich nehm direkt den ersten Block von dir:

Code: Alles auswählen

tell application "Google Chrome"
	if not (exists window 1) then reopen
		set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
			set bmURLs to URL of bookmark items of myBMFolder
				repeat with aUrl in bmURLs
					open location aUrl
						end repeat
end tell
Beim Lesen entsteht der Eindruck, als würde dein zweites 'set' ein Kind von dem Ersten sein, also einen "Erfolg" des ersten voraussetzen. Dto. für das 'repeat' in Bezug auf das zweite 'set'. Das erste 'tell..end tell' ist auf einer ebene, dann hast du aber begonnen, jedes einzelne Kommando einzurücken. "Richtig" wäre:

Code: Alles auswählen

tell application "Google Chrome"
	if not (exists window 1) then reopen
		set myBMFolder to bookmark folder "xyz" of bookmark folder "xyz"
		set bmURLs to URL of bookmark items of myBMFolder
		repeat with aUrl in bmURLs
			open location aUrl
		end repeat
end tell
Du siehst beim Lesen und vertikalen scannen sofort, dass tell..if...set+set+repeat+open die Abfolge ist. Das ist auch die Formatierung, die dir dein Scripteditor automagisch macht sofern du auf das Hämmerchen klickst oder den Code einmal ausführst.

Wie breit (in Zeichen gemessen) nun genau 1 Tab ist, ist relativ. Häufigste Variante 1 Tab == 4 Spaces. Manche stehen auch auf 1 Tab == 2 Spaces. It depends...
$> man women
$> Segmentation fault (core dumped)
Benutzeravatar
Stephan S
Super Tweaker
Beiträge: 14623
Registriert: 20 Okt 2005 - 16:43
Logic Version: 10
Wohnort: Märkische Schweiz
Kontaktdaten:

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von Stephan S »

root_himself hat geschrieben: 14 Feb 2022 - 2:32 du hast dort deine halbe Breite (1280) eingetragen, obwohl ich 2560 erwartet hätte. Ich vermute, dass du vermutetest, dass viewportWidth die Breite der App Wiederspiegeln soll..ist aber nur ne Vermutung ;)
Stimmt- ich wollte mir die Variablen ersparen und auf absolute Werte gehen. Das allerdings erst nachdem deine Beispiele nicht gelaufen sind.

root_himself hat geschrieben: 14 Feb 2022 - 2:32 Folgendes tut bei mir

Code: Alles auswählen

tell application "Google Chrome"
	activate
	reopen
	tell application "System Events"
		set position of window 1 of application process "Google Chrome" to {0, 0}
		set size of window 1 of application process "Google Chrome" to {1100, 1200}
	end tell
end tell
tell application "Numbers"
	activate
	reopen
	tell application "System Events"
		set position of window 1 of application process "Numbers" to {1100, 0}
		set size of window 1 of application process "Numbers" to {820, 1200}
	end tell
end tell
Bei mir auch

root_himself hat geschrieben: 14 Feb 2022 - 2:32 - Ist es wirklich nötig Chrome zu quitten?
- Ist es wirklich nötig, 'reopen' an die Bedingung zu knüpfen, dass noch kein Fenster da ist?
- Ich würde das activate und reopen bedingungslos in den tell application "Google Chrome" block ziehen. Das reopen erzeugt auf jeden Fall ein Fenster mit einem Tab (bei mir).
- Den tell application "System Events" mit deinem Fullscreen könntest du direkt in den tell application "Google Chrome" Block umeziehen. Das gehört ja zusammen.
- sicher nicht, für mein überschaubares Verständnis war es die einfachste Methode sicherzustellen dass die Ausgangssituation immer dieselbe ist.
- Die Bedingung ist sicherlich absurd, aber der Prozess stoppte wenn die Zeile weg war
- wird probiert
- ja, wenn denn Fullscreen bleibt
root_himself hat geschrieben: 14 Feb 2022 - 2:32 Wobei ich mich frage, warum der Finder das Dokument öffnen soll und du das nicht mit Numbers tust. Das hat ja auch einen File Open:
Gut denn...

root_himself hat geschrieben: 14 Feb 2022 - 2:32
Stephan S hat geschrieben: 13 Feb 2022 - 13:05 Btw. sind die Tabs so einigermaßen erträglich gesetzt?
Beim Lesen entsteht der Eindruck, als würde dein zweites 'set' ein Kind von dem Ersten sein, also einen "Erfolg" des ersten voraussetzen.
Dto. für das 'repeat' in Bezug auf das zweite 'set'. Das erste 'tell..end tell' ist auf einer ebene, dann hast du aber begonnen, jedes einzelne Kommando einzurücken.
Du siehst beim Lesen und vertikalen scannen sofort, dass tell..if...set+set+repeat+open die Abfolge ist. Das ist auch die Formatierung, die dir dein Scripteditor automagisch macht sofern du auf das Hämmerchen klickst oder den Code einmal ausführst.
Ah, ich beginne zu kapieren. Dass ein 'Kind' nur das ist was den Erfolg der Zeile darüber voraussetzt ist so Programmiererwissen das mir bis jetzt offensichtlich völlig verborgen war.
Ja, nee, Scripteditor hab' ich nicht benutzt, sondern gleich alles in die Alfred Prefs geschrieben, so nach dem Motto "guckste eh nie wieder rein". Eine föllig falsche Einschätzung (uiuiui)
root_himself
Lebende Forenlegende
Beiträge: 1567
Registriert: 06 Okt 2006 - 16:15
Logic Version: 0
Wohnort: /bin/sh

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von root_himself »

Die Sache mit der Einrückung ist in Applescript (und vielen anderen sprachen) zwar nur Optik- hat also keinen Einfluss auf die Funktion des Codes. Aber man ist gut beraten eine Variante zu wählen die einem selbst transparent macht was wozu gehört. Andere Sprachen benutzen oft Klammern jeglicher Art um Zusammenhänge zu definieren.

Ich erwähne abermals *Python* als Gegenentwurf zu „Klammern als Codeblock“. Dort ist die Einrückung (Spaces ODER Tab je Datei,…niemals Mixed) Bestandteil der Programmlogik. Das ist gerade am Anfang total hilfreich. Man kann quasi keinen funktionierenden Code mit „falscher“ Einrückung erzeugen. Man kann beim einrücken auch *nicht* Tabs und Spaces mischen. Macht Sinn, weil ein Tab in der "Breite" nicht definiert ist, ein Space hingegen schon. Ordentliche Editoren zeigen einem genau an was Sache ist. Tabs oder Spaces lassen sich meist irgendwie anzeigen., häufig gibt es automagisches Ersetzen von "Tab" zu "n-Spaces" in der Form, dass automagsich n-Spaces eingefügt werden wenn du Tab drückst. Meiner Wahrnehmung nach ist Spaces deutlich verbreiteter als Tabs. Wichtig ist nur, dass du mindestens innerhalb einer Datei konsistent bleibst...deine Einrückung geht sonst zwangsläufig in die Brüche wenn's jemand anders liest. Siehste ja schon im "Code" Block hier im Forum. Dein Tab ist hier viel "Breiter" als im Applescript Editor.

Ausflug:
Wenn man mit anderen Code teilt macht es Sinn, sich an Konventionen zu halten. Aber man gewöhnt sich schon aus eigenem Interesse daran, weil man irgendwann den eigenen Code nicht mehr versteht. Das trifft gleichermaßen auf Funktionen/Eventhandler gegen Redundanzen zu. Ist im Grunde auch nix anderen als „Trigger“ und das Ausführen bestimmter Aktionen bei auftreten dieses triggers aus der Musik/Midiwelt. Es ist -je nach Sprache - egal wo du deine Funktionen/Eventhandler im Code plazierst - allgemein wird das oben/vorne gemacht. Du wirst beim Lesen von fremden Code recht oft dieses Muster vorfinden (in der Sprachwelt in der wir uns gerade bewegen)

1. Kurzer Kommentar zu "Wer" ist Maintainer, "Was" tut das Ding und "Welche" Lizenz gilt
2. Definition von Konstanten, also zur Laufzeit unveränderlichen Variablen und deren Werte
3. Funktionen/Eventhandler
3. "Main"...also das Programm als solches...das ruft die in 3. definierten Funktionen / Eventhandler auf und agiert anhand der ERgebnisse die sie zurückgeben
$> man women
$> Segmentation fault (core dumped)
Benutzeravatar
Stephan S
Super Tweaker
Beiträge: 14623
Registriert: 20 Okt 2005 - 16:43
Logic Version: 10
Wohnort: Märkische Schweiz
Kontaktdaten:

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von Stephan S »

Jo- ich habe ab Sommer 2020 als Versuch einer Neuorientierung Paul McWhorters Youtube Tutorials für Aruino durchgerattert, mit der Frage ob mich Programmieren irgendwie begeistern könnte.
Bin dann mit Hilfe eines Freundes (der auch Python sehr mag) schließlich bei einem Midi Controller gelandet, bevor ich beschlossen habe dass das nicht wirklich etwas für mich ist und ich lieber auf Dinge zurückgreife die ich bereits kann.
Daher seitdem meine Sales Bemühungen für die Mixdienste. Zumindest ist aber die Hemmschwelle für an sich einfache Dinge nun etwas niedriger.
Zuletzt geändert von Stephan S am 14 Feb 2022 - 20:27, insgesamt 1-mal geändert.
root_himself
Lebende Forenlegende
Beiträge: 1567
Registriert: 06 Okt 2006 - 16:15
Logic Version: 0
Wohnort: /bin/sh

Re: Scripte und Arbeitsabläufe verbessern

Beitrag von root_himself »

Dem Video würde ein ordentlicher Ton- und Aufnahmetechniker gut tun. Alleine _das_ muss eine Qual für dich gewesen sein. :mrgreen:
$> man women
$> Segmentation fault (core dumped)
Antworten