Una estancia-abrir la aplicación (Votación)
Aunque esta pregunta ya ha sido marcado como tener una solución satisfactoria, estoy obligado a proporcionar una alternativa. Estoy totalmente de acuerdo con @TJ Luoma, que ha proporcionado, lo que creo que es, con mucho, la solución óptima, teniendo en cuenta que la Estancia Abrir la aplicación que de las encuestas para los nombres de disco cada 5 segundos, y tiene que llamar a una aplicación externa para hacer esto, es que no la forma de abordar este problema. Es ineficiente, uso intensivo de los recursos, y totalmente engorroso tener un applet de vivir permanentemente en el dock, o incluso sólo de forma invisible en segundo plano, la realización de una única función en una forma terrible, cuando macOS tiene incorporado un medio para controlar el archivo de los eventos del sistema, y un gerente de servicio para responder a estos eventos y realizar tareas en forma programada y eficiente.
launchd
TJ Luoma del método tiene la ventaja de launchd
a resolver el problema en lo que es, hasta donde yo soy consciente, de la manera recomendada. Monitorea los cambios en el /Volumes
folderpath, y actúa en consecuencia. Es el método que yo elegiría y sé que no tiene que preocuparse acerca de lo que estaba pasando detrás de las escenas.
Acciones De Carpeta
Algunos podrían no ser conscientes de que macOS las Acciones de Carpeta también se puede monitorear el /Volumes
carpeta, y si AppleScript se siente más en casa a alguien que un .plist
y un script de shell, entonces esta solución puede ser más atractivo. Hasta donde yo soy consciente, de acciones de carpeta ejecuta como un proceso en launchd
, por lo que aunque operan abiertamente en diferentes formas para el usuario, los mecanismos subyacentes son, posiblemente, el mismo, o similar, y no es probable para ver cualquiera de las diferencias de rendimiento entre los dos.
La aplicación
La configuración es muy fácil, incluso si usted no lo ha hecho antes. Esto supone dos pasos:
-
Guarde el siguiente AppleScript, dándole el nombre de cualquier cosa que usted desea, y guardarlo en la Carpeta de secuencias de comandos de Acción carpeta que se encuentra en ~/Library/Scripts/Folder Action Scripts
. Me salvó la mía como una llanura .applescript
archivo de texto usando el Editor de secuencias de Comandos, y nombró New Volume Mounted.applescript
:
property diskName : "Media" -- whatever the disk is named
property _objRef : a reference to reference
script disks
property path : missing value
property kind : "public.volume"
property list : missing value
on _get(mountPoints)
local mountPoints
set my list to mountPoints
tell application id "com.apple.systemevents" to ¬
repeat with fURL in (a reference to my list)
if fURL's type identifier = my kind ¬
then set fURL's contents to ¬
the disk named fURL
end repeat
return every reference in my list
end _get
on _eval(key)
if my list = missing value then return
tell application id "com.apple.systemevents"
tell {}
repeat with _disk in (a reference to my list)
set _objRef to _disk
set the end to contents of the key
end repeat
return it
end tell
end tell
end _eval
end script
on adding folder items to mountedVolumes after receiving mountPoints
local mountedVolumes, mountPoints
disks's _get(mountPoints)
set propertyKey to a reference to the name of my _objRef
set disknames to disks's _eval(propertyKey)
if the diskname is in the disknames then exec()
end adding folder items to
on removing folder items from mountedVolumes after losing diskNames
local mountedVolumes, diskNames
-- display alert "Disk removed: " & diskNames
end removing folder items from
on exec()
-- display alert "Disk attached"
run application id "com.apple.iTunes"
end exec
-
Hay un método convencional a la par de una carpeta de secuencia de comandos de acción con una carpeta vigilada, pero por lejos el más simple† es copiar y pegar el siguiente script en el Editor de secuencias de Comandos y, si es necesario, edite la tercera línea de la declara property script
. Esto quiere tener el mismo nombre (con la extensión de archivo) como su secuencia de comandos anterior. Si usted eligió el mismo nombre que se hizo en el primer paso, no es necesario realizar ningún ajuste en absoluto. Simplemente ejecutar la secuencia de comandos y todo va a ser establecido, teniendo un efecto inmediato. No hay necesidad de guardar este script, y no es necesario reiniciar el equipo.
use sys : application id "com.apple.systemevents"
property path : "/Volumes"
property script : "New Volume Mounted.applescript"
property name : a reference to the name of folder path
property folder action : a reference to folder action named (my name)
property folder : a reference to Folder Action scripts folder
property file : a reference to the file named (my script) in my folder
set folder actions enabled to true
if not (my file exists) then return open my folder
tell my folder action
if (exists) then return its scripts
make new folder action with properties my {name:name, path:path}
make new script with properties my file's ¬
{name:name, POSIX path:POSIX path}
set [its enabled, its scripts's enabled] to [true, true]
end tell
†Esta secuencia de comandos sólo se ha probado en la Alta Sierra
Postscript
La secuencia de comandos en el paso 1 de arriba es uno que escribí hace un tiempo como una generalizada de secuencia de comandos que aquellos que se sienten cómodos con AppleScript puede fácilmente adaptar y ampliar para realizar cualquiera de las tareas que uno desea, y ya tenemos disponible una lista de todos los nuevos puntos de montaje creado en /Volumes
en la forma de una lista validada de disk
objetos.
Es, sin embargo, en realidad más de lo que es necesario para esta tarea a la mano. Usted es bienvenido a pegarse a él, y debería funcionar bien. Pero, si usted prefiere un simple script, entonces esto a continuación se realiza exactamente la misma función que el anterior, pero con toda la grasa recortada:
property diskName : "Media" -- whatever the disk is named
property path : "/Volumes"
property diskVolumePath : [path, "/", diskName, "/"] as text
on adding folder items to mountedVolumes after receiving mountPaths
local mountedVolumes, mountPoints
repeat with mountPath in mountPaths
set mountPath's contents to ¬
mountPath's POSIX path
end repeat
if the mountPaths contains the diskVolumePath then exec()
end adding folder items to
on removing folder items from mountedVolumes after losing diskNames
local mountedVolumes, diskNames
-- display alert "Disk removed: " & diskNames
end removing folder items from
on exec()
-- display alert "Disk attached"
run application id "com.apple.iTunes"
end exec