5 votos

¿Es posible escribir qué aplicaciones deberían abrir ciertas extensiones de archivo?

Tengo un nuevo Macbook Pro y me recuerda que mi entorno de desarrollo no se adapta a lo que tengo que instalar en mi anterior Macbook. Estaba curioso por saber si es posible crear una secuencia de comandos en AppleScript o Bash que puedo, que puedo definir en qué formato de archivo debe ser designa como el Open with aplicación, para todas las aplicaciones que normalmente uso.

Por ejemplo, cuando un archivo es clic con el botón derecho, Obtener Información, Abrir con HTML que se establece como Safari. Sé que puedo manualmente ir a Abrir Con y seleccione el Código de Visual Studio, pero me gustaría escribir algo que va a cambiar todos los archivos de todo el sistema.

Es esto posible? Cómo hacer que tu objetivo de Abrir Con aplicación?

4voto

Prado Puntos 261

Hasta donde yo sé, todas las asociaciones de archivos están definidos en el launchservices.seguro.plist archivo.

Para macOS Mojave/Catalina este archivo se encuentra en:

~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist

Usted puede leer el contenido del archivo mediante:

defaults read ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist

Este comando de salida en el terminal el contenido del archivo, que tiene cada aplicación asociada con los tipos de archivo correspondientes.

Ejemplo de salida:

$ defaults read ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist

{
    LSHandlers =     (
                {
            LSHandlerContentType = "public.3gpp";
            LSHandlerPreferredVersions =             {
                LSHandlerRoleAll = "-";
            };
            LSHandlerRoleAll = "com.colliderli.iina";
        },
                {
            LSHandlerContentType = "org.7-zip.7-zip-archive";
            LSHandlerPreferredVersions =             {
                LSHandlerRoleViewer = "-";
            };
            LSHandlerRoleViewer = "com.aone.keka";
        },
                {
            LSHandlerPreferredVersions =             {
                LSHandlerRoleAll = "-";
            };
            LSHandlerRoleAll = "com.apple.dt.xcode";
            LSHandlerURLScheme = xcpref;
        },
                {
            LSHandlerContentType = "public.html";
            LSHandlerPreferredVersions =             {
                LSHandlerRoleAll = "-";
            };
            LSHandlerRoleAll = "com.apple.safari";
        }
    );
}

No tengo respuesta a tu pregunta ahora, pero este es el punto de partida para mirar y entender cómo los parámetros de obras, y después de la prueba y averiguar lo que ocurría podemos ampliar esta información con los detalles completos y algunos ejemplos de editar versiones de trabajo.


Pero para la situación específica, teniendo en cuenta el caso de la fabricación de un tipo de plantilla sólo para replicar, (o para conservarla como una copia de seguridad):

Sugiero que usted puede personalizar manualmente un sistema de la manera que usted desea, por medios tradicionales Buscador de asociaciones del archivo de métodos, y una vez está bien, guardar ese .plist archivo, entonces se puede reemplazar .plist archivo en el nuevo sistema, o en el nuevo perfil de usuario, y [reinicio?, cierre de sesión?, o matar buscador?] y de inicio de sesión de nuevo, y esto debería ser suficiente para que las asociaciones de ser replicado y listo.

[Los comentarios y las ediciones son bienvenidos]

2voto

Chris Norman Puntos 46

Hay una aplicación de línea de comandos que puede hacer esto para usted, se llama Duti y está disponible en https://github.com/moretension/duti . He compilado una versión de Duti el uso de Macports, y luego soltó la utilidad en la carpeta de Recursos dentro de una secuencia de comandos de la aplicación de contenedor, y el uso de un script de shell". Lo he probado en varias máquinas en el trabajo y funciona todo el tiempo!.

Aquí está mi código para el uso de Duti:

try
    tell application "Finder"
        set icon_path to (container of (path to me) as alias)
        set temp_path to POSIX path of (container of (path to me) as alias)
        set current_path to temp_path & "ChangeDefaultAdobeApps.app/Contents/Resources/"
        set iconPath to (icon_path & "ChangeDefaultAdobeApps.app:Contents:Resources:adobe_apps_software_icon_512.icns" as string) as alias
    end tell

    set jpgScript to current_path & "duti" & space & " -s com.adobe.Photoshop public.jpeg all"
    do shell script jpgScript
    set pdfScript to current_path & "duti" & space & "-s com.adobe.Acrobat.Pro com.adobe.pdf all"
    do shell script pdfScript
    set tiffScript to current_path & "duti" & space & " -s com.adobe.Photoshop public.tiff all"
    do shell script tiffScript
    display dialog "Settings Changed!" buttons {"OK"} default button "OK" with icon iconPath
on error
    display dialog "Something Went Wrong" buttons {"Cancel"} default button "Cancel" with icon 0
end try

1voto

red_menace Puntos 111

Una aplicación registra los tipos de elementos a los que se puede manejar por poner entradas en su Información.plist. El CFBundleDocumentTypes clave es una matriz de entradas del diccionario que describe los tipos de documento (nombre, icono, papel, etc - ver la Información de la Lista de propiedades Clave de Referencia). Por ejemplo, una aplicación que uso para proporcionar un par de documento personalizado de iconos tiene estas entradas:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFile</key>
        <string>ruby-script_Icon</string>
        <key>CFBundleTypeName</key>
        <string>Ruby Source</string>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.ruby-script</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeIconFile</key>
        <string>property-list_Icon</string>
        <key>CFBundleTypeName</key>
        <string>Property List</string>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.apple.property-list</string>
        </array>
    </dict>
</array>

La app es un proxy de la aplicación de destino y se crea copiando el siguiente script en el Editor de secuencias de Comandos y el ahorro como una aplicación, a continuación, copiar el icono de los recursos y la edición de su Información.plist. Realmente no hacer nada, pero los archivos abiertos en la aplicación que yo quiero (BBEdit en este caso), pero usted también puede realizar otras rutinas de instalación:

on open droppedItems
    -- perform setup or whatever
    set args to ""
    repeat with anItem in droppedItems
        set args to args & quoted form of (POSIX path of anItem) & " "
    end repeat
    do shell script "open -b com.barebones.bbedit " & args
end open

A partir de ahí, sólo tiene que utilizar el Buscador de la Obtener Información de la ventana para hacer que el proxy de la aplicación la aplicación por defecto para los tipos de archivo. El uso de este enfoque puede asignar iconos personalizados, con doble-clic y arrastre las operaciones que abrir el documento(s) como de costumbre, sin tener que modificar la aplicación de destino.

1voto

wch1zpink Puntos 11

Yo suelo evitar la GUI de secuencias de comandos como la peste, pero para este proyecto he tenido que recurrir a la GUI de secuencias de comandos en la segunda mitad del código. Guardar este siguiente AppleScript código de la aplicación. Haga doble clic en este icono de la aplicación en el Finder no hará nada. En resumen, cualquier archivo que desee cambiar su aplicación por defecto para, de esos tipos de archivo, sólo tienes que arrastrar y soltar el archivo en esta Gota del icono y se le dará la opción de elegir una nueva aplicación como la aplicación por defecto para los tipos de archivo.

Este AppleScript código me funciona con la última versión de macOS Mojave.

on open of droppedItems
    --  Executed when files are dropped on the script
    repeat with thisFile in droppedItems
        activate
        set chosenApp to (choose application with prompt ¬
            "Choose  Your Preferred Default Application" as alias)
        tell application "System Events"
            set default application of thisFile to chosenApp
            set fileName to name of thisFile
        end tell
        tell application "Finder"
            if locked of thisFile is true then set locked of thisFile to false
            activate
            repeat until frontmost
                delay 0.1
            end repeat
            reveal thisFile
        end tell
        delay 0.1
        tell application "System Events"
            keystroke "i" using {command down}
            repeat until button "Change All…" of scroll area 1 of window ((fileName & " Info") as text) of application process "Finder" exists
                delay 0.2
            end repeat
            delay 0.1
            click button "Change All…" of scroll area 1 of window ((fileName & " Info") as text) of application process "Finder"
            delay 0.2
            if exists of button "Continue" of window 1 of application process "Finder" then
                --click button "Continue" of window 1 of application process "Finder"
                keystroke return
                delay 0.1
                keystroke "w" using {command down}
            else
                keystroke "w" using {command down}
            end if
        end tell
    end repeat
end open

Esta animación es un ejemplo de mí arrastrando una .png en el AppleScript Gota del icono. La aplicación predeterminada para abrir .los archivos png en mi equipo fue vista previa.aplicación ad arrastrando una .png en el AppleScript Gota del icono... yo era capaz de cambiar la aplicación predeterminada para abrir TODAS las .los archivos png de Photoshop

enter image description here

Puede que necesite cambiar los valores de retardo en el código, para que funcione correctamente en su sistema.

No te olvides de conceder permisos de acceso en las Preferencias del Sistema para permitir el subprograma de control de su sistema.

enter image description here

enter image description here

enter image description here

1voto

qarma Puntos 71

Usted puede comprobar fuera de mi respuesta a una pregunta similar.

El saliente, guión, parte de ella es un JavaScript Para la Automatización (JXA) secuencia de comandos que puede cambiar la aplicación predeterminada para todos los archivos de un determinado identificador de tipo uniforme. Se puede ejecutar en el Editor de secuencias de Comandos por cambiar la opción de idioma en la barra de navegación en la parte superior de la ventana de "AppleScript""JavaScript".

ObjC.import('CoreServices');

var contentType = 'public.plain-text';
var appName     = 'Atom';
var bundleID    = Application(appName).id();

$.LSSetDefaultRoleHandlerForContentType(
            contentType, 
            $.kLSRolesAll, 
            bundleID);

Por supuesto, también se puede ejecutar desde dentro de AppleScript el uso de:

run script "<code>" in "JavaScript"

El script de arriba "como es" establecer la aplicación de Átomo (open-source editor de texto) como la aplicación predeterminada que se utiliza para abrir/ver/editar archivos de texto sin formato. Esto se traduce, a los archivos con extensión ".txt".

El enlace a la respuesta original contiene más detalles y útil la lectura de las referencias a entender más acerca de las infecciones urinarias si usted no está familiarizado con ellos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X