OS X: Especificación de la invocación de línea de comando personalizada del programa como aplicación para abrir archivos con doble clic

Soy principalmente un usuario de Linux que recientemente adquirió una MacBook Air y actualmente estoy tratando desesperadamente de averiguar si existe un equivalente para los archivos de definición de escritorio de Linux, donde puede definir una aplicación mediante su invocación de línea de comando, con un marcador de posición opcional para el archivo que X11 le pasará cuando se haga doble clic en un archivo del tipo de archivo asociado con esa aplicación.

Por ejemplo, en Linux, puedo configurar .txtarchivos para que se abran con una invocación de línea de comando específica de emacsclientla siguiente manera:

emacsclient -c -a "" %f

¿Dónde %festá el marcador de posición que será reemplazado por la ruta al archivo real en el que haga doble clic? (En general, los administradores de archivos de Linux le permiten especificar esta línea de comando en la ventana Información del archivo).

¿Hay alguna manera simple de lograr esto en OS X? Intenté jugar con AppleScript, así como con Google para encontrar una solución, pero fue en vano. Probablemente todavía necesite desarrollar mi conocimiento y vocabulario relacionados con la tecnología de Apple, para poder hacer las preguntas correctas con las palabras correctas, así que tengan paciencia conmigo...

¿Qué comando desea aplicar al archivo?
¿Quiere manejar un archivo dado , o todos los archivos que tengan un sufijo dado ?
Cuando hago doble clic en un archivo en Finder, quiero que la línea de comando dada se ejecute con el archivo en el que se hizo doble clic como argumento. Por ejemplo, si hago clic foo.txten mi carpeta de inicio, quiero emacsclient -c -a "" ~/foo.txtque se ejecute. Pero creo que he encontrado una solución con la que estoy feliz usando los flujos de trabajo de Automator (vea mi segundo comentario a la respuesta de Stephen S), excepto por esa molesta rueda dentada giratoria que indica un flujo de trabajo en ejecución en la bandeja, eso es. ¡Gracias!
Por cierto, si desea asociar un script de shell con un esquema de URL personalizado, eche un vistazo a Lincastor

Respuestas (2)

AppleScript es tu amigo.

En el  Editor de AppleScript , cree un nuevo script, con el siguiente código fuente:

(* This script is destined to be saved as an application droplet. It will process the items dropped onto it. *)

-- This routine processes the dropped item(s)
on open theDroppedItems
  repeat with i from 1 to the count of theDroppedItems
    set aDroppedItem to item i of theDroppedItems
    processItem(aDroppedItem)
  end repeat
end open

-- This routine processes an item
on processItem(anItemToProcess)
  set pathUnix to POSIX path of anItemToProcess
  set pathUnixQuoted to quoted form of pathUnix
  -- Here you make your shell command !
  set commandToRun to "cat " & pathUnixQuoted
  do shell script commandToRun
end processItem

Para el comando de shell, adapte el commandToRuna sus deseos.

Guarde el guión. En el cuadro de diálogo Guardar  :

  • Nombre el script  OpenItems .
  • Coloque el guión en el lugar que desee; por ejemplo, puede colocar el script en  /Aplicaciones .
  • Elija el formato:  Aplicación .
  • Deje las dos casillas de verificación sin marcar.

En el código fuente, observe la construcción  on open theDroppedItems. Este tipo de AppleScript se llama gota . Mire el icono de la aplicación  OpenItems que ha guardado. La flecha grande en él muestra que es una gota. Significa que la aplicación acepta elementos colocados en ella.

Ahora, arrastre y suelte el archivo que desee en la aplicación  OpenItems . Esto lanzará el comando con su archivo.

El siguiente paso es asociar los archivos con el droplet. Seleccione el archivo que desee y presione  Apple I (   I ) para obtener información. En  Abrir con , elija la aplicación  OpenItems . Esto asociará el archivo con la gota. Entonces, cuando haga doble clic en el archivo, el archivo se abrirá con el droplet  OpenItems y se ejecutará el comando de shell para el archivo. Si desea esto para todos los archivos del mismo tipo, haga clic en el botón  Cambiar todo...

He probado esta solución en Mavericks. Funciona.

Gracias por el extenso ejemplo elaborado en AppleScript, ¡definitivamente me ayudó a ampliar mis horizontes (no sabía nada sobre las gotas antes)! Ya tengo una solución ligeramente diferente con los flujos de trabajo de Automator, pero esta puede ser más limpia/simple, así que también la investigaré.

Que yo sepa, no hay nada para ejecutar automáticamente ningún script en doble script (lo más probable es que esté equivocado). La mejor solución que he encontrado es Automator. Está preinstalado. Desea crear un servicio, que colocará scripts en un menú contextual (haciendo clic con el botón derecho en el archivo). Para sus acciones, desea encontrar la acción "Ejecutar script de Shell". Desde allí, puede hacer que reciba información del Finder, como rutas de archivos y rutas de directorios. Si pasa la entrada a stdin, la variable que usará en el script de shell es $@.

if [[ ! -d "$@" ]]
then
    emacsclient -c -a "" $@;
    exit
fi

No sé si ese guión es del todo correcto, pero debería ponerte en el camino correcto.

¡Gracias, eso es millas más cerca de lo que nunca estuve! Aún así, esperaré un poco antes de marcar la respuesta como aceptada, para ver si alguien encuentra una solución como se describió originalmente. Me encantaría votar, pero desafortunadamente, no tengo suficiente representante... :(
¡En realidad, estuviste muy cerca! Logré improvisar una solución usando Automator y Run Shell Script, pero guardando el flujo de trabajo como una aplicación con la opción "Pasar entrada: como argumentos", como se describe en la respuesta a esta publicación . ¿Quiere agregar esto a su solución para que pueda marcarlo como aceptado? Si no lo hace, publicaré una respuesta propia junto con el enlace.