0 votos

Applescript - marcar todas las pestañas en TODAS las ventanas en Safari

Safari, tiene el Marcar todas las pestañas , función en el menú Bookmarks -> Add Bookmarks for these N tabs . Estoy buscando una manera de hacer esto automáticamente con applescript en todo abrió Safari Windows.

Con otras palabras, querer

  1. elegir alguna carpeta de marcadores, digamos "Favoritos -> Sesiones"
  2. ciclo sobre todas las ventanas de Safari
  3. si la ventana sólo tiene una pestaña, simplemente márquela en la carpeta anterior
  4. De lo contrario,
    • llamar a la Bookmarks -> Add Bookmarks for these N tabs elemento del menú
    • llenar la ventana emergente automáticamente (por ejemplo Saved Tabs window1 , Saved Tabs window2 ...etc.)
  5. repetir desde 2

Aquí https://gist.github.com/kshiteesh/b72e93d31d65008fcd11 es un bonito applescript, (también De manera similar, este que podría ser un buen punto de partida para el desarrollo, pero preguntando primero aquí - tal vez alguien ya ha hecho esto. :)

¿Alguna ayuda, por favor?

Ps - motivación - La nueva política de Apple, (bloquear el apoyo a las extensiones de Safari de legado), por desgracia causó que uno de "debe tener" extensión de Safari - Sesiones - deja de funcionar en el Safari 12. Así que, buscando alguna funcionalidad de cosecha propia.

3voto

jm666 Puntos 4489

Como dije en el comentario anterior, ahora yo usando un flujo de trabajo-aplicación autónoma.

Soy un perl desarrollador de idiomas, por lo que en el flujo de trabajo yo usando un intérprete de perl instalado a medida y muchos módulos de perl también - definitivamente NO una solución para un usuario medio (común) de mac.

Pero publicarlo, principalmente para la referencia y tal vez alguien podría hackear a alguna solución mejor. Cómo funciona - cómo usarlo:

  • desafortunadamente debe ser ejecutado manualmente - no soy capaz de averiguar cómo ejecutar algún flujo de trabajo de Automator (servicio o aplicación) cuando el Safari recibe el quit evento. :(

  • El automatizador (servicio) script tiene dos acciones:

    • ejecutar javascript (no sé applescript ni Javascript pero el javascript es más comprensible para mí) - simplemente recoge todas las URL de todas las pestañas y Windows y crea una estructura JSON, que se pasa al siguiente
    • ejecutar un shell script - que ejecuta mi perl script con el intérprete de perl personalizado instalado.
  • cuando la aplicación se ejecuta, guarda un HTML en la carpeta Sessions en mi Desktop .

  • El nombre del archivo es como s20190107-164908.html por ejemplo, la cadena de fecha-hora actual.

  • es fácil utilizar la función de vista rápida del Finder (barra espaciadora) para comprobar rápidamente el contenido del archivo.

Está mucho más allá del original Sessions addon, pero es utilizable para mí.

enter image description here

El contenido completo de las acciones anteriores son:

1.) el Javascript

function run(input, parameters) {
    var tablist = [];
    var Safari = Application('Safari');
    Safari.includeStandardAdditions = true;
    Safari.activate();
    var windows = Safari.windows();
    for(let iw=0, wsize=windows.length; iw<wsize; iw++) {
        var wintabs = [];
        var tabs = windows[iw].tabs();
        if (!tabs) continue;
        for(let it=0, tsize=tabs.length; it<tsize; it++) {
            if( tabs[it].url() ) {
                wintabs.push( {"name": tabs[it].name(), "url": tabs[it].url()} );
            }
        }
        if( wintabs.length ) {
            tablist.push(wintabs);
        }
    }
    return JSON.stringify(tablist);
}

y el shell script

export ANYENV_ROOT=/opt/anyenv
export PATH="$ANYENV_ROOT/bin:$PATH"
eval "$(anyenv init -)"

perl -MJSON -MPath::Tiny -MTime::Piece -M5.014 -w -E '
    my $jsonstr = do { local $/; <STDIN> };
    my $j = decode_json($jsonstr);
    my @lines;
    lsay("<ol>");
    for my $w (@$j) {
        lsay("<li><ul>");
        for my $t (@$w) {
            my $astr = "<li><a href=\"$t->{url}\">$t->{name}</a></li>";
            lsay($astr);
        }
        lsay("</ul></li>");
    }
    lsay("</ol>");
    my $sessdir=path( $ENV{HOME}, "Desktop/Sessions");
    $sessdir->mkpath;
    my $sessfile=$sessdir->child(localtime->strftime("s%Y%m%d-%H%M%S.html"));
    $sessfile->spew_utf8(@lines);;
    sub lsay { push @lines, $_ for @_ }
'

Ejemplo de lo que se ve en la vista rápida:

enter image description here

Como ya dije - es NO una solución para un usuario común. Sólo lo pueden utilizar los desarrolladores... :(

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