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

4

Soy principalmente un usuario de Linux que adquirió recientemente un MacBook Air y actualmente estoy intentando desesperadamente 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 comandos, 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 los archivos .txt para que se abran con una invocación específica de la línea de comandos de emacsclient así:

emacsclient -c -a "" %f

donde %f es el marcador de posición que se reemplazará por la ruta al archivo real en el que haces doble clic. (En general, los administradores de archivos de Linux le permiten especificar esta línea de comando en la ventana Información de archivo).

¿Hay alguna forma sencilla de lograr esto en OS X? He intentado juguetear con AppleScript, así como con Google en busca de una solución, pero fue en vano. Probablemente todavía necesite aumentar mi conocimiento y vocabulario relacionado con la tecnología de Apple, para poder hacer las preguntas correctas con las palabras correctas, así que, por favor, tengan paciencia conmigo ...

    
pregunta dlukes 20.06.2014 - 21:15

2 respuestas

1

AppleScript es tu amigo.

En el AppleScript Editor , 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 commandToRun a sus deseos.

Guarda el script. En el cuadro de diálogo Guardar :

  • Nombra el script OpenItems .
  • Coloque el script 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, observa la construcción on open theDroppedItems . Este tipo de AppleScript se llama una gota .

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

El siguiente paso es asociar el (los) archivo (s) con el droplet. Seleccione el archivo que desea y presione Apple I ( I ) para obtener información. En Abrir con , elija la aplicación OpenItems . Esto asociará el archivo con la gota. Por lo tanto, 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.

    
1

Que yo sepa, no hay nada para ejecutar automáticamente cualquier secuencia de comandos en doble secuencia de comandos (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á los 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 de Finder, como las rutas de archivos y las de directorio. 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 script es completamente correcto, pero debería ponerte en el camino correcto.

    
respondido por el Stephen S 20.06.2014 - 22:12

Lea otras preguntas en las etiquetas