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 .txt
archivos para que se abran con una invocación de línea de comando específica de emacsclient
la siguiente manera:
emacsclient -c -a "" %f
¿Dónde %f
está 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...
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 commandToRun
a sus deseos.
Guarde el guión. En el cuadro de diálogo Guardar :
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.
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.
Nicolás Barbulesco
Nicolás Barbulesco
dlukes
foo.txt
en mi carpeta de inicio, quieroemacsclient -c -a "" ~/foo.txt
que 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!sergei