Podemos utilizar defaults
para almacenar y leer valores (tipo man defaults
en un Terminal.app
para leer más al respecto).
Ejecutar 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
y detenerlo 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"
También se puede ejecutar directamente en Terminal.app
o utilizarlo en un shell script
así:
defaults write com.chrome.scroll x 1 # or:
defaults write com.chrome.scroll x -int 1
Notas
Puse el set frontmost to true
en el repeat
ya que el usuario podría activar otra app mientras el script se está ejecutando, lo que estropearía todo.
Realmente no necesitamos usar un property
para com.chrome.scroll
pero como el código necesita esos datos en dos lugares y es posible que quieras cambiarlos, lo hice así.
Si quieres cambiarlo, utiliza algo único, sin caracteres especiales ni espacios. iTunes
, por ejemplo, utiliza com.apple.iTunes
y Finder utiliza com.apple.Finder
. Así que normalmente un application
está utilizando su bundle identifier
como domain
para el defaults
.