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... :(