Possiamo usare defaults
per memorizzare e leggere valori (digitare man defaults
in una finestra Terminal.app
per leggere ulteriori informazioni al riguardo).
Esegui Script 1
...
Script 1
global x
property defaultIdentifier : "com.chrome.scroll"
-- Since we start fresh lets reset x
resetX()
tell application "Google Chrome"
activate
set urlName to URL of active tab of front window
end tell
if urlName is "https://www.facebook.com" then
tell application "System Events"
tell application process "Google Chrome"
repeat while x = 0
set frontmost to true
key code 38
delay 1
my getX()
end repeat
end tell
end tell
else
tell application "System Events"
tell application process "Google Chrome"
repeat while x = 0
set frontmost to true
key code 49
delay 1
my getX()
end repeat
end tell
end tell
end if
on getX()
# Reading a value that does not exists will generate an error.
# Since this script creates (at launch) the value with "resetX()", this can only happen when someone
# deletes the defaults value while the script is running. (say, with "defaults delete 'com.chrome.scroll'").
try
set y to do shell script "defaults read" & space & quoted form of defaultIdentifier & space & "x"
# Because "x" is an integer but "do shell script" returns text, we want to convert "y" into an integer.
# This will throw an error if the value isn't an integer.
set y to y as integer # if this fails, "X" is left untouched since it goes straight into the "on error" part.
set x to y
on error
# To react to it, do something here.
# beep
end try
end getX
# When writing into the defaults, we can give a hint that "x" is an integer (using "-int").
# It would also work without it.
on resetX()
set x to 0
do shell script "defaults write" & space & quoted form of defaultIdentifier & space & "x" & space & "-int 0"
end resetX
... e interrompilo con Script 2
:
Script 2
property defaultIdentifier : "com.chrome.scroll"
do shell script "defaults write" & space & quoted form of defaultIdentifier & space & "x" & space & "-int 1"
Puoi anche eseguirlo direttamente in Terminal.app
o utilizzarlo in shell script
, in questo modo:
defaults write com.chrome.scroll x 1 # or:
defaults write com.chrome.scroll x -int 1
Note
Ho inserito set frontmost to true
nel ciclo repeat
poiché l'utente poteva attivare un'altra app mentre lo script è in esecuzione, il che farebbe confusione dell'intera faccenda.
Non abbiamo davvero bisogno di usare un property
per com.chrome.scroll
ma dal momento che il codice ha bisogno di quei dati in due punti e potresti volerlo cambiare, l'ho fatto in questo modo.
Se vuoi cambiarlo, usa qualcosa di unico, senza caratteri e spazi speciali. iTunes
, ad esempio, utilizza com.apple.iTunes
e Finder utilizza com.apple.Finder
. Di solito un application
usa il bundle identifier
come domain
per defaults
.